mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] f2fs: Keep alloc_valid_block_count in sync
@ 2018-07-10  3:32 Daniel Rosenberg
  2018-07-10  6:17 ` Chao Yu
  0 siblings, 1 reply; 2+ messages in thread
From: Daniel Rosenberg @ 2018-07-10  3:32 UTC (permalink / raw)
  To: Jaegeuk Kim, Chao Yu, linux-f2fs-devel
  Cc: linux-kernel, kernel-team, Daniel Rosenberg

If we attempt to request more blocks than we have room for, we try to
instead request as much as we can, however, alloc_valid_block_count
is not decremented to match the new value, allowing it to drift higher
until the next checkpoint. This always decrements it when the requested
amount cannot be fulfilled.

Signed-off-by: Daniel Rosenberg <drosen@google.com>
---
 fs/f2fs/f2fs.h | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 4d8b1de83143..5af955a8736e 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -1680,18 +1680,20 @@ static inline int inc_valid_block_count(struct f2fs_sb_info *sbi,
 		sbi->total_valid_block_count -= diff;
 		if (!*count) {
 			spin_unlock(&sbi->stat_lock);
-			percpu_counter_sub(&sbi->alloc_valid_block_count, diff);
 			goto enospc;
 		}
 	}
 	spin_unlock(&sbi->stat_lock);
 
-	if (unlikely(release))
+	if (unlikely(release)) {
+		percpu_counter_sub(&sbi->alloc_valid_block_count, release);
 		dquot_release_reservation_block(inode, release);
+	}
 	f2fs_i_blocks_write(inode, *count, true, true);
 	return 0;
 
 enospc:
+	percpu_counter_sub(&sbi->alloc_valid_block_count, release);
 	dquot_release_reservation_block(inode, release);
 	return -ENOSPC;
 }
-- 
2.18.0.203.gfac676dfb9-goog


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

* Re: [PATCH] f2fs: Keep alloc_valid_block_count in sync
  2018-07-10  3:32 [PATCH] f2fs: Keep alloc_valid_block_count in sync Daniel Rosenberg
@ 2018-07-10  6:17 ` Chao Yu
  0 siblings, 0 replies; 2+ messages in thread
From: Chao Yu @ 2018-07-10  6:17 UTC (permalink / raw)
  To: Daniel Rosenberg, Jaegeuk Kim, linux-f2fs-devel; +Cc: linux-kernel, kernel-team

On 2018/7/10 11:32, Daniel Rosenberg wrote:
> If we attempt to request more blocks than we have room for, we try to
> instead request as much as we can, however, alloc_valid_block_count
> is not decremented to match the new value, allowing it to drift higher
> until the next checkpoint. This always decrements it when the requested
> amount cannot be fulfilled.
> 
> Signed-off-by: Daniel Rosenberg <drosen@google.com>

Good catch, thanks for the fixing. :)

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

Thanks,


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

end of thread, other threads:[~2018-07-10  6:18 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-10  3:32 [PATCH] f2fs: Keep alloc_valid_block_count in sync Daniel Rosenberg
2018-07-10  6:17 ` Chao Yu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome