diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c index fd0a6c03987e..5c5b45d3c67b 100644 --- a/fs/f2fs/checkpoint.c +++ b/fs/f2fs/checkpoint.c @@ -658,7 +658,8 @@ long f2fs_sync_meta_caches(struct f2fs_sb_info *sbi, long nr_to_write, if (!__f2fs_write_meta_cache(entry, io_type)) { f2fs_unlock_cache(entry); - break; + f2fs_cache_gang_release(entries, nr); + goto stop; } nwritten++; next = entry->index + 1; @@ -667,6 +668,9 @@ long f2fs_sync_meta_caches(struct f2fs_sb_info *sbi, long nr_to_write, } f2fs_cache_gang_release(entries, nr); cond_resched(); + + if (unlikely(nwritten >= nr_to_write)) + break; } stop: if (nwritten)