Skip to content

Commit cecb1f0

Browse files
committed
udf: Fix reading of in-ICB files
After merging address space operations of normal and in-ICB files, readahead could get called for in-ICB files which resulted in udf_get_block() being called for these files. udf_get_block() is not prepared to be called for in-ICB files and ends up returning garbage results as it interprets file data as extent list. Fix the problem by skipping readahead for in-ICB files. Fixes: 37a8a39 ("udf: Switch to single address_space_operations") Signed-off-by: Jan Kara <[email protected]>
1 parent 49854d3 commit cecb1f0

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

fs/udf/inode.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,15 @@ static int udf_read_folio(struct file *file, struct folio *folio)
241241

242242
static void udf_readahead(struct readahead_control *rac)
243243
{
244+
struct udf_inode_info *iinfo = UDF_I(rac->mapping->host);
245+
246+
/*
247+
* No readahead needed for in-ICB files and udf_get_block() would get
248+
* confused for such file anyway.
249+
*/
250+
if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
251+
return;
252+
244253
mpage_readahead(rac, udf_get_block);
245254
}
246255

0 commit comments

Comments
 (0)