linux/fs/overlayfs
Amir Goldstein 85fdee1eef ovl: fix regression caused by exclusive upper/work dir protection
Enforcing exclusive ownership on upper/work dirs caused a docker
regression: https://github.com/moby/moby/issues/34672.

Euan spotted the regression and pointed to the offending commit.
Vivek has brought the regression to my attention and provided this
reproducer:

Terminal 1:

  mount -t overlay -o workdir=work,lowerdir=lower,upperdir=upper none
        merged/

Terminal 2:

  unshare -m

Terminal 1:

  umount merged
  mount -t overlay -o workdir=work,lowerdir=lower,upperdir=upper none
        merged/
  mount: /root/overlay-testing/merged: none already mounted or mount point
         busy

To fix the regression, I replaced the error with an alarming warning.
With index feature enabled, mount does fail, but logs a suggestion to
override exclusive dir protection by disabling index.
Note that index=off mount does take the inuse locks, so a concurrent
index=off will issue the warning and a concurrent index=on mount will fail.

Documentation was updated to reflect this change.

Fixes: 2cac0c00a6 ("ovl: get exclusive ownership on upper/work dirs")
Cc: <stable@vger.kernel.org> # v4.13
Reported-by: Euan Kemp <euank@euank.com>
Reported-by: Vivek Goyal <vgoyal@redhat.com>
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
2017-10-05 15:53:18 +02:00
..
Kconfig ovl: introduce the inodes index dir feature 2017-07-04 22:03:17 +02:00
Makefile ovl: split super.c 2016-12-16 11:02:56 +01:00
copy_up.c ovl: fix missing unlock_rename() in ovl_do_copy_up() 2017-10-05 15:53:18 +02:00
dir.c ovl: fix missing unlock_rename() in ovl_do_copy_up() 2017-10-05 15:53:18 +02:00
inode.c ovl: fix false positive ESTALE on lookup 2017-09-12 17:22:20 +02:00
namei.c ovl: fix error value printed in ovl_lookup_index() 2017-10-05 15:53:18 +02:00
overlayfs.h ovl: fix missing unlock_rename() in ovl_do_copy_up() 2017-10-05 15:53:18 +02:00
ovl_entry.h ovl: fix regression caused by exclusive upper/work dir protection 2017-10-05 15:53:18 +02:00
readdir.c ovl: fix dentry leak in ovl_indexdir_cleanup() 2017-10-05 15:53:18 +02:00
super.c ovl: fix regression caused by exclusive upper/work dir protection 2017-10-05 15:53:18 +02:00
util.c ovl: fix missing unlock_rename() in ovl_do_copy_up() 2017-10-05 15:53:18 +02:00