linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC][PATCH v5 04/09] ext2: use common file type conversion
@ 2019-01-21  0:54 Phillip Potter
  2019-01-21 14:21 ` Jan Kara
  0 siblings, 1 reply; 2+ messages in thread
From: Phillip Potter @ 2019-01-21  0:54 UTC (permalink / raw)
  To: jack; +Cc: amir73il, viro, linux-ext4, linux-fsdevel

Deduplicate the ext2 file type conversion implementation and remove
EXT2_FT_* definitions - 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

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Phillip Potter <phil@philpotter.co.uk>
---
 fs/ext2/dir.c  | 35 ++++++-----------------------------
 fs/ext2/ext2.h | 16 ----------------
 2 files changed, 6 insertions(+), 45 deletions(-)

diff --git a/fs/ext2/dir.c b/fs/ext2/dir.c
index 3b8114def693..13318e255ebf 100644
--- a/fs/ext2/dir.c
+++ b/fs/ext2/dir.c
@@ -252,33 +252,10 @@ ext2_validate_entry(char *base, unsigned offset, unsigned mask)
 	return (char *)p - base;
 }
 
-static unsigned char ext2_filetype_table[EXT2_FT_MAX] = {
-	[EXT2_FT_UNKNOWN]	= DT_UNKNOWN,
-	[EXT2_FT_REG_FILE]	= DT_REG,
-	[EXT2_FT_DIR]		= DT_DIR,
-	[EXT2_FT_CHRDEV]	= DT_CHR,
-	[EXT2_FT_BLKDEV]	= DT_BLK,
-	[EXT2_FT_FIFO]		= DT_FIFO,
-	[EXT2_FT_SOCK]		= DT_SOCK,
-	[EXT2_FT_SYMLINK]	= DT_LNK,
-};
-
-#define S_SHIFT 12
-static unsigned char ext2_type_by_mode[S_IFMT >> S_SHIFT] = {
-	[S_IFREG >> S_SHIFT]	= EXT2_FT_REG_FILE,
-	[S_IFDIR >> S_SHIFT]	= EXT2_FT_DIR,
-	[S_IFCHR >> S_SHIFT]	= EXT2_FT_CHRDEV,
-	[S_IFBLK >> S_SHIFT]	= EXT2_FT_BLKDEV,
-	[S_IFIFO >> S_SHIFT]	= EXT2_FT_FIFO,
-	[S_IFSOCK >> S_SHIFT]	= EXT2_FT_SOCK,
-	[S_IFLNK >> S_SHIFT]	= EXT2_FT_SYMLINK,
-};
-
 static inline void ext2_set_de_type(ext2_dirent *de, struct inode *inode)
 {
-	umode_t mode = inode->i_mode;
 	if (EXT2_HAS_INCOMPAT_FEATURE(inode->i_sb, EXT2_FEATURE_INCOMPAT_FILETYPE))
-		de->file_type = ext2_type_by_mode[(mode & S_IFMT)>>S_SHIFT];
+		de->file_type = fs_umode_to_ftype(inode->i_mode);
 	else
 		de->file_type = 0;
 }
@@ -293,14 +270,14 @@ ext2_readdir(struct file *file, struct dir_context *ctx)
 	unsigned long n = pos >> PAGE_SHIFT;
 	unsigned long npages = dir_pages(inode);
 	unsigned chunk_mask = ~(ext2_chunk_size(inode)-1);
-	unsigned char *types = NULL;
 	bool need_revalidate = !inode_eq_iversion(inode, file->f_version);
+	bool has_filetype;
 
 	if (pos > inode->i_size - EXT2_DIR_REC_LEN(1))
 		return 0;
 
-	if (EXT2_HAS_INCOMPAT_FEATURE(sb, EXT2_FEATURE_INCOMPAT_FILETYPE))
-		types = ext2_filetype_table;
+	has_filetype =
+		EXT2_HAS_INCOMPAT_FEATURE(sb, EXT2_FEATURE_INCOMPAT_FILETYPE);
 
 	for ( ; n < npages; n++, offset = 0) {
 		char *kaddr, *limit;
@@ -335,8 +312,8 @@ ext2_readdir(struct file *file, struct dir_context *ctx)
 			if (de->inode) {
 				unsigned char d_type = DT_UNKNOWN;
 
-				if (types && de->file_type < EXT2_FT_MAX)
-					d_type = types[de->file_type];
+				if (has_filetype)
+					d_type = fs_ftype_to_dtype(de->file_type);
 
 				if (!dir_emit(ctx, de->name, de->name_len,
 						le32_to_cpu(de->inode),
diff --git a/fs/ext2/ext2.h b/fs/ext2/ext2.h
index e770cd100a6a..93fcfe7bbb3b 100644
--- a/fs/ext2/ext2.h
+++ b/fs/ext2/ext2.h
@@ -603,22 +603,6 @@ struct ext2_dir_entry_2 {
 	char	name[];			/* File name, up to EXT2_NAME_LEN */
 };
 
-/*
- * Ext2 directory file types.  Only the low 3 bits are used.  The
- * other bits are reserved for now.
- */
-enum {
-	EXT2_FT_UNKNOWN		= 0,
-	EXT2_FT_REG_FILE	= 1,
-	EXT2_FT_DIR		= 2,
-	EXT2_FT_CHRDEV		= 3,
-	EXT2_FT_BLKDEV		= 4,
-	EXT2_FT_FIFO		= 5,
-	EXT2_FT_SOCK		= 6,
-	EXT2_FT_SYMLINK		= 7,
-	EXT2_FT_MAX
-};
-
 /*
  * EXT2_DIR_PAD defines the directory entries boundaries
  *
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [RFC][PATCH v5 04/09] ext2: use common file type conversion
  2019-01-21  0:54 [RFC][PATCH v5 04/09] ext2: use common file type conversion Phillip Potter
@ 2019-01-21 14:21 ` Jan Kara
  0 siblings, 0 replies; 2+ messages in thread
