vfs: add an interface to do some preparation for umount
Subsystems (2)
RFC PATCH 1/2 vfs: add an interface to do some preparation for umount
Some file systems can do some works in the background by kthreads, we'd better stop those works before we umount the file system, or it is easy to introduce some problems. So we add an interface that is used to do some preparation for umount.
--- fs/namespace.c | 2 ++ include/linux/fs.h | 1 + 2 files changed, 3 insertions(+), 0 deletions(-)
fs/namespace.c +2 -0
@@ -1173,6 +1173,8 @@ static int do_umount(struct mount *mnt, int flags) }br_write_unlock (vfsmount_lock);up_write (&namespace_sem); +if (!retval && sb->s_op->umount_prepare) + sb->s_op->umount_prepare (sb);release_mounts (&umount_list);return retval; }
include/linux/fs.h +1 -0
@@ -1686,6 +1686,7 @@ struct super_operations {int (*statfs) (struct dentry *,struct kstatfs *);int (*remount_fs) (struct super_block *,int *,char *);void (*umount_begin) (struct super_block *); +void (*umount_prepare) (struct super_block *);int (*show_options)(struct seq_file *,struct dentry *);int (*show_devname)(struct seq_file *,struct dentry *);
Signature · 1 line
1.7.6.5
Al Viro
maintainerQuoted 4 lines · Miao Xie
Some file systems can do some works in the background by kthreads, we'd better stop those works before we umount the file system, or it is easy to introduce some problems. So we add an interface that is used to do some preparation for umount.
NAK. First of all, fs might be in active use _after_ umount. man 8 umount, see umount -l there. Moreover, the same superblock may very well be mounted more than once, so umount of an individual mountpoint would better not do anything nasty to users of other ones.
IOW, this is completely misguided - you are dealing with whatever problem it is at least two layers above the right one.
1) vfsmount may be detached from mount trees but remain in active use.
2) there may be many vfsmounts over given struct super_block.
Doing things earlier than the final mntput() runs afoul of (1); doing them before the final deactivate_locked_super() runs afoul of (2).
What the hell is that thread doing that needs ->s_umount for serialization and why is it doing that?
Quoted 14 lines · Al Viro
Quoted 4 lines · Miao Xie
Some file systems can do some works in the background by kthreads, we'd better stop those works before we umount the file system, or it is easy to introduce some problems. So we add an interface that is used to do some preparation for umount.
NAK. First of all, fs might be in active use _after_ umount. man 8 umount, see umount -l there. Moreover, the same superblock may very well be mounted more than once, so umount of an individual mountpoint would better not do anything nasty to users of other ones.
IOW, this is completely misguided - you are dealing with whatever problem it is at least two layers above the right one.
Quoted 8 lines
1) vfsmount may be detached from mount trees but remain in active use.
2) there may be many vfsmounts over given structsuper_block.Doing things earlier than the final
mntput()runs afoul of (1); doing them before the finaldeactivate_locked_super()runs afoul of (2).What the hell is that thread doing that needs ->s_umount for serialization and why is it doing that?
AFAIK, acquiring ->s_umount is to avoid the filesystem going from r/w to r/o.
This is patch is slapdash, I will find another way to deal with the bug we found.
Thanks for your review.
Miao