fs: ufs: Convert ufs_set_de_type to use lookup table
PATCH 1/1 fs: ufs: Convert ufs_set_de_type to use lookup table
Modify ufs_set_de_type function in fs/ufs/util.h to use a lookup table rather than a switch statement, as per the TODO comment.
Signed-off-by Phillip Potter <[email protected]>
--- fs/ufs/util.h | 50 ++++++++++++++++++++++---------------------------- 1 file changed, 22 insertions(+), 28 deletions(-)
fs/ufs/util.h +22 -28
@@ -155,37 +155,31 @@ ufs_set_de_namlen(struct super_block *sb, struct ufs_dir_entry *de, u16 value)static inline void ufs_set_de_type (struct super_block *sb,struct ufs_dir_entry *de,int mode) { +/* type lookup table, DT_UNKNOWN is default type if no case holds */ +const int mode_table[] = { +DT_UNKNOWN , +DT_FIFO ,/* mode & S_IFMT == S_IFIFO case */ +DT_CHR ,/* mode & S_IFMT == S_IFCHR case */ +DT_UNKNOWN , +DT_DIR ,/* mode & S_IFMT == S_IFDIR case */ +DT_UNKNOWN , +DT_BLK ,/* mode & S_IFMT == S_IFBLK case */ +DT_UNKNOWN , +DT_REG ,/* mode & S_IFMT == S_IFREG case */ +DT_UNKNOWN , +DT_LNK ,/* mode & S_IFMT == S_IFLNK case */ +DT_UNKNOWN , +DT_SOCK ,/* mode & S_IFMT == S_IFSOCK case */ +DT_UNKNOWN , +DT_UNKNOWN , +DT_UNKNOWN + }; +if ((UFS_SB (sb)->s_flags &UFS_DE_MASK ) !=UFS_DE_44BSD )return ; -/* -* TODO turn this into a table lookup -*/ -switch (mode &S_IFMT ) { -case S_IFSOCK : - de->d_u.d_44.d_type =DT_SOCK ; -break ; -case S_IFLNK : - de->d_u.d_44.d_type =DT_LNK ; -break ; -case S_IFREG : - de->d_u.d_44.d_type =DT_REG ; -break ; -case S_IFBLK : - de->d_u.d_44.d_type =DT_BLK ; -break ; -case S_IFDIR : - de->d_u.d_44.d_type =DT_DIR ; -break ; -case S_IFCHR : - de->d_u.d_44.d_type =DT_CHR ; -break ; -case S_IFIFO : - de->d_u.d_44.d_type =DT_FIFO ; -break ; -default : - de->d_u.d_44.d_type =DT_UNKNOWN ; - } +/* shift (mode & S_IFMT) right 12 bits to index into table */ + de->d_u.d_44.d_type = mode_table[(mode &S_IFMT ) >>12 ]; } static inline u32
Signature · 1 line
2.14.3