From: Jan Kara @ 2019-01-21 14:21 UTC (permalink / raw)
  To: Phillip Potter; +Cc: jack, amir73il, viro, linux-ext4, linux-fsdevel

On Mon 21-01-19 00:54:31, Phillip Potter wrote:
> Deduplicate the ext2 file type conversion implementation and remove
> EXT2_FT_* definitions - 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
> 
> Signed-off-by: Amir Goldstein <amir73il@gmail.com>
> Signed-off-by: Phillip Potter <phil@philpotter.co.uk>

This patch and the generic one look good to me. I'll wait couple more
days whether someone won't object to the general idea and then push these
two patches to my tree.

								Honza

> ---
>  fs/ext2/dir.c  | 35 ++++++-----------------------------
>  fs/ext2/ext2.h | 16 ----------------
>  2 files changed, 6 insertions(+), 45 deletions(-)
> 
> diff --git a/fs/ext2/dir.c b/fs/ext2/dir.c
> index 3b8114def693..13318e255ebf 100644
> --- a/fs/ext2/dir.c
> +++ b/fs/ext2/dir.c
> @@ -252,33 +252,10 @@ ext2_validate_entry(char *base, unsigned offset, unsigned mask)
>  	return (char *)p - base;
>  }
>  
> -static unsigned char ext2_filetype_table[EXT2_FT_MAX] = {
> -	[EXT2_FT_UNKNOWN]	= DT_UNKNOWN,
> -	[EXT2_FT_REG_FILE]	= DT_REG,
> -	[EXT2_FT_DIR]		= DT_DIR,
> -	[EXT2_FT_CHRDEV]	= DT_CHR,
> -	[EXT2_FT_BLKDEV]	= DT_BLK,
> -	[EXT2_FT_FIFO]		= DT_FIFO,
> -	[EXT2_FT_SOCK]		= DT_SOCK,
> -	[EXT2_FT_SYMLINK]	= DT_LNK,
> -};
> -
> -#define S_SHIFT 12
> -static unsigned char ext2_type_by_mode[S_IFMT >> S_SHIFT] = {
> -	[S_IFREG >> S_SHIFT]	= EXT2_FT_REG_FILE,
> -	[S_IFDIR >> S_SHIFT]	= EXT2_FT_DIR,
> -	[S_IFCHR >> S_SHIFT]	= EXT2_FT_CHRDEV,
> -	[S_IFBLK >> S_SHIFT]	= EXT2_FT_BLKDEV,
> -	[S_IFIFO >> S_SHIFT]	= EXT2_FT_FIFO,
> -	[S_IFSOCK >> S_SHIFT]	= EXT2_FT_SOCK,
> -	[S_IFLNK >> S_SHIFT]	= EXT2_FT_SYMLINK,
> -};
> -
>  static inline void ext2_set_de_type(ext2_dirent *de, struct inode *inode)
>  {
> -	umode_t mode = inode->i_mode;
>  	if (EXT2_HAS_INCOMPAT_FEATURE(inode->i_sb, EXT2_FEATURE_INCOMPAT_FILETYPE))
> -		de->file_type = ext2_type_by_mode[(mode & S_IFMT)>>S_SHIFT];
> +		de->file_type = fs_umode_to_ftype(inode->i_mode);
>  	else
>  		de->file_type = 0;
>  }
> @@ -293,14 +270,14 @@ ext2_readdir(struct file *file, struct dir_context *ctx)
>  	unsigned long n = pos >> PAGE_SHIFT;
>  	unsigned long npages = dir_pages(inode);
>  	unsigned chunk_mask = ~(ext2_chunk_size(inode)-1);
> -	unsigned char *types = NULL;
>  	bool need_revalidate = !inode_eq_iversion(inode, file->f_version);
> +	bool has_filetype;
>  
>  	if (pos > inode->i_size - EXT2_DIR_REC_LEN(1))
>  		return 0;
>  
> -	if (EXT2_HAS_INCOMPAT_FEATURE(sb, EXT2_FEATURE_INCOMPAT_FILETYPE))
> -		types = ext2_filetype_table;
> +	has_filetype =
> +		EXT2_HAS_INCOMPAT_FEATURE(sb, EXT2_FEATURE_INCOMPAT_FILETYPE);
>  
>  	for ( ; n < npages; n++, offset = 0) {
>  		char *kaddr, *limit;
> @@ -335,8 +312,8 @@ ext2_readdir(struct file *file, struct dir_context *ctx)
>  			if (de->inode) {
>  				unsigned char d_type = DT_UNKNOWN;
>  
> -				if (types && de->file_type < EXT2_FT_MAX)
> -					d_type = types[de->file_type];
> +				if (has_filetype)
> +					d_type = fs_ftype_to_dtype(de->file_type);
>  
>  				if (!dir_emit(ctx, de->name, de->name_len,
>  						le32_to_cpu(de->inode),
> diff --git a/fs/ext2/ext2.h b/fs/ext2/ext2.h
> index e770cd100a6a..93fcfe7bbb3b 100644
> --- a/fs/ext2/ext2.h
> +++ b/fs/ext2/ext2.h
> @@ -603,22 +603,6 @@ struct ext2_dir_entry_2 {
>  	char	name[];			/* File name, up to EXT2_NAME_LEN */
>  };
>  
> -/*
> - * Ext2 directory file types.  Only the low 3 bits are used.  The
> - * other bits are reserved for now.
> - */
> -enum {
> -	EXT2_FT_UNKNOWN		= 0,
> -	EXT2_FT_REG_FILE	= 1,
> -	EXT2_FT_DIR		= 2,
> -	EXT2_FT_CHRDEV		= 3,
> -	EXT2_FT_BLKDEV		= 4,
> -	EXT2_FT_FIFO		= 5,
> -	EXT2_FT_SOCK		= 6,
> -	EXT2_FT_SYMLINK		= 7,
> -	EXT2_FT_MAX
> -};
> -
>  /*
>   * EXT2_DIR_PAD defines the directory entries boundaries
>   *
> -- 
> 2.20.1
> 
-- 
Jan Kara <jack@suse.com>
SUSE Labs, CR

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-01-21 14:21 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-21  0:54 [RFC][PATCH v5 04/09] ext2: use common file type conversion Phillip Potter
2019-01-21 14:21 ` Jan Kara

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).