btrfs: use common file type conversion
Subsystems (2)
PATCH v6 7/7 btrfs: use common file type conversion
Deduplicate the btrfs file type conversion implementation - file systems that use the same file types as defined by POSIX do not need to define their own versions and can use the common helper functions decared in fs_types.h and implemented in fs_types.c
Common implementation can be found via commit:bbe7449e2599 "fs: common implementation of file type"
--- fs/btrfs/btrfs_inode.h | 2 -- fs/btrfs/delayed-inode.c | 2 +- fs/btrfs/inode.c | 32 +++++++++++++++----------------- include/uapi/linux/btrfs_tree.h | 2 ++ 4 files changed, 18 insertions(+), 20 deletions(-)
fs/btrfs/btrfs_inode.h +0 -2
@@ -203,8 +203,6 @@ struct btrfs_inode {struct inode vfs_inode; }; -extern unsigned char btrfs_filetype_table[]; -static inline struct btrfs_inode *BTRFS_I (const struct inode *inode) { return container_of(inode, struct btrfs_inode, vfs_inode);
fs/btrfs/delayed-inode.c +1 -1
@@ -1692,7 +1692,7 @@ int btrfs_readdir_delayed_dir_index(struct dir_context *ctx, name = (char *)(di +1 ); name_len =btrfs_stack_dir_name_len (di); - d_type = btrfs_filetype_table[di->type]; + d_type =fs_ftype_to_dtype (di->type);btrfs_disk_key_to_cpu (&location, &di->location); over = !dir_emit(ctx, name, name_len,
fs/btrfs/inode.c +15 -17
@@ -73,17 +73,6 @@ struct kmem_cache *btrfs_trans_handle_cachep;struct kmem_cache *btrfs_path_cachep;struct kmem_cache *btrfs_free_space_cachep; -#define S_SHIFT 12 -static const unsigned char btrfs_type_by_mode[S_IFMT >>S_SHIFT ] = { - [S_IFREG >>S_SHIFT ] =BTRFS_FT_REG_FILE , - [S_IFDIR >>S_SHIFT ] =BTRFS_FT_DIR , - [S_IFCHR >>S_SHIFT ] =BTRFS_FT_CHRDEV , - [S_IFBLK >>S_SHIFT ] =BTRFS_FT_BLKDEV , - [S_IFIFO >>S_SHIFT ] =BTRFS_FT_FIFO , - [S_IFSOCK >>S_SHIFT ] =BTRFS_FT_SOCK , - [S_IFLNK >>S_SHIFT ] =BTRFS_FT_SYMLINK , -}; -static int btrfs_setsize (struct inode *inode,struct iattr *attr);static int btrfs_truncate (struct inode *inode,bool skip_writeback);static int btrfs_finish_ordered_io (struct btrfs_ordered_extent *ordered_extent);
@@ -5797,10 +5786,6 @@ static struct dentry *btrfs_lookup(struct inode *dir, struct dentry *dentry,return d_splice_alias (inode, dentry); } -unsigned char btrfs_filetype_table[] = { -DT_UNKNOWN ,DT_REG ,DT_DIR ,DT_CHR ,DT_BLK ,DT_FIFO ,DT_SOCK ,DT_LNK -}; -/* * All this infrastructure exists because dir_emit can fault, and we are holding * the tree lock when doing readdir. For now just allocate a buffer and copy
@@ -5939,7 +5924,7 @@ static int btrfs_real_readdir(struct file *file, struct dir_context *ctx) name_ptr = (char *)(entry +1 );read_extent_buffer (leaf, name_ptr, (unsigned long )(di +1 ), name_len); -put_unaligned (btrfs_filetype_table[btrfs_dir_type (leaf, di)], +put_unaligned (fs_ftype_to_dtype (btrfs_dir_type (leaf, di)), &entry->type);btrfs_dir_item_key_to_cpu (leaf, di, &location);put_unaligned (location.objectid, &entry->ino);
@@ -6344,7 +6329,20 @@ static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans,static inline u8 btrfs_inode_type (struct inode *inode) { -return btrfs_type_by_mode[(inode->i_mode &S_IFMT ) >>S_SHIFT ]; +/* +* compile-time asserts that generic FT_* types still match +* BTRFS_FT_* types +*/ +BUILD_BUG_ON (BTRFS_FT_UNKNOWN !=FT_UNKNOWN ); +BUILD_BUG_ON (BTRFS_FT_REG_FILE !=FT_REG_FILE ); +BUILD_BUG_ON (BTRFS_FT_DIR !=FT_DIR ); +BUILD_BUG_ON (BTRFS_FT_CHRDEV !=FT_CHRDEV ); +BUILD_BUG_ON (BTRFS_FT_BLKDEV !=FT_BLKDEV ); +BUILD_BUG_ON (BTRFS_FT_FIFO !=FT_FIFO ); +BUILD_BUG_ON (BTRFS_FT_SOCK !=FT_SOCK ); +BUILD_BUG_ON (BTRFS_FT_SYMLINK !=FT_SYMLINK ); + +return fs_umode_to_ftype (inode->i_mode); }/*
include/uapi/linux/btrfs_tree.h +2 -0
@@ -307,6 +307,8 @@* * Used by: * struct btrfs_dir_item.type +* +* Values 0..7 must match common file type values in fs_types.h. */ #define BTRFS_FT_UNKNOWN 0#define BTRFS_FT_REG_FILE 1
Signature · 1 line
2.20.1
Quoted 7 lines · Phillip Potter
Deduplicate the btrfs file type conversion implementation - file systems that use the same file types as defined by POSIX do not need to define their own versions and can use the common helper functions decared in
fs_types.hand implemented infs_types.cCommon implementation can be found via commit:
bbe7449e2599"fs: common implementation of file type"
Now that the prerequisite patch is in master, I can pick the btrfs specific part. Thanks.
Quoted 11 lines · David Sterba
Quoted 7 lines · Phillip Potter
Deduplicate the btrfs file type conversion implementation - file systems that use the same file types as defined by POSIX do not need to define their own versions and can use the common helper functions decared in
fs_types.hand implemented infs_types.cCommon implementation can be found via commit:
bbe7449e2599"fs: common implementation of file type"Now that the prerequisite patch is in master, I can pick the btrfs specific part. Thanks.
Thank you for this.
Regards,
Phil