mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-26 08:31:13 +00:00
Merge branch 'work.mount' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull mount flag updates from Al Viro: "Another chunk of fmount preparations from dhowells; only trivial conflicts for that part. It separates MS_... bits (very grotty mount(2) ABI) from the struct super_block ->s_flags (kernel-internal, only a small subset of MS_... stuff). This does *not* convert the filesystems to new constants; only the infrastructure is done here. The next step in that series is where the conflicts would be; that's the conversion of filesystems. It's purely mechanical and it's better done after the merge, so if you could run something like list=$(for i in MS_RDONLY MS_NOSUID MS_NODEV MS_NOEXEC MS_SYNCHRONOUS MS_MANDLOCK MS_DIRSYNC MS_NOATIME MS_NODIRATIME MS_SILENT MS_POSIXACL MS_KERNMOUNT MS_I_VERSION MS_LAZYTIME; do git grep -l $i fs drivers/staging/lustre drivers/mtd ipc mm include/linux; done|sort|uniq|grep -v '^fs/namespace.c$') sed -i -e 's/\<MS_RDONLY\>/SB_RDONLY/g' \ -e 's/\<MS_NOSUID\>/SB_NOSUID/g' \ -e 's/\<MS_NODEV\>/SB_NODEV/g' \ -e 's/\<MS_NOEXEC\>/SB_NOEXEC/g' \ -e 's/\<MS_SYNCHRONOUS\>/SB_SYNCHRONOUS/g' \ -e 's/\<MS_MANDLOCK\>/SB_MANDLOCK/g' \ -e 's/\<MS_DIRSYNC\>/SB_DIRSYNC/g' \ -e 's/\<MS_NOATIME\>/SB_NOATIME/g' \ -e 's/\<MS_NODIRATIME\>/SB_NODIRATIME/g' \ -e 's/\<MS_SILENT\>/SB_SILENT/g' \ -e 's/\<MS_POSIXACL\>/SB_POSIXACL/g' \ -e 's/\<MS_KERNMOUNT\>/SB_KERNMOUNT/g' \ -e 's/\<MS_I_VERSION\>/SB_I_VERSION/g' \ -e 's/\<MS_LAZYTIME\>/SB_LAZYTIME/g' \ $list and commit it with something along the lines of 'convert filesystems away from use of MS_... constants' as commit message, it would save a quite a bit of headache next cycle" * 'work.mount' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: VFS: Differentiate mount flags (MS_*) from internal superblock flags VFS: Convert sb->s_flags & MS_RDONLY to sb_rdonly(sb) vfs: Add sb_rdonly(sb) to query the MS_RDONLY flag on s_flags
This commit is contained in:
commit
0f0d12728e
76 changed files with 314 additions and 296 deletions
74
fs/super.c
74
fs/super.c
|
@ -360,7 +360,7 @@ static int grab_super(struct super_block *s) __releases(sb_lock)
|
|||
s->s_count++;
|
||||
spin_unlock(&sb_lock);
|
||||
down_write(&s->s_umount);
|
||||
if ((s->s_flags & MS_BORN) && atomic_inc_not_zero(&s->s_active)) {
|
||||
if ((s->s_flags & SB_BORN) && atomic_inc_not_zero(&s->s_active)) {
|
||||
put_super(s);
|
||||
return 1;
|
||||
}
|
||||
|
@ -390,7 +390,7 @@ bool trylock_super(struct super_block *sb)
|
|||
{
|
||||
if (down_read_trylock(&sb->s_umount)) {
|
||||
if (!hlist_unhashed(&sb->s_instances) &&
|
||||
sb->s_root && (sb->s_flags & MS_BORN))
|
||||
sb->s_root && (sb->s_flags & SB_BORN))
|
||||
return true;
|
||||
up_read(&sb->s_umount);
|
||||
}
|
||||
|
@ -419,7 +419,7 @@ void generic_shutdown_super(struct super_block *sb)
|
|||
if (sb->s_root) {
|
||||
shrink_dcache_for_umount(sb);
|
||||
sync_filesystem(sb);
|
||||
sb->s_flags &= ~MS_ACTIVE;
|
||||
sb->s_flags &= ~SB_ACTIVE;
|
||||
|
||||
fsnotify_unmount_inodes(sb);
|
||||
cgroup_writeback_umount();
|
||||
|
@ -472,7 +472,7 @@ struct super_block *sget_userns(struct file_system_type *type,
|
|||
struct super_block *old;
|
||||
int err;
|
||||
|
||||
if (!(flags & (MS_KERNMOUNT|MS_SUBMOUNT)) &&
|
||||
if (!(flags & (SB_KERNMOUNT|SB_SUBMOUNT)) &&
|
||||
!(type->fs_flags & FS_USERNS_MOUNT) &&
|
||||
!capable(CAP_SYS_ADMIN))
|
||||
return ERR_PTR(-EPERM);
|
||||
|
@ -502,7 +502,7 @@ retry:
|
|||
}
|
||||
if (!s) {
|
||||
spin_unlock(&sb_lock);
|
||||
s = alloc_super(type, (flags & ~MS_SUBMOUNT), user_ns);
|
||||
s = alloc_super(type, (flags & ~SB_SUBMOUNT), user_ns);
|
||||
if (!s)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
goto retry;
|
||||
|
@ -547,11 +547,11 @@ struct super_block *sget(struct file_system_type *type,
|
|||
* mount through to here so always use &init_user_ns
|
||||
* until that changes.
|
||||
*/
|
||||
if (flags & MS_SUBMOUNT)
|
||||
if (flags & SB_SUBMOUNT)
|
||||
user_ns = &init_user_ns;
|
||||
|
||||
/* Ensure the requestor has permissions over the target filesystem */
|
||||
if (!(flags & (MS_KERNMOUNT|MS_SUBMOUNT)) && !ns_capable(user_ns, CAP_SYS_ADMIN))
|
||||
if (!(flags & (SB_KERNMOUNT|SB_SUBMOUNT)) && !ns_capable(user_ns, CAP_SYS_ADMIN))
|
||||
return ERR_PTR(-EPERM);
|
||||
|
||||
return sget_userns(type, test, set, flags, user_ns, data);
|
||||
|
@ -594,7 +594,7 @@ void iterate_supers(void (*f)(struct super_block *, void *), void *arg)
|
|||
spin_unlock(&sb_lock);
|
||||
|
||||
down_read(&sb->s_umount);
|
||||
if (sb->s_root && (sb->s_flags & MS_BORN))
|
||||
if (sb->s_root && (sb->s_flags & SB_BORN))
|
||||
f(sb, arg);
|
||||
up_read(&sb->s_umount);
|
||||
|
||||
|
@ -628,7 +628,7 @@ void iterate_supers_type(struct file_system_type *type,
|
|||
spin_unlock(&sb_lock);
|
||||
|
||||
down_read(&sb->s_umount);
|
||||
if (sb->s_root && (sb->s_flags & MS_BORN))
|
||||
if (sb->s_root && (sb->s_flags & SB_BORN))
|
||||
f(sb, arg);
|
||||
up_read(&sb->s_umount);
|
||||
|
||||
|
@ -664,7 +664,7 @@ rescan:
|
|||
else
|
||||
down_write(&sb->s_umount);
|
||||
/* still alive? */
|
||||
if (sb->s_root && (sb->s_flags & MS_BORN))
|
||||
if (sb->s_root && (sb->s_flags & SB_BORN))
|
||||
return sb;
|
||||
if (!excl)
|
||||
up_read(&sb->s_umount);
|
||||
|
@ -785,7 +785,7 @@ rescan:
|
|||
spin_unlock(&sb_lock);
|
||||
down_read(&sb->s_umount);
|
||||
/* still alive? */
|
||||
if (sb->s_root && (sb->s_flags & MS_BORN))
|
||||
if (sb->s_root && (sb->s_flags & SB_BORN))
|
||||
return sb;
|
||||
up_read(&sb->s_umount);
|
||||
/* nope, got unmounted */
|
||||
|
@ -801,13 +801,13 @@ rescan:
|
|||
/**
|
||||
* do_remount_sb - asks filesystem to change mount options.
|
||||
* @sb: superblock in question
|
||||
* @flags: numeric part of options
|
||||
* @sb_flags: revised superblock flags
|
||||
* @data: the rest of options
|
||||
* @force: whether or not to force the change
|
||||
*
|
||||
* Alters the mount options of a mounted file system.
|
||||
*/
|
||||
int do_remount_sb(struct super_block *sb, int flags, void *data, int force)
|
||||
int do_remount_sb(struct super_block *sb, int sb_flags, void *data, int force)
|
||||
{
|
||||
int retval;
|
||||
int remount_ro;
|
||||
|
@ -816,11 +816,11 @@ int do_remount_sb(struct super_block *sb, int flags, void *data, int force)
|
|||
return -EBUSY;
|
||||
|
||||
#ifdef CONFIG_BLOCK
|
||||
if (!(flags & MS_RDONLY) && bdev_read_only(sb->s_bdev))
|
||||
if (!(sb_flags & SB_RDONLY) && bdev_read_only(sb->s_bdev))
|
||||
return -EACCES;
|
||||
#endif
|
||||
|
||||
remount_ro = (flags & MS_RDONLY) && !(sb->s_flags & MS_RDONLY);
|
||||
remount_ro = (sb_flags & SB_RDONLY) && !sb_rdonly(sb);
|
||||
|
||||
if (remount_ro) {
|
||||
if (!hlist_empty(&sb->s_pins)) {
|
||||
|
@ -831,7 +831,7 @@ int do_remount_sb(struct super_block *sb, int flags, void *data, int force)
|
|||
return 0;
|
||||
if (sb->s_writers.frozen != SB_UNFROZEN)
|
||||
return -EBUSY;
|
||||
remount_ro = (flags & MS_RDONLY) && !(sb->s_flags & MS_RDONLY);
|
||||
remount_ro = (sb_flags & SB_RDONLY) && !sb_rdonly(sb);
|
||||
}
|
||||
}
|
||||
shrink_dcache_sb(sb);
|
||||
|
@ -850,7 +850,7 @@ int do_remount_sb(struct super_block *sb, int flags, void *data, int force)
|
|||
}
|
||||
|
||||
if (sb->s_op->remount_fs) {
|
||||
retval = sb->s_op->remount_fs(sb, &flags, data);
|
||||
retval = sb->s_op->remount_fs(sb, &sb_flags, data);
|
||||
if (retval) {
|
||||
if (!force)
|
||||
goto cancel_readonly;
|
||||
|
@ -859,7 +859,7 @@ int do_remount_sb(struct super_block *sb, int flags, void *data, int force)
|
|||
sb->s_type->name, retval);
|
||||
}
|
||||
}
|
||||
sb->s_flags = (sb->s_flags & ~MS_RMT_MASK) | (flags & MS_RMT_MASK);
|
||||
sb->s_flags = (sb->s_flags & ~MS_RMT_MASK) | (sb_flags & MS_RMT_MASK);
|
||||
/* Needs to be ordered wrt mnt_is_readonly() */
|
||||
smp_wmb();
|
||||
sb->s_readonly_remount = 0;
|
||||
|
@ -892,12 +892,12 @@ static void do_emergency_remount(struct work_struct *work)
|
|||
sb->s_count++;
|
||||
spin_unlock(&sb_lock);
|
||||
down_write(&sb->s_umount);
|
||||
if (sb->s_root && sb->s_bdev && (sb->s_flags & MS_BORN) &&
|
||||
!(sb->s_flags & MS_RDONLY)) {
|
||||
if (sb->s_root && sb->s_bdev && (sb->s_flags & SB_BORN) &&
|
||||
!sb_rdonly(sb)) {
|
||||
/*
|
||||
* What lock protects sb->s_flags??
|
||||
*/
|
||||
do_remount_sb(sb, MS_RDONLY, NULL, 1);
|
||||
do_remount_sb(sb, SB_RDONLY, NULL, 1);
|
||||
}
|
||||
up_write(&sb->s_umount);
|
||||
spin_lock(&sb_lock);
|
||||
|
@ -1023,7 +1023,7 @@ struct dentry *mount_ns(struct file_system_type *fs_type,
|
|||
/* Don't allow mounting unless the caller has CAP_SYS_ADMIN
|
||||
* over the namespace.
|
||||
*/
|
||||
if (!(flags & MS_KERNMOUNT) && !ns_capable(user_ns, CAP_SYS_ADMIN))
|
||||
if (!(flags & SB_KERNMOUNT) && !ns_capable(user_ns, CAP_SYS_ADMIN))
|
||||
return ERR_PTR(-EPERM);
|
||||
|
||||
sb = sget_userns(fs_type, ns_test_super, ns_set_super, flags,
|
||||
|
@ -1033,13 +1033,13 @@ struct dentry *mount_ns(struct file_system_type *fs_type,
|
|||
|
||||
if (!sb->s_root) {
|
||||
int err;
|
||||
err = fill_super(sb, data, flags & MS_SILENT ? 1 : 0);
|
||||
err = fill_super(sb, data, flags & SB_SILENT ? 1 : 0);
|
||||
if (err) {
|
||||
deactivate_locked_super(sb);
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
|
||||
sb->s_flags |= MS_ACTIVE;
|
||||
sb->s_flags |= SB_ACTIVE;
|
||||
}
|
||||
|
||||
return dget(sb->s_root);
|
||||
|
@ -1071,7 +1071,7 @@ struct dentry *mount_bdev(struct file_system_type *fs_type,
|
|||
fmode_t mode = FMODE_READ | FMODE_EXCL;
|
||||
int error = 0;
|
||||
|
||||
if (!(flags & MS_RDONLY))
|
||||
if (!(flags & SB_RDONLY))
|
||||
mode |= FMODE_WRITE;
|
||||
|
||||
bdev = blkdev_get_by_path(dev_name, mode, fs_type);
|
||||
|
@ -1089,14 +1089,14 @@ struct dentry *mount_bdev(struct file_system_type *fs_type,
|
|||
error = -EBUSY;
|
||||
goto error_bdev;
|
||||
}
|
||||
s = sget(fs_type, test_bdev_super, set_bdev_super, flags | MS_NOSEC,
|
||||
s = sget(fs_type, test_bdev_super, set_bdev_super, flags | SB_NOSEC,
|
||||
bdev);
|
||||
mutex_unlock(&bdev->bd_fsfreeze_mutex);
|
||||
if (IS_ERR(s))
|
||||
goto error_s;
|
||||
|
||||
if (s->s_root) {
|
||||
if ((flags ^ s->s_flags) & MS_RDONLY) {
|
||||
if ((flags ^ s->s_flags) & SB_RDONLY) {
|
||||
deactivate_locked_super(s);
|
||||
error = -EBUSY;
|
||||
goto error_bdev;
|
||||
|
@ -1116,13 +1116,13 @@ struct dentry *mount_bdev(struct file_system_type *fs_type,
|
|||
s->s_mode = mode;
|
||||
snprintf(s->s_id, sizeof(s->s_id), "%pg", bdev);
|
||||
sb_set_blocksize(s, block_size(bdev));
|
||||
error = fill_super(s, data, flags & MS_SILENT ? 1 : 0);
|
||||
error = fill_super(s, data, flags & SB_SILENT ? 1 : 0);
|
||||
if (error) {
|
||||
deactivate_locked_super(s);
|
||||
goto error;
|
||||
}
|
||||
|
||||
s->s_flags |= MS_ACTIVE;
|
||||
s->s_flags |= SB_ACTIVE;
|
||||
bdev->bd_super = s;
|
||||
}
|
||||
|
||||
|
@ -1162,12 +1162,12 @@ struct dentry *mount_nodev(struct file_system_type *fs_type,
|
|||
if (IS_ERR(s))
|
||||
return ERR_CAST(s);
|
||||
|
||||
error = fill_super(s, data, flags & MS_SILENT ? 1 : 0);
|
||||
error = fill_super(s, data, flags & SB_SILENT ? 1 : 0);
|
||||
if (error) {
|
||||
deactivate_locked_super(s);
|
||||
return ERR_PTR(error);
|
||||
}
|
||||
s->s_flags |= MS_ACTIVE;
|
||||
s->s_flags |= SB_ACTIVE;
|
||||
return dget(s->s_root);
|
||||
}
|
||||
EXPORT_SYMBOL(mount_nodev);
|
||||
|
@ -1188,12 +1188,12 @@ struct dentry *mount_single(struct file_system_type *fs_type,
|
|||
if (IS_ERR(s))
|
||||
return ERR_CAST(s);
|
||||
if (!s->s_root) {
|
||||
error = fill_super(s, data, flags & MS_SILENT ? 1 : 0);
|
||||
error = fill_super(s, data, flags & SB_SILENT ? 1 : 0);
|
||||
if (error) {
|
||||
deactivate_locked_super(s);
|
||||
return ERR_PTR(error);
|
||||
}
|
||||
s->s_flags |= MS_ACTIVE;
|
||||
s->s_flags |= SB_ACTIVE;
|
||||
} else {
|
||||
do_remount_sb(s, flags, data, 0);
|
||||
}
|
||||
|
@ -1227,7 +1227,7 @@ mount_fs(struct file_system_type *type, int flags, const char *name, void *data)
|
|||
sb = root->d_sb;
|
||||
BUG_ON(!sb);
|
||||
WARN_ON(!sb->s_bdi);
|
||||
sb->s_flags |= MS_BORN;
|
||||
sb->s_flags |= SB_BORN;
|
||||
|
||||
error = security_sb_kern_mount(sb, flags, secdata);
|
||||
if (error)
|
||||
|
@ -1434,12 +1434,12 @@ int freeze_super(struct super_block *sb)
|
|||
return -EBUSY;
|
||||
}
|
||||
|
||||
if (!(sb->s_flags & MS_BORN)) {
|
||||
if (!(sb->s_flags & SB_BORN)) {
|
||||
up_write(&sb->s_umount);
|
||||
return 0; /* sic - it's "nothing to do" */
|
||||
}
|
||||
|
||||
if (sb->s_flags & MS_RDONLY) {
|
||||
if (sb_rdonly(sb)) {
|
||||
/* Nothing to do really... */
|
||||
sb->s_writers.frozen = SB_FREEZE_COMPLETE;
|
||||
up_write(&sb->s_umount);
|
||||
|
@ -1502,7 +1502,7 @@ int thaw_super(struct super_block *sb)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (sb->s_flags & MS_RDONLY) {
|
||||
if (sb_rdonly(sb)) {
|
||||
sb->s_writers.frozen = SB_UNFROZEN;
|
||||
goto out;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue