bcachefs: Don't return 0 size holes from bch2_seek_hole()

The hole we find in the btree might be fully dirty in the page cache. If
so, keep searching.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
Kent Overstreet
2025-03-28 11:29:04 -04:00
parent 1f4bb8254c
commit af3d4c276a
+12 -3
View File
@@ -1008,10 +1008,19 @@ static loff_t bch2_seek_hole(struct file *file, u64 offset)
? MAX_LFS_FILESIZE
: k.k->p.offset << 9;
/*
* Found a hole in the btree, now make sure it's
* a hole in the pagecache. We might have to
* keep searching if this hole is entirely dirty
* in the page cache:
*/
bch2_trans_unlock(trans);
next_hole = bch2_seek_pagecache_hole(&inode->v,
start_offset, end_offset, 0, false);
break;
loff_t pagecache_hole = bch2_seek_pagecache_hole(&inode->v,
start_offset, end_offset, 0, false);
if (pagecache_hole < end_offset) {
next_hole = pagecache_hole;
break;
}
} else {
offset = max(offset, bkey_start_offset(k.k) << 9);
}