ext4: Stop searching if PA doesn't satisfy non-extent file
If we come across a PA that matches the logical offset but is unable to satisfy a non-extent file due to its physical start being higher than that supported by non extent files, then simply stop searching for another PA and break out of loop. This is because, since PAs don't overlap, we won't be able to find another inode PA which can satisfy the original request. Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com> Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com> Reviewed-by: Jan Kara <jack@suse.cz> Link: https://lore.kernel.org/r/42404ca29bd304ae2c962184c3c32a02e8eefcd0.1679731817.git.ojaswin@linux.ibm.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
parent
19b8b035a7
commit
e86a718228
|
@ -4380,8 +4380,13 @@ ext4_mb_use_preallocated(struct ext4_allocation_context *ac)
|
|||
/* non-extent files can't have physical blocks past 2^32 */
|
||||
if (!(ext4_test_inode_flag(ac->ac_inode, EXT4_INODE_EXTENTS)) &&
|
||||
(pa->pa_pstart + EXT4_C2B(sbi, pa->pa_len) >
|
||||
EXT4_MAX_BLOCK_FILE_PHYS))
|
||||
continue;
|
||||
EXT4_MAX_BLOCK_FILE_PHYS)) {
|
||||
/*
|
||||
* Since PAs don't overlap, we won't find any
|
||||
* other PA to satisfy this.
|
||||
*/
|
||||
break;
|
||||
}
|
||||
|
||||
/* found preallocated blocks, use them */
|
||||
spin_lock(&pa->pa_lock);
|
||||
|
|
Loading…
Reference in New Issue