On Mon, Feb 11 2019, Aurélien Aptel wrote: > Hi, > > In fs/namespace.c do_add_mount() we do this check: > > /* Refuse the same filesystem on the same mount point */ > err = -EBUSY; > if (path->mnt->mnt_sb == newmnt->mnt.mnt_sb && > path->mnt->mnt_root == path->dentry) > goto unlock; > > So that mount fails with EBUSY. But for networked filesystems (at least > cifs and nfs) you can do this: > > mount //foo /mnt -o A > mount //foo /mnt -o B # different options > > Since the SB are different it works, fine. > > But mounting a 3rd time with options A succeeds, where from a user POV I > would have expected to fail. Why? > > So to recap: > > mount //foo /mnt -o A > mount //foo /mnt -o A > # EBUSY => expected behaviour > > mount //foo /mnt -o A > mount //foo /mnt -o B > # ok => expected behaviour > > mount //foo /mnt -o A > mount //foo /mnt -o B > mount //foo /mnt -o A > # ok => what? > > Shouldn't we check the stack of filesystems mounted at the path instead of > just the last one? Why? I think that the main reason that -EBUSY is important is that people often run "mount -a" and don't expect filesystems that are already mounted to be mounted again. The current behaviour achieves that. What is your use-case for wanted -EBUSY in some other circumstance? NeilBrown
Attachment:
signature.asc
Description: PGP signature