linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] f2fs: retry ENOMEM for quota_read|write
@ 2017-10-19 16:56 Jaegeuk Kim
  2017-10-19 16:56 ` [PATCH 2/2] f2fs: relax EIO injection for quota file Jaegeuk Kim
  2017-10-22 15:02 ` [f2fs-dev] [PATCH 1/2] f2fs: retry ENOMEM for quota_read|write Chao Yu
  0 siblings, 2 replies; 8+ messages in thread
From: Jaegeuk Kim @ 2017-10-19 16:56 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel, linux-f2fs-devel; +Cc: Jaegeuk Kim

This gives another chance to read or write quota data.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
---
 fs/f2fs/super.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index fc3b74e53670..2c6e9adce464 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -1351,8 +1351,13 @@ static ssize_t f2fs_quota_read(struct super_block *sb, int type, char *data,
 		tocopy = min_t(unsigned long, sb->s_blocksize - offset, toread);
 repeat:
 		page = read_mapping_page(mapping, blkidx, NULL);
-		if (IS_ERR(page))
+		if (IS_ERR(page)) {
+			if (PTR_ERR(page) == -ENOMEM) {
+				congestion_wait(BLK_RW_ASYNC, HZ/50);
+				goto repeat;
+			}
 			return PTR_ERR(page);
+		}
 
 		lock_page(page);
 
@@ -1395,10 +1400,14 @@ static ssize_t f2fs_quota_write(struct super_block *sb, int type,
 	while (towrite > 0) {
 		tocopy = min_t(unsigned long, sb->s_blocksize - offset,
 								towrite);
-
+retry:
 		err = a_ops->write_begin(NULL, mapping, off, tocopy, 0,
 							&page, NULL);
 		if (unlikely(err)) {
+			if (err == -ENOMEM) {
+				congestion_wait(BLK_RW_ASYNC, HZ/50);
+				goto retry;
+			}
 			if (len == towrite)
 				return err;
 			break;
-- 
2.14.0.rc1.383.gd1ce394fe2-goog

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

* [PATCH 2/2] f2fs: relax EIO injection for quota file
  2017-10-19 16:56 [PATCH 1/2] f2fs: retry ENOMEM for quota_read|write Jaegeuk Kim
@ 2017-10-19 16:56 ` Jaegeuk Kim
  2017-10-22 15:11   ` [f2fs-dev] " Chao Yu
  2017-10-22 15:02 ` [f2fs-dev] [PATCH 1/2] f2fs: retry ENOMEM for quota_read|write Chao Yu
  1 sibling, 1 reply; 8+ messages in thread
From: Jaegeuk Kim @ 2017-10-19 16:56 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel, linux-f2fs-devel; +Cc: Jaegeuk Kim

This case is not happening easily.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
---
 fs/f2fs/f2fs.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index e0ef31cb2cc6..6301ccca8888 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -1544,7 +1544,7 @@ static inline int inc_valid_block_count(struct f2fs_sb_info *sbi,
 		return ret;
 
 #ifdef CONFIG_F2FS_FAULT_INJECTION
-	if (time_to_inject(sbi, FAULT_BLOCK)) {
+	if (!IS_NOQUOTA(inode) && time_to_inject(sbi, FAULT_BLOCK)) {
 		f2fs_show_injection_info(FAULT_BLOCK);
 		release = *count;
 		goto enospc;
-- 
2.14.0.rc1.383.gd1ce394fe2-goog

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

* Re: [f2fs-dev] [PATCH 1/2] f2fs: retry ENOMEM for quota_read|write
  2017-10-19 16:56 [PATCH 1/2] f2fs: retry ENOMEM for quota_read|write Jaegeuk Kim
  2017-10-19 16:56 ` [PATCH 2/2] f2fs: relax EIO injection for quota file Jaegeuk Kim
@ 2017-10-22 15:02 ` Chao Yu
  1 sibling, 0 replies; 8+ messages in thread
From: Chao Yu @ 2017-10-22 15:02 UTC (permalink / raw)
  To: Jaegeuk Kim, linux-kernel, linux-fsdevel, linux-f2fs-devel

On 2017/10/20 0:56, Jaegeuk Kim wrote:
> This gives another chance to read or write quota data.
> 
> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>

Reviewed-by: Chao Yu <yuchao0@huawei.com>

Thanks,

> ---
>  fs/f2fs/super.c | 13 +++++++++++--
>  1 file changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> index fc3b74e53670..2c6e9adce464 100644
> --- a/fs/f2fs/super.c
> +++ b/fs/f2fs/super.c
> @@ -1351,8 +1351,13 @@ static ssize_t f2fs_quota_read(struct super_block *sb, int type, char *data,
>  		tocopy = min_t(unsigned long, sb->s_blocksize - offset, toread);
>  repeat:
>  		page = read_mapping_page(mapping, blkidx, NULL);
> -		if (IS_ERR(page))
> +		if (IS_ERR(page)) {
> +			if (PTR_ERR(page) == -ENOMEM) {
> +				congestion_wait(BLK_RW_ASYNC, HZ/50);
> +				goto repeat;
> +			}
>  			return PTR_ERR(page);
> +		}
>  
>  		lock_page(page);
>  
> @@ -1395,10 +1400,14 @@ static ssize_t f2fs_quota_write(struct super_block *sb, int type,
>  	while (towrite > 0) {
>  		tocopy = min_t(unsigned long, sb->s_blocksize - offset,
>  								towrite);
> -
> +retry:
>  		err = a_ops->write_begin(NULL, mapping, off, tocopy, 0,
>  							&page, NULL);
>  		if (unlikely(err)) {
> +			if (err == -ENOMEM) {
> +				congestion_wait(BLK_RW_ASYNC, HZ/50);
> +				goto retry;
> +			}
>  			if (len == towrite)
>  				return err;
>  			break;
> 

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

* Re: [f2fs-dev] [PATCH 2/2] f2fs: relax EIO injection for quota file
  2017-10-19 16:56 ` [PATCH 2/2] f2fs: relax EIO injection for quota file Jaegeuk Kim
@ 2017-10-22 15:11   ` Chao Yu
  2017-10-22 16:51     ` Jaegeuk Kim
  0 siblings, 1 reply; 8+ messages in thread
From: Chao Yu @ 2017-10-22 15:11 UTC (permalink / raw)
  To: Jaegeuk Kim, linux-kernel, linux-fsdevel, linux-f2fs-devel

On 2017/10/20 0:56, Jaegeuk Kim wrote:
> This case is not happening easily.

Actually it can happen, so why not just keep it?

Thanks,

> 
> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> ---
>  fs/f2fs/f2fs.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index e0ef31cb2cc6..6301ccca8888 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -1544,7 +1544,7 @@ static inline int inc_valid_block_count(struct f2fs_sb_info *sbi,
>  		return ret;
>  
>  #ifdef CONFIG_F2FS_FAULT_INJECTION
> -	if (time_to_inject(sbi, FAULT_BLOCK)) {
> +	if (!IS_NOQUOTA(inode) && time_to_inject(sbi, FAULT_BLOCK)) {
>  		f2fs_show_injection_info(FAULT_BLOCK);
>  		release = *count;
>  		goto enospc;
> 

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

* Re: [f2fs-dev] [PATCH 2/2] f2fs: relax EIO injection for quota file
  2017-10-22 15:11   ` [f2fs-dev] " Chao Yu
@ 2017-10-22 16:51     ` Jaegeuk Kim
  2017-10-28  9:22       ` Chao Yu
  0 siblings, 1 reply; 8+ messages in thread
From: Jaegeuk Kim @ 2017-10-22 16:51 UTC (permalink / raw)
  To: Chao Yu; +Cc: linux-kernel, linux-fsdevel, linux-f2fs-devel

On 10/22, Chao Yu wrote:
> On 2017/10/20 0:56, Jaegeuk Kim wrote:
> > This case is not happening easily.
> 
> Actually it can happen, so why not just keep it?

Okay, so let me keep this patch for local stress tests only.

Thanks,


> 
> Thanks,
> 
> > 
> > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> > ---
> >  fs/f2fs/f2fs.h | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> > index e0ef31cb2cc6..6301ccca8888 100644
> > --- a/fs/f2fs/f2fs.h
> > +++ b/fs/f2fs/f2fs.h
> > @@ -1544,7 +1544,7 @@ static inline int inc_valid_block_count(struct f2fs_sb_info *sbi,
> >  		return ret;
> >  
> >  #ifdef CONFIG_F2FS_FAULT_INJECTION
> > -	if (time_to_inject(sbi, FAULT_BLOCK)) {
> > +	if (!IS_NOQUOTA(inode) && time_to_inject(sbi, FAULT_BLOCK)) {
> >  		f2fs_show_injection_info(FAULT_BLOCK);
> >  		release = *count;
> >  		goto enospc;
> > 

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

* Re: [f2fs-dev] [PATCH 2/2] f2fs: relax EIO injection for quota file
  2017-10-22 16:51     ` Jaegeuk Kim
@ 2017-10-28  9:22       ` Chao Yu
  2017-10-30  9:21         ` Jaegeuk Kim
  0 siblings, 1 reply; 8+ messages in thread
From: Chao Yu @ 2017-10-28  9:22 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu; +Cc: linux-kernel, linux-fsdevel, linux-f2fs-devel

Hi Jaegeuk,

On 2017/10/23 0:51, Jaegeuk Kim wrote:
> On 10/22, Chao Yu wrote:
>> On 2017/10/20 0:56, Jaegeuk Kim wrote:
>>> This case is not happening easily.
>>
>> Actually it can happen, so why not just keep it?
> 
> Okay, so let me keep this patch for local stress tests only.

May I ask which type and rate of fault injection you are using for
test now?

Thanks,

> 
> Thanks,
> 
> 
>>
>> Thanks,
>>
>>>
>>> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
>>> ---
>>>  fs/f2fs/f2fs.h | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
>>> index e0ef31cb2cc6..6301ccca8888 100644
>>> --- a/fs/f2fs/f2fs.h
>>> +++ b/fs/f2fs/f2fs.h
>>> @@ -1544,7 +1544,7 @@ static inline int inc_valid_block_count(struct f2fs_sb_info *sbi,
>>>  		return ret;
>>>  
>>>  #ifdef CONFIG_F2FS_FAULT_INJECTION
>>> -	if (time_to_inject(sbi, FAULT_BLOCK)) {
>>> +	if (!IS_NOQUOTA(inode) && time_to_inject(sbi, FAULT_BLOCK)) {
>>>  		f2fs_show_injection_info(FAULT_BLOCK);
>>>  		release = *count;
>>>  		goto enospc;
>>>
> 
> .
> 

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

* Re: [f2fs-dev] [PATCH 2/2] f2fs: relax EIO injection for quota file
  2017-10-28  9:22       ` Chao Yu
@ 2017-10-30  9:21         ` Jaegeuk Kim
  2017-10-30  9:43           ` Chao Yu
  0 siblings, 1 reply; 8+ messages in thread
From: Jaegeuk Kim @ 2017-10-30  9:21 UTC (permalink / raw)
  To: Chao Yu; +Cc: Chao Yu, linux-kernel, linux-fsdevel, linux-f2fs-devel

On 10/28, Chao Yu wrote:
> Hi Jaegeuk,
> 
> On 2017/10/23 0:51, Jaegeuk Kim wrote:
> > On 10/22, Chao Yu wrote:
> >> On 2017/10/20 0:56, Jaegeuk Kim wrote:
> >>> This case is not happening easily.
> >>
> >> Actually it can happen, so why not just keep it?
> > 
> > Okay, so let me keep this patch for local stress tests only.
> 
> May I ask which type and rate of fault injection you are using for
> test now?

I select random value between 3000 and 5000, and 255 for type.

Thanks,

> 
> Thanks,
> 
> > 
> > Thanks,
> > 
> > 
> >>
> >> Thanks,
> >>
> >>>
> >>> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> >>> ---
> >>>  fs/f2fs/f2fs.h | 2 +-
> >>>  1 file changed, 1 insertion(+), 1 deletion(-)
> >>>
> >>> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> >>> index e0ef31cb2cc6..6301ccca8888 100644
> >>> --- a/fs/f2fs/f2fs.h
> >>> +++ b/fs/f2fs/f2fs.h
> >>> @@ -1544,7 +1544,7 @@ static inline int inc_valid_block_count(struct f2fs_sb_info *sbi,
> >>>  		return ret;
> >>>  
> >>>  #ifdef CONFIG_F2FS_FAULT_INJECTION
> >>> -	if (time_to_inject(sbi, FAULT_BLOCK)) {
> >>> +	if (!IS_NOQUOTA(inode) && time_to_inject(sbi, FAULT_BLOCK)) {
> >>>  		f2fs_show_injection_info(FAULT_BLOCK);
> >>>  		release = *count;
> >>>  		goto enospc;
> >>>
> > 
> > .
> > 

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

* Re: [f2fs-dev] [PATCH 2/2] f2fs: relax EIO injection for quota file
  2017-10-30  9:21         ` Jaegeuk Kim
@ 2017-10-30  9:43           ` Chao Yu
  0 siblings, 0 replies; 8+ messages in thread
From: Chao Yu @ 2017-10-30  9:43 UTC (permalink / raw)
  To: Jaegeuk Kim; +Cc: Chao Yu, linux-kernel, linux-fsdevel, linux-f2fs-devel

On 2017/10/30 17:21, Jaegeuk Kim wrote:
> On 10/28, Chao Yu wrote:
>> Hi Jaegeuk,
>>
>> On 2017/10/23 0:51, Jaegeuk Kim wrote:
>>> On 10/22, Chao Yu wrote:
>>>> On 2017/10/20 0:56, Jaegeuk Kim wrote:
>>>>> This case is not happening easily.
>>>>
>>>> Actually it can happen, so why not just keep it?
>>>
>>> Okay, so let me keep this patch for local stress tests only.
>>
>> May I ask which type and rate of fault injection you are using for
>> test now?
> 
> I select random value between 3000 and 5000, and 255 for type.

Got it, thanks for your sharing. :)

Thanks,

> 
> Thanks,
> 
>>
>> Thanks,
>>
>>>
>>> Thanks,
>>>
>>>
>>>>
>>>> Thanks,
>>>>
>>>>>
>>>>> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
>>>>> ---
>>>>>  fs/f2fs/f2fs.h | 2 +-
>>>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
>>>>> index e0ef31cb2cc6..6301ccca8888 100644
>>>>> --- a/fs/f2fs/f2fs.h
>>>>> +++ b/fs/f2fs/f2fs.h
>>>>> @@ -1544,7 +1544,7 @@ static inline int inc_valid_block_count(struct f2fs_sb_info *sbi,
>>>>>  		return ret;
>>>>>  
>>>>>  #ifdef CONFIG_F2FS_FAULT_INJECTION
>>>>> -	if (time_to_inject(sbi, FAULT_BLOCK)) {
>>>>> +	if (!IS_NOQUOTA(inode) && time_to_inject(sbi, FAULT_BLOCK)) {
>>>>>  		f2fs_show_injection_info(FAULT_BLOCK);
>>>>>  		release = *count;
>>>>>  		goto enospc;
>>>>>
>>>
>>> .
>>>
> 
> .
> 

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

end of thread, other threads:[~2017-10-30  9:43 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-19 16:56 [PATCH 1/2] f2fs: retry ENOMEM for quota_read|write Jaegeuk Kim
2017-10-19 16:56 ` [PATCH 2/2] f2fs: relax EIO injection for quota file Jaegeuk Kim
2017-10-22 15:11   ` [f2fs-dev] " Chao Yu
2017-10-22 16:51     ` Jaegeuk Kim
2017-10-28  9:22       ` Chao Yu
2017-10-30  9:21         ` Jaegeuk Kim
2017-10-30  9:43           ` Chao Yu
2017-10-22 15:02 ` [f2fs-dev] [PATCH 1/2] f2fs: retry ENOMEM for quota_read|write 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).