* [RFC][PATCH v2 07/10] ocfs2: use common file type conversion
@ 2018-10-23 20:20 Phillip Potter
0 siblings, 0 replies; only message in thread
From: Phillip Potter @ 2018-10-23 20:20 UTC (permalink / raw)
To: mark; +Cc: linux-kernel, amir73il, viro, jlbec, linux-fsdevel, ocfs2-devel
Deduplicate the ocfs2 file type conversion implementation.
Original patch by Amir Goldstein.
v2:
- This version does not replace the OCFS2_FT_x defines from
fs/ocfs2/ocfs2_fs.h, as these values are now used in compile-time
checks added by Phillip Potter to make sure they remain the
same as FT_x values
v1:
- Initial implementation
Signed-off-by: Phillip Potter <phil@philpotter.co.uk>
---
fs/ocfs2/dir.c | 32 ++++++++++++++++++--------------
fs/ocfs2/ocfs2_fs.h | 13 +------------
2 files changed, 19 insertions(+), 26 deletions(-)
diff --git a/fs/ocfs2/dir.c b/fs/ocfs2/dir.c
index b048d4fa3959..8a628633cb5c 100644
--- a/fs/ocfs2/dir.c
+++ b/fs/ocfs2/dir.c
@@ -69,10 +69,6 @@
#define NAMEI_RA_BLOCKS 4
#define NAMEI_RA_SIZE (NAMEI_RA_CHUNKS * NAMEI_RA_BLOCKS)
-static unsigned char ocfs2_filetype_table[] = {
- DT_UNKNOWN, DT_REG, DT_DIR, DT_CHR, DT_BLK, DT_FIFO, DT_SOCK, DT_LNK
-};
-
static int ocfs2_do_extend_dir(struct super_block *sb,
handle_t *handle,
struct inode *dir,
@@ -1803,13 +1799,25 @@ static int ocfs2_dir_foreach_blk_id(struct inode *inode,
}
offset += le16_to_cpu(de->rec_len);
if (le64_to_cpu(de->inode)) {
- unsigned char d_type = DT_UNKNOWN;
-
- if (de->file_type < OCFS2_FT_MAX)
- d_type = ocfs2_filetype_table[de->file_type];
+ /*
+ * compile-time asserts that generic FT_x types
+ * still match OCFS2_FT_x types - no need to list
+ * in other functions as well as build will
+ * fail either way
+ */
+ BUILD_BUG_ON(OCFS2_FT_UNKNOWN != FT_UNKNOWN);
+ BUILD_BUG_ON(OCFS2_FT_REG_FILE != FT_REG_FILE);
+ BUILD_BUG_ON(OCFS2_FT_DIR != FT_DIR);
+ BUILD_BUG_ON(OCFS2_FT_CHRDEV != FT_CHRDEV);
+ BUILD_BUG_ON(OCFS2_FT_BLKDEV != FT_BLKDEV);
+ BUILD_BUG_ON(OCFS2_FT_FIFO != FT_FIFO);
+ BUILD_BUG_ON(OCFS2_FT_SOCK != FT_SOCK);
+ BUILD_BUG_ON(OCFS2_FT_SYMLINK != FT_SYMLINK);
+ BUILD_BUG_ON(OCFS2_FT_MAX != FT_MAX);
if (!dir_emit(ctx, de->name, de->name_len,
- le64_to_cpu(de->inode), d_type))
+ le64_to_cpu(de->inode),
+ fs_dtype(de->file_type)))
goto out;
}
ctx->pos += le16_to_cpu(de->rec_len);
@@ -1901,14 +1909,10 @@ static int ocfs2_dir_foreach_blk_el(struct inode *inode,
continue;
}
if (le64_to_cpu(de->inode)) {
- unsigned char d_type = DT_UNKNOWN;
-
- if (de->file_type < OCFS2_FT_MAX)
- d_type = ocfs2_filetype_table[de->file_type];
if (!dir_emit(ctx, de->name,
de->name_len,
le64_to_cpu(de->inode),
- d_type)) {
+ fs_dtype(de->file_type))) {
brelse(bh);
return 0;
}
diff --git a/fs/ocfs2/ocfs2_fs.h b/fs/ocfs2/ocfs2_fs.h
index 7071ad0dec90..a08e2622ace7 100644
--- a/fs/ocfs2/ocfs2_fs.h
+++ b/fs/ocfs2/ocfs2_fs.h
@@ -424,17 +424,6 @@ static struct ocfs2_system_inode_info ocfs2_system_inodes[NUM_SYSTEM_INODES] = {
#define OCFS2_LINKS_HI_SHIFT 16
#define OCFS2_DX_ENTRIES_MAX (0xffffffffU)
-#define S_SHIFT 12
-static unsigned char ocfs2_type_by_mode[S_IFMT >> S_SHIFT] = {
- [S_IFREG >> S_SHIFT] = OCFS2_FT_REG_FILE,
- [S_IFDIR >> S_SHIFT] = OCFS2_FT_DIR,
- [S_IFCHR >> S_SHIFT] = OCFS2_FT_CHRDEV,
- [S_IFBLK >> S_SHIFT] = OCFS2_FT_BLKDEV,
- [S_IFIFO >> S_SHIFT] = OCFS2_FT_FIFO,
- [S_IFSOCK >> S_SHIFT] = OCFS2_FT_SOCK,
- [S_IFLNK >> S_SHIFT] = OCFS2_FT_SYMLINK,
-};
-
/*
* Convenience casts
@@ -1629,7 +1618,7 @@ static inline int ocfs2_sprintf_system_inode_name(char *buf, int len,
static inline void ocfs2_set_de_type(struct ocfs2_dir_entry *de,
umode_t mode)
{
- de->file_type = ocfs2_type_by_mode[(mode & S_IFMT)>>S_SHIFT];
+ de->file_type = fs_umode_to_ftype(mode);
}
static inline int ocfs2_gd_is_discontig(struct ocfs2_group_desc *gd)
--
2.17.2
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2018-10-24 4:45 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-10-23 20:20 [RFC][PATCH v2 07/10] ocfs2: use common file type conversion Phillip Potter
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.