Fix overlayfs inotify interaction
Subsystems (2)
PATCH 1/1 Fix overlayfs inotify interaction
Fix overlayfs inotify interaction - use d_real_inode() helper
to resolve real (underlying) inode. Without this inotify is not functional on overlayfs.
---
Runtime tested with inotifywait in monitor mode to confirm event generation.
cd /tmp/ && mkdir dest upper lower work
mount -t overlay none dest -o upperdir=upper/,lowerdir=lower/,workdir=work/ while /bin/true; do echo test >>/tmp/dest/lower-data; sleep 5; done & inotifywait -m /tmp/dest/lower-data
fs/notify/inotify/inotify_user.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/notify/inotify/inotify_user.c +1 -1
@@ -742,7 +742,7 @@ SYSCALL_DEFINE3(inotify_add_watch, int, fd, const char __user *, pathname, goto fput_and_out;/* inode held in place by reference to path; group by fget on fd */ - inode = path.dentry->d_inode; + inode =d_real_inode (path.dentry); group = f.file->private_data;/* create/update an inode mark */
Signature · 1 line
2.8.1
Ping.
2016-06-30 14:04 GMT+03:00 Andrey Jr. Melnikov <[email protected]>:
Quoted 33 lines
Fix overlayfs inotify interaction - use
d_real_inode()helper
to resolve real (underlying) inode. Without this inotify is not functional on overlayfs.Signed-off-by Andrey Jr. Melnikov <[email protected]>---
Runtime tested with inotifywait in monitor mode to confirm event generation.cd
/tmp/&& mkdir dest upper lower work
mount -t overlay none dest -o upperdir=upper/,lowerdir=lower/,workdir=work/ while/bin/true; do echo test >>/tmp/dest/lower-data; sleep 5; done & inotifywait -m/tmp/dest/lower-datafs/notify/inotify/inotify_user.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)fs/notify/inotify/inotify_user.c +1
-2@@ -742,7 +742,7 @@ SYSCALL_DEFINE3(inotify_add_watch, int, fd, const char __user *, pathname, goto fput_and_out;/* inode held in place by reference to path; group by fget on fd */ - inode = path.dentry->d_inode; + inode =d_real_inode (path.dentry); group = f.file->private_data;/* create/update an inode mark */ --2.8.1
Quoted 6 lines · Andrey Melnikov
Ping.
2016-06-30 14:04 GMT+03:00 Andrey Jr. Melnikov <[email protected]>:
Quoted 3 lines
Fix overlayfs inotify interaction - use
d_real_inode()helper
to resolve real (underlying) inode. Without this inotify is not functional on overlayfs.
Have you tried the alternative patch from Aihua Zhang:
https://lkml.org/lkml/2016/7/7/83
?
Thanks,
Miklos
Quoted 30 lines
Quoted 30 lines
Signed-off-by Andrey Jr. Melnikov <[email protected]>---
Runtime tested with inotifywait in monitor mode to confirm event generation.cd
/tmp/&& mkdir dest upper lower work
mount -t overlay none dest -o upperdir=upper/,lowerdir=lower/,workdir=work/ while/bin/true; do echo test >>/tmp/dest/lower-data; sleep 5; done & inotifywait -m/tmp/dest/lower-datafs/notify/inotify/inotify_user.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)fs/notify/inotify/inotify_user.c +1
-2@@ -742,7 +742,7 @@ SYSCALL_DEFINE3(inotify_add_watch, int, fd, const char __user *, pathname, goto fput_and_out;/* inode held in place by reference to path; group by fget on fd */ - inode = path.dentry->d_inode; + inode =d_real_inode (path.dentry); group = f.file->private_data;/* create/update an inode mark */ --2.8.1
2016-07-14 12:23 GMT+03:00 Miklos Szeredi <[email protected]>:
Quoted 10 lines · Andrey Melnikov
Quoted 6 lines
Ping.
2016-06-30 14:04 GMT+03:00 Andrey Jr. Melnikov <[email protected]>:
Quoted 3 lines
Fix overlayfs inotify interaction - use
d_real_inode()helper
to resolve real (underlying) inode. Without this inotify is not functional on overlayfs.Have you tried the alternative patch from Aihua Zhang:
https://lkml.org/lkml/2016/7/7/83
No. My patch add small overhead, lookup inode once when add inotify watch, this patch - lookup inode on each operation. For what?
Quoted 30 lines
Quoted 30 lines
Quoted 30 lines
Signed-off-by Andrey Jr. Melnikov <[email protected]>---
Runtime tested with inotifywait in monitor mode to confirm event generation.cd
/tmp/&& mkdir dest upper lower work
mount -t overlay none dest -o upperdir=upper/,lowerdir=lower/,workdir=work/ while/bin/true; do echo test >>/tmp/dest/lower-data; sleep 5; done & inotifywait -m/tmp/dest/lower-datafs/notify/inotify/inotify_user.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)fs/notify/inotify/inotify_user.c +1
-2@@ -742,7 +742,7 @@ SYSCALL_DEFINE3(inotify_add_watch, int, fd, const char __user *, pathname, goto fput_and_out;/* inode held in place by reference to path; group by fget on fd */ - inode = path.dentry->d_inode; + inode =d_real_inode (path.dentry); group = f.file->private_data;/* create/update an inode mark */ --2.8.1
Quoted 9 lines · Andrey Melnikov
2016-07-14 12:23 GMT+03:00 Miklos Szeredi <[email protected]>:
Quoted 8 lines · Andrey Melnikov
Quoted 6 lines
Ping.
2016-06-30 14:04 GMT+03:00 Andrey Jr. Melnikov <[email protected]>:
Quoted 3 lines
Fix overlayfs inotify interaction - use
d_real_inode()helper
to resolve real (underlying) inode. Without this inotify is not functional on overlayfs.
Quoted 5 lines
Quoted 2 lines
Have you tried the alternative patch from Aihua Zhang:
https://lkml.org/lkml/2016/7/7/83No. My patch add small overhead, lookup inode once when add inotify watch, this patch - lookup inode on each operation. For what?
I'm afraid that your patch won't work for all notifications (like directory modification).
Thanks,
Miklos
Quoted 31 lines
Quoted 31 lines
Quoted 31 lines
Quoted 31 lines
Signed-off-by Andrey Jr. Melnikov <[email protected]>---
Runtime tested with inotifywait in monitor mode to confirm event generation.cd
/tmp/&& mkdir dest upper lower work
mount -t overlay none dest -o upperdir=upper/,lowerdir=lower/,workdir=work/ while/bin/true; do echo test >>/tmp/dest/lower-data; sleep 5; done & inotifywait -m/tmp/dest/lower-datafs/notify/inotify/inotify_user.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)fs/notify/inotify/inotify_user.c +1
-2@@ -742,7 +742,7 @@ SYSCALL_DEFINE3(inotify_add_watch, int, fd, const char __user *, pathname, goto fput_and_out;/* inode held in place by reference to path; group by fget on fd */ - inode = path.dentry->d_inode; + inode =d_real_inode (path.dentry); group = f.file->private_data;/* create/update an inode mark */ --2.8.1
2016-07-14 12:53 GMT+03:00 Miklos Szeredi <[email protected]>:
Quoted 10 lines · Andrey Melnikov
Quoted 9 lines
2016-07-14 12:23 GMT+03:00 Miklos Szeredi <[email protected]>:
Quoted 8 lines · Andrey Melnikov
Quoted 6 lines
Ping.
2016-06-30 14:04 GMT+03:00 Andrey Jr. Melnikov <[email protected]>:
Quoted 3 lines
Fix overlayfs inotify interaction - use
d_real_inode()helper
to resolve real (underlying) inode. Without this inotify is not functional on overlayfs.
Quoted 8 lines
Quoted 5 lines
Quoted 2 lines
Have you tried the alternative patch from Aihua Zhang:
https://lkml.org/lkml/2016/7/7/83No. My patch add small overhead, lookup inode once when add inotify watch, this patch - lookup inode on each operation. For what?
I'm afraid that your patch won't work for all notifications (like directory modification).
It work with dir's too:
# mount none on /tmp/dest type overlay (rw,relatime,lowerdir=lower/,upperdir=upper/,workdir=work/)
# cd /tmp/dest/test-dir/ /tmp/dest/test-dir# ls -als total 8 4 drwxr-xr-x 2 root root 4096 Jul 14 09:58 . 4 drwxr-xr-x 1 root root 4096 Jul 14 09:58 .. /tmp/dest/test-dir# touch test-1 /tmp/dest/test-dir# cd .. /tmp/dest# mv test-dir/ test-dir-1/ /tmp/dest# touch test-dir-1/test-2 /tmp/dest# mkdir test-dir-1/test-dir-2
in other console:
# inotifywait -m /tmp/dest/test-dir/ Setting up watches. Watches established. /tmp/dest/test-dir/ OPEN,ISDIR /tmp/dest/test-dir/ ACCESS,ISDIR /tmp/dest/test-dir/ CLOSE_NOWRITE,CLOSE,ISDIR /tmp/dest/test-dir/ OPEN,ISDIR /tmp/dest/test-dir/ ACCESS,ISDIR /tmp/dest/test-dir/ CLOSE_NOWRITE,CLOSE,ISDIR /tmp/dest/test-dir/ CREATE test-1 /tmp/dest/test-dir/ OPEN test-1 /tmp/dest/test-dir/ ATTRIB test-1 /tmp/dest/test-dir/ CLOSE_WRITE,CLOSE test-1 /tmp/dest/test-dir/ MOVE_SELF /tmp/dest/test-dir/ OPEN,ISDIR /tmp/dest/test-dir/ ACCESS,ISDIR /tmp/dest/test-dir/ CLOSE_NOWRITE,CLOSE,ISDIR /tmp/dest/test-dir/ CREATE test-2 /tmp/dest/test-dir/ OPEN test-2 /tmp/dest/test-dir/ ATTRIB test-2 /tmp/dest/test-dir/ CLOSE_WRITE,CLOSE test-2 /tmp/dest/test-dir/ CREATE,ISDIR test-dir-2 /tmp/dest/test-dir/ OPEN,ISDIR /tmp/dest/test-dir/ ACCESS,ISDIR /tmp/dest/test-dir/ CLOSE_NOWRITE,CLOSE,ISDIR
Can't see any problem here.
Quoted 29 lines
Quoted 29 lines
Quoted 29 lines
Quoted 29 lines
Quoted 29 lines
Signed-off-by Andrey Jr. Melnikov <[email protected]>---
Runtime tested with inotifywait in monitor mode to confirm event generation.cd
/tmp/&& mkdir dest upper lower work
mount -t overlay none dest -o upperdir=upper/,lowerdir=lower/,workdir=work/ while/bin/true; do echo test >>/tmp/dest/lower-data; sleep 5; done & inotifywait -m/tmp/dest/lower-datafs/notify/inotify/inotify_user.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)fs/notify/inotify/inotify_user.c +1
-2@@ -742,7 +742,7 @@ SYSCALL_DEFINE3(inotify_add_watch, int, fd, const char __user *, pathname, goto fput_and_out;/* inode held in place by reference to path; group by fget on fd */ - inode = path.dentry->d_inode; + inode =d_real_inode (path.dentry); group = f.file->private_data;/* create/update an inode mark */ --2.8.1