diff mbox series

[v2] f2fs: Make f2fs_readpages readable again

Message ID 20200203033903.GB8731@bombadil.infradead.org (mailing list archive)
State New, archived
Headers show
Series [v2] f2fs: Make f2fs_readpages readable again | expand

Commit Message

Matthew Wilcox Feb. 3, 2020, 3:39 a.m. UTC
Remove the horrendous ifdeffery by slipping an IS_ENABLED into
f2fs_compressed_file().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
v2: Fix compilation by adding more dummy functions

 fs/f2fs/data.c |  6 ------
 fs/f2fs/f2fs.h | 10 +++++++++-
 2 files changed, 9 insertions(+), 7 deletions(-)

Comments

Chao Yu Feb. 5, 2020, 1:58 a.m. UTC | #1
On 2020/2/3 11:39, Matthew Wilcox wrote:
> 
> Remove the horrendous ifdeffery by slipping an IS_ENABLED into
> f2fs_compressed_file().

I'd like to suggest to use

if (IS_ENABLED(CONFIG_F2FS_FS_COMPRESSION) && f2fs_compressed_file(inode))

here to clean up f2fs_readpages' codes.

Otherwise, f2fs module w/o compression support will not recognize compressed
file in most other cases if we add IS_ENABLED() condition into
f2fs_compressed_file().

Thanks,

