Messages in this thread | | | Subject | Re: [f2fs-dev] [PATCH v4 1/2] f2fs: add F2FS_IOC_GET_COMPRESS_OPTION ioctl | From | Chao Yu <> | Date | Wed, 28 Oct 2020 14:37:29 +0800 |
| |
On 2020/10/27 13:38, Daeho Jeong wrote: > From: Daeho Jeong <daehojeong@google.com> > > Added a new F2FS_IOC_GET_COMPRESS_OPTION ioctl to get file compression > option of a file. > > struct f2fs_comp_option { > u8 algorithm; => compression algorithm > => 0:lzo, 1:lz4, 2:zstd, 3:lzorle > u8 log_cluster_size; => log scale cluster size > => 2 ~ 8
I prepare to change i_padding field to i_cflags, so I guess we need to update struct f2fs_comp_option as well later.
BTW, i_cflags could be set to support more layout of compress inode, e.g. like recently developed ckksum feature which need to struct compress_data layout update.
> }; > > struct f2fs_comp_option option; > > ioctl(fd, F2FS_IOC_GET_COMPRESS_OPTION, &option); > > Signed-off-by: Daeho Jeong <daehojeong@google.com> > --- > > v4: changed commit message. > v3: changed the error number more specific. > v2: added ioctl description. > --- > fs/f2fs/f2fs.h | 7 +++++++ > fs/f2fs/file.c | 30 ++++++++++++++++++++++++++++++ > 2 files changed, 37 insertions(+) > > diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h > index 53fe2853579c..a33c90cf979b 100644 > --- a/fs/f2fs/f2fs.h > +++ b/fs/f2fs/f2fs.h > @@ -433,6 +433,8 @@ static inline bool __has_cursum_space(struct f2fs_journal *journal, > _IOR(F2FS_IOCTL_MAGIC, 19, __u64) > #define F2FS_IOC_SEC_TRIM_FILE _IOW(F2FS_IOCTL_MAGIC, 20, \ > struct f2fs_sectrim_range) > +#define F2FS_IOC_GET_COMPRESS_OPTION _IOR(F2FS_IOCTL_MAGIC, 21, \ > + struct f2fs_comp_option) > > /* > * should be same as XFS_IOC_GOINGDOWN. > @@ -481,6 +483,11 @@ struct f2fs_sectrim_range { > u64 flags; > }; > > +struct f2fs_comp_option { > + u8 algorithm; > + u8 log_cluster_size; > +}; > + > /* for inline stuff */ > #define DEF_INLINE_RESERVED_SIZE 1 > static inline int get_extra_isize(struct inode *inode); > diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c > index ef5a844de53f..8922ab191a9d 100644 > --- a/fs/f2fs/file.c > +++ b/fs/f2fs/file.c > @@ -3936,6 +3936,33 @@ static int f2fs_sec_trim_file(struct file *filp, unsigned long arg) > return ret; > } > > +static int f2fs_ioc_get_compress_option(struct file *filp, unsigned long arg) > +{ > + struct inode *inode = file_inode(filp); > + struct f2fs_comp_option option; > + > + if (!f2fs_sb_has_compression(F2FS_I_SB(inode))) > + return -EOPNOTSUPP; > + > + inode_lock(inode); > + > + if (!f2fs_compressed_file(inode)) { > + inode_unlock(inode); > + return -ENODATA; > + } > + > + option.algorithm = F2FS_I(inode)->i_compress_algorithm; > + option.log_cluster_size = F2FS_I(inode)->i_log_cluster_size; > + > + inode_unlock(inode); > + > + if (copy_to_user((struct f2fs_comp_option __user *)arg, &option, > + sizeof(option))) > + return -EFAULT; > + > + return 0; > +} > + > long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) > { > if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(filp))))) > @@ -4024,6 +4051,8 @@ long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) > return f2fs_reserve_compress_blocks(filp, arg); > case F2FS_IOC_SEC_TRIM_FILE: > return f2fs_sec_trim_file(filp, arg); > + case F2FS_IOC_GET_COMPRESS_OPTION: > + return f2fs_ioc_get_compress_option(filp, arg); > default: > return -ENOTTY; > } > @@ -4194,6 +4223,7 @@ long f2fs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) > case F2FS_IOC_RELEASE_COMPRESS_BLOCKS: > case F2FS_IOC_RESERVE_COMPRESS_BLOCKS: > case F2FS_IOC_SEC_TRIM_FILE: > + case F2FS_IOC_GET_COMPRESS_OPTION: > break; > default: > return -ENOIOCTLCMD; >
| |