Message ID | 20230601094459.1350643-15-hch@lst.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [01/16] block: factor out a bd_end_claim helper from blkdev_put | expand |
On Thu 01-06-23 11:44:57, Christoph Hellwig wrote: > Split ext4_shutdown into a low-level helper that will be reused for > implementing the shutdown super operation and a wrapper for the ioctl > handling. > > Signed-off-by: Christoph Hellwig <hch@lst.de> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@suse.cz> Honza > --- > fs/ext4/ext4.h | 1 + > fs/ext4/ioctl.c | 24 +++++++++++++++--------- > 2 files changed, 16 insertions(+), 9 deletions(-) > > diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h > index 6948d673bba2e8..2d60bbe8d171d9 100644 > --- a/fs/ext4/ext4.h > +++ b/fs/ext4/ext4.h > @@ -2965,6 +2965,7 @@ int ext4_fileattr_set(struct mnt_idmap *idmap, > int ext4_fileattr_get(struct dentry *dentry, struct fileattr *fa); > extern void ext4_reset_inode_seed(struct inode *inode); > int ext4_update_overhead(struct super_block *sb, bool force); > +int ext4_force_shutdown(struct super_block *sb, u32 flags); > > /* migrate.c */ > extern int ext4_ext_migrate(struct inode *); > diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c > index f9a43015206323..961284cc9b65cc 100644 > --- a/fs/ext4/ioctl.c > +++ b/fs/ext4/ioctl.c > @@ -793,16 +793,9 @@ static int ext4_ioctl_setproject(struct inode *inode, __u32 projid) > } > #endif > > -static int ext4_shutdown(struct super_block *sb, unsigned long arg) > +int ext4_force_shutdown(struct super_block *sb, u32 flags) > { > struct ext4_sb_info *sbi = EXT4_SB(sb); > - __u32 flags; > - > - if (!capable(CAP_SYS_ADMIN)) > - return -EPERM; > - > - if (get_user(flags, (__u32 __user *)arg)) > - return -EFAULT; > > if (flags > EXT4_GOING_FLAGS_NOLOGFLUSH) > return -EINVAL; > @@ -838,6 +831,19 @@ static int ext4_shutdown(struct super_block *sb, unsigned long arg) > return 0; > } > > +static int ext4_ioctl_shutdown(struct super_block *sb, unsigned long arg) > +{ > + u32 flags; > + > + if (!capable(CAP_SYS_ADMIN)) > + return -EPERM; > + > + if (get_user(flags, (__u32 __user *)arg)) > + return -EFAULT; > + > + return ext4_force_shutdown(sb, flags); > +} > + > struct getfsmap_info { > struct super_block *gi_sb; > struct fsmap_head __user *gi_data; > @@ -1566,7 +1572,7 @@ static long __ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) > return ext4_ioctl_get_es_cache(filp, arg); > > case EXT4_IOC_SHUTDOWN: > - return ext4_shutdown(sb, arg); > + return ext4_ioctl_shutdown(sb, arg); > > case FS_IOC_ENABLE_VERITY: > if (!ext4_has_feature_verity(sb)) > -- > 2.39.2 >
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 6948d673bba2e8..2d60bbe8d171d9 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -2965,6 +2965,7 @@ int ext4_fileattr_set(struct mnt_idmap *idmap, int ext4_fileattr_get(struct dentry *dentry, struct fileattr *fa); extern void ext4_reset_inode_seed(struct inode *inode); int ext4_update_overhead(struct super_block *sb, bool force); +int ext4_force_shutdown(struct super_block *sb, u32 flags); /* migrate.c */ extern int ext4_ext_migrate(struct inode *); diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c index f9a43015206323..961284cc9b65cc 100644 --- a/fs/ext4/ioctl.c +++ b/fs/ext4/ioctl.c @@ -793,16 +793,9 @@ static int ext4_ioctl_setproject(struct inode *inode, __u32 projid) } #endif -static int ext4_shutdown(struct super_block *sb, unsigned long arg) +int ext4_force_shutdown(struct super_block *sb, u32 flags) { struct ext4_sb_info *sbi = EXT4_SB(sb); - __u32 flags; - - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - - if (get_user(flags, (__u32 __user *)arg)) - return -EFAULT; if (flags > EXT4_GOING_FLAGS_NOLOGFLUSH) return -EINVAL; @@ -838,6 +831,19 @@ static int ext4_shutdown(struct super_block *sb, unsigned long arg) return 0; } +static int ext4_ioctl_shutdown(struct super_block *sb, unsigned long arg) +{ + u32 flags; + + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + + if (get_user(flags, (__u32 __user *)arg)) + return -EFAULT; + + return ext4_force_shutdown(sb, flags); +} + struct getfsmap_info { struct super_block *gi_sb; struct fsmap_head __user *gi_data; @@ -1566,7 +1572,7 @@ static long __ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) return ext4_ioctl_get_es_cache(filp, arg); case EXT4_IOC_SHUTDOWN: - return ext4_shutdown(sb, arg); + return ext4_ioctl_shutdown(sb, arg); case FS_IOC_ENABLE_VERITY: if (!ext4_has_feature_verity(sb))
Split ext4_shutdown into a low-level helper that will be reused for implementing the shutdown super operation and a wrapper for the ioctl handling. Signed-off-by: Christoph Hellwig <hch@lst.de> --- fs/ext4/ext4.h | 1 + fs/ext4/ioctl.c | 24 +++++++++++++++--------- 2 files changed, 16 insertions(+), 9 deletions(-)