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@xxxxxx> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> 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 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR