linux-erofs.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3] erofs: avoiding using generic_block_bmap
@ 2020-12-08 13:11 Huang Jianan
  2020-12-09  2:34 ` Huang Jianan
  0 siblings, 1 reply; 4+ messages in thread
From: Huang Jianan @ 2020-12-08 13:11 UTC (permalink / raw)
  To: linux-erofs; +Cc: linux-kernel, guoweichao, zhangshiming

iblock indicates the number of i_blkbits-sized blocks rather than
sectors.

In addition, considering buffer_head limits mapped size to 32-bits,
should avoid using generic_block_bmap.

Fixes: 9da681e017a3 ("staging: erofs: support bmap")
Signed-off-by: Huang Jianan <huangjianan@oppo.com>
Signed-off-by: Guo Weichao <guoweichao@oppo.com>
---
 fs/erofs/data.c | 30 ++++++++++--------------------
 1 file changed, 10 insertions(+), 20 deletions(-)

diff --git a/fs/erofs/data.c b/fs/erofs/data.c
index 347be146884c..399ffd857c50 100644
--- a/fs/erofs/data.c
+++ b/fs/erofs/data.c
@@ -312,36 +312,26 @@ static void erofs_raw_access_readahead(struct readahead_control *rac)
 		submit_bio(bio);
 }
 
-static int erofs_get_block(struct inode *inode, sector_t iblock,
-			   struct buffer_head *bh, int create)
-{
-	struct erofs_map_blocks map = {
-		.m_la = iblock << 9,
-	};
-	int err;
-
-	err = erofs_map_blocks(inode, &map, EROFS_GET_BLOCKS_RAW);
-	if (err)
-		return err;
-
-	if (map.m_flags & EROFS_MAP_MAPPED)
-		bh->b_blocknr = erofs_blknr(map.m_pa);
-
-	return err;
-}
-
 static sector_t erofs_bmap(struct address_space *mapping, sector_t block)
 {
 	struct inode *inode = mapping->host;
+	struct erofs_map_blocks map = {
+		.m_la = blknr_to_addr(iblock),
+	};
+	sector_t blknr = 0;
 
 	if (EROFS_I(inode)->datalayout == EROFS_INODE_FLAT_INLINE) {
 		erofs_blk_t blks = i_size_read(inode) >> LOG_BLOCK_SIZE;
 
 		if (block >> LOG_SECTORS_PER_BLOCK >= blks)
-			return 0;
+			goto out;
 	}
 
-	return generic_block_bmap(mapping, block, erofs_get_block);
+	if (!erofs_map_blocks(inode, &map, EROFS_GET_BLOCKS_RAW))
+		blknr = erofs_blknr(map.m_pa);
+
+out:
+	return blknr;
 }
 
 /* for uncompressed (aligned) files and raw access for other files */
-- 
2.25.1


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

* Re: [PATCH v3] erofs: avoiding using generic_block_bmap
  2020-12-08 13:11 [PATCH v3] erofs: avoiding using generic_block_bmap Huang Jianan
@ 2020-12-09  2:34 ` Huang Jianan
  2020-12-09  2:44   ` Gao Xiang
  0 siblings, 1 reply; 4+ messages in thread
From: Huang Jianan @ 2020-12-09  2:34 UTC (permalink / raw)
  To: linux-erofs; +Cc: guoweichao, zhangshiming, linux-kernel


在 2020/12/8 21:11, Huang Jianan 写道:
> iblock indicates the number of i_blkbits-sized blocks rather than
> sectors.
>
> In addition, considering buffer_head limits mapped size to 32-bits,
> should avoid using generic_block_bmap.
>
> Fixes: 9da681e017a3 ("staging: erofs: support bmap")
> Signed-off-by: Huang Jianan <huangjianan@oppo.com>
> Signed-off-by: Guo Weichao <guoweichao@oppo.com>
> ---
>   fs/erofs/data.c | 30 ++++++++++--------------------
>   1 file changed, 10 insertions(+), 20 deletions(-)
>
> diff --git a/fs/erofs/data.c b/fs/erofs/data.c
> index 347be146884c..399ffd857c50 100644
> --- a/fs/erofs/data.c
> +++ b/fs/erofs/data.c
> @@ -312,36 +312,26 @@ static void erofs_raw_access_readahead(struct readahead_control *rac)
>   		submit_bio(bio);
>   }
>   
> -static int erofs_get_block(struct inode *inode, sector_t iblock,
> -			   struct buffer_head *bh, int create)
> -{
> -	struct erofs_map_blocks map = {
> -		.m_la = iblock << 9,
> -	};
> -	int err;
> -
> -	err = erofs_map_blocks(inode, &map, EROFS_GET_BLOCKS_RAW);
> -	if (err)
> -		return err;
> -
> -	if (map.m_flags & EROFS_MAP_MAPPED)
> -		bh->b_blocknr = erofs_blknr(map.m_pa);
> -
> -	return err;
> -}
> -
>   static sector_t erofs_bmap(struct address_space *mapping, sector_t block)
>   {
>   	struct inode *inode = mapping->host;
> +	struct erofs_map_blocks map = {
> +		.m_la = blknr_to_addr(iblock),

Sorry for my mistake, it should be:

.m_la = blknr_to_addr(block),

> +	};
> +	sector_t blknr = 0;
>   
>   	if (EROFS_I(inode)->datalayout == EROFS_INODE_FLAT_INLINE) {
>   		erofs_blk_t blks = i_size_read(inode) >> LOG_BLOCK_SIZE;
>   
>   		if (block >> LOG_SECTORS_PER_BLOCK >= blks)
> -			return 0;
> +			goto out;
>   	}
>   
> -	return generic_block_bmap(mapping, block, erofs_get_block);
> +	if (!erofs_map_blocks(inode, &map, EROFS_GET_BLOCKS_RAW))
> +		blknr = erofs_blknr(map.m_pa);
> +
> +out:
> +	return blknr;
>   }
>   
>   /* for uncompressed (aligned) files and raw access for other files */

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

* Re: [PATCH v3] erofs: avoiding using generic_block_bmap
  2020-12-09  2:34 ` Huang Jianan
@ 2020-12-09  2:44   ` Gao Xiang
  2020-12-09  2:56     ` Chao Yu
  0 siblings, 1 reply; 4+ messages in thread
From: Gao Xiang @ 2020-12-09  2:44 UTC (permalink / raw)
  To: Huang Jianan, Chao Yu; +Cc: guoweichao, linux-erofs, zhangshiming, linux-kernel

Hi Jianan and Chao,

On Wed, Dec 09, 2020 at 10:34:54AM +0800, Huang Jianan wrote:
> 
> 在 2020/12/8 21:11, Huang Jianan 写道:

...

> > -
> >   static sector_t erofs_bmap(struct address_space *mapping, sector_t block)
> >   {
> >   	struct inode *inode = mapping->host;
> > +	struct erofs_map_blocks map = {
> > +		.m_la = blknr_to_addr(iblock),
> 
> Sorry for my mistake, it should be:
> 
> .m_la = blknr_to_addr(block),
>

Sigh, since my ro_fsstress doesn't cover bmap interface... I mean do we need
to add some testcase for this? (But it needs to be fixed anyway, plus this patch
looks good to me....)

Hi Chao,
could you kindly leave some free slot for this patch and

erofs: force inplace I/O under low memory scenario
https://lore.kernel.org/r/20201208054600.16302-1-hsiangkao@aol.com

Since I'd like to merge these all for 5.11-rc1 (so we could have more time to
test until the next LTS version), since 5.10 is a LTS version, I tend to not
introduce any big modification (so in the past months, "erofs: force inplace
I/O under low memory scenario" never upstreamed at all.)

Thanks,
Gao Xiang



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

* Re: [PATCH v3] erofs: avoiding using generic_block_bmap
  2020-12-09  2:44   ` Gao Xiang
@ 2020-12-09  2:56     ` Chao Yu
  0 siblings, 0 replies; 4+ messages in thread
From: Chao Yu @ 2020-12-09  2:56 UTC (permalink / raw)
  To: Gao Xiang, Huang Jianan
  Cc: guoweichao, linux-erofs, zhangshiming, linux-kernel

On 2020/12/9 10:44, Gao Xiang wrote:
> Hi Jianan and Chao,
> 
> On Wed, Dec 09, 2020 at 10:34:54AM +0800, Huang Jianan wrote:
>>
>> 在 2020/12/8 21:11, Huang Jianan 写道:
> 
> ...
> 
>>> -
>>>    static sector_t erofs_bmap(struct address_space *mapping, sector_t block)
>>>    {
>>>    	struct inode *inode = mapping->host;
>>> +	struct erofs_map_blocks map = {
>>> +		.m_la = blknr_to_addr(iblock),
>>
>> Sorry for my mistake, it should be:
>>
>> .m_la = blknr_to_addr(block),
>>
> 
> Sigh, since my ro_fsstress doesn't cover bmap interface... I mean do we need
> to add some testcase for this? (But it needs to be fixed anyway, plus this patch
> looks good to me....)
> 
> Hi Chao,
> could you kindly leave some free slot for this patch and
> 
> erofs: force inplace I/O under low memory scenario
> https://lore.kernel.org/r/20201208054600.16302-1-hsiangkao@aol.com

Will review soon. :)

Thanks,

> 
> Since I'd like to merge these all for 5.11-rc1 (so we could have more time to
> test until the next LTS version), since 5.10 is a LTS version, I tend to not
> introduce any big modification (so in the past months, "erofs: force inplace
> I/O under low memory scenario" never upstreamed at all.)
> 
> Thanks,
> Gao Xiang
> 
> 
> .
> 

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

end of thread, other threads:[~2020-12-09  2:56 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-08 13:11 [PATCH v3] erofs: avoiding using generic_block_bmap Huang Jianan
2020-12-09  2:34 ` Huang Jianan
2020-12-09  2:44   ` Gao Xiang
2020-12-09  2:56     ` Chao Yu

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).