> 
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> ---
> v2: Fix compilation by adding more dummy functions
> 
>  fs/f2fs/data.c |  6 ------
>  fs/f2fs/f2fs.h | 10 +++++++++-
>  2 files changed, 9 insertions(+), 7 deletions(-)
> 
> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
> index 8bd9afa81c54..41156a8f60a7 100644
> --- a/fs/f2fs/data.c
> +++ b/fs/f2fs/data.c
> @@ -2203,7 +2203,6 @@ int f2fs_mpage_readpages(struct address_space *mapping,
>  				goto next_page;
>  		}
>  
> -#ifdef CONFIG_F2FS_FS_COMPRESSION
>  		if (f2fs_compressed_file(inode)) {
>  			/* there are remained comressed pages, submit them */
>  			if (!f2fs_cluster_can_merge_page(&cc, page->index)) {
> @@ -2230,14 +2229,11 @@ int f2fs_mpage_readpages(struct address_space *mapping,
>  			goto next_page;
>  		}
>  read_single_page:
> -#endif
>  
>  		ret = f2fs_read_single_page(inode, page, max_nr_pages, &map,
>  					&bio, &last_block_in_bio, is_readahead);
>  		if (ret) {
> -#ifdef CONFIG_F2FS_FS_COMPRESSION
>  set_error_page:
> -#endif
>  			SetPageError(page);
>  			zero_user_segment(page, 0, PAGE_SIZE);
>  			unlock_page(page);
> @@ -2246,7 +2242,6 @@ int f2fs_mpage_readpages(struct address_space *mapping,
>  		if (pages)
>  			put_page(page);
>  
> -#ifdef CONFIG_F2FS_FS_COMPRESSION
>  		if (f2fs_compressed_file(inode)) {
>  			/* last page */
>  			if (nr_pages == 1 && !f2fs_cluster_is_empty(&cc)) {
> @@ -2257,7 +2252,6 @@ int f2fs_mpage_readpages(struct address_space *mapping,
>  				f2fs_destroy_compress_ctx(&cc);
>  			}
>  		}
> -#endif
>  	}
>  	BUG_ON(pages && !list_empty(pages));
>  	if (bio)
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index 5355be6b6755..e90d2b3f1d2d 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -2706,7 +2706,8 @@ static inline int f2fs_has_inline_xattr(struct inode *inode)
>  
>  static inline int f2fs_compressed_file(struct inode *inode)
>  {
> -	return S_ISREG(inode->i_mode) &&
> +	return IS_ENABLED(CONFIG_F2FS_FS_COMPRESSION) &&
> +		S_ISREG(inode->i_mode) &&
>  		is_inode_flag_set(inode, FI_COMPRESSED_FILE);
>  }
>  
> @@ -3797,6 +3798,13 @@ static inline struct page *f2fs_compress_control_page(struct page *page)
>  	WARN_ON_ONCE(1);
>  	return ERR_PTR(-EINVAL);
>  }
> +#define f2fs_cluster_can_merge_page(cc, index)	false
> +#define f2fs_read_multi_pages(cc, bio, nr_pages, last, is_ra) 0
> +#define f2fs_init_compress_ctx(cc) 0
> +#define f2fs_destroy_compress_ctx(cc) (void)0
> +#define f2fs_cluster_is_empty(cc) true
> +#define f2fs_compress_ctx_add_page(cc, page) (void)0
> +#define f2fs_is_compressed_cluster(cc, index) false
>  #endif
>  
>  static inline void set_compress_context(struct inode *inode)
>
Matthew Wilcox Feb. 5, 2020, 3:08 a.m. UTC | #2
On Wed, Feb 05, 2020 at 09:58:29AM +0800, Chao Yu wrote:
> On 2020/2/3 11:39, Matthew Wilcox wrote:
> > 
> > Remove the horrendous ifdeffery by slipping an IS_ENABLED into
> > f2fs_compressed_file().
> 
> I'd like to suggest to use
> 
> if (IS_ENABLED(CONFIG_F2FS_FS_COMPRESSION) && f2fs_compressed_file(inode))
> 
> here to clean up f2fs_readpages' codes.
> 
> Otherwise, f2fs module w/o compression support will not recognize compressed
> file in most other cases if we add IS_ENABLED() condition into
> f2fs_compressed_file().

If we need to recognise them in order to deny access to them, then I
suppose we need two predicates.  Perhaps:

	f2fs_unsupported_attributes(inode)
and
	f2fs_compressed_file(inode)

where f2fs_unsupported_attributes can NACK any set flag (including those
which don't exist yet), eg encrypted.  That seems like a larger change
than I should be making, since I'm not really familiar with f2fs code.
Chao Yu Feb. 6, 2020, 6:29 a.m. UTC | #3
On 2020/2/5 11:08, Matthew Wilcox wrote:
> On Wed, Feb 05, 2020 at 09:58:29AM +0800, Chao Yu wrote:
>> On 2020/2/3 11:39, Matthew Wilcox wrote:
>>>
>>> Remove the horrendous ifdeffery by slipping an IS_ENABLED into
>>> f2fs_compressed_file().
>>
>> I'd like to suggest to use
>>
>> if (IS_ENABLED(CONFIG_F2FS_FS_COMPRESSION) && f2fs_compressed_file(inode))
>>
>> here to clean up f2fs_readpages' codes.
>>
>> Otherwise, f2fs module w/o compression support will not recognize compressed
>> file in most other cases if we add IS_ENABLED() condition into
>> f2fs_compressed_file().
> 
> If we need to recognise them in order to deny access to them, then I
> suppose we need two predicates.  Perhaps:

Yup, for compression feature, now we use f2fs_is_compress_backend_ready() to
check whether current kernel can support to handle compressed file.

For the purpose of cleanup, I guess below change should be enough...

>> if (IS_ENABLED(CONFIG_F2FS_FS_COMPRESSION) && f2fs_compressed_file(inode))

Thanks,

> 
> 	f2fs_unsupported_attributes(inode)
> and
> 	f2fs_compressed_file(inode)
> 
> where f2fs_unsupported_attributes can NACK any set flag (including those
> which don't exist yet), eg encrypted.  That seems like a larger change
> than I should be making, since I'm not really familiar with f2fs code.
> .
>
diff mbox series

Patch

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 8bd9afa81c54..41156a8f60a7 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -2203,7 +2203,6 @@  int f2fs_mpage_readpages(struct address_space *mapping,
 				goto next_page;
 		}
 
-#ifdef CONFIG_F2FS_FS_COMPRESSION
 		if (f2fs_compressed_file(inode)) {
 			/* there are remained comressed pages, submit them */
 			if (!f2fs_cluster_can_merge_page(&cc, page->index)) {
@@ -2230,14 +2229,11 @@  int f2fs_mpage_readpages(struct address_space *mapping,
 			goto next_page;
 		}
 read_single_page:
-#endif
 
 		ret = f2fs_read_single_page(inode, page, max_nr_pages, &map,
 					&bio, &last_block_in_bio, is_readahead);
 		if (ret) {
-#ifdef CONFIG_F2FS_FS_COMPRESSION
 set_error_page:
-#endif
 			SetPageError(page);
 			zero_user_segment(page, 0, PAGE_SIZE);
 			unlock_page(page);
@@ -2246,7 +2242,6 @@  int f2fs_mpage_readpages(struct address_space *mapping,
 		if (pages)
 			put_page(page);
 
-#ifdef CONFIG_F2FS_FS_COMPRESSION
 		if (f2fs_compressed_file(inode)) {
 			/* last page */
 			if (nr_pages == 1 && !f2fs_cluster_is_empty(&cc)) {
@@ -2257,7 +2252,6 @@  int f2fs_mpage_readpages(struct address_space *mapping,
 				f2fs_destroy_compress_ctx(&cc);
 			}
 		}
-#endif
 	}
 	BUG_ON(pages && !list_empty(pages));
 	if (bio)
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 5355be6b6755..e90d2b3f1d2d 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -2706,7 +2706,8 @@  static inline int f2fs_has_inline_xattr(struct inode *inode)
 
 static inline int f2fs_compressed_file(struct inode *inode)
 {
-	return S_ISREG(inode->i_mode) &&
+	return IS_ENABLED(CONFIG_F2FS_FS_COMPRESSION) &&
+		S_ISREG(inode->i_mode) &&
 		is_inode_flag_set(inode, FI_COMPRESSED_FILE);
 }
 
@@ -3797,6 +3798,13 @@  static inline struct page *f2fs_compress_control_page(struct page *page)
 	WARN_ON_ONCE(1);
 	return ERR_PTR(-EINVAL);
 }
+#define f2fs_cluster_can_merge_page(cc, index)	false
+#define f2fs_read_multi_pages(cc, bio, nr_pages, last, is_ra) 0
+#define f2fs_init_compress_ctx(cc) 0
+#define f2fs_destroy_compress_ctx(cc) (void)0
+#define f2fs_cluster_is_empty(cc) true
+#define f2fs_compress_ctx_add_page(cc, page) (void)0
+#define f2fs_is_compressed_cluster(cc, index) false
 #endif
 
 static inline void set_compress_context(struct inode *inode)