Skip to content

Commit 6a98c9c

Browse files
committed
Merge tag 'fs_for_v6.3-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
Pull udf fixes from Jan Kara: "Fix bugs in UDF caused by the big pile of changes that went in during the merge window" * tag 'fs_for_v6.3-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs: udf: Warn if block mapping is done for in-ICB files udf: Fix reading of in-ICB files udf: Fix lost writes in udf_adinicb_writepage()
2 parents 55ee664 + 63bceed commit 6a98c9c

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

fs/udf/inode.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ static int udf_adinicb_writepage(struct folio *folio,
193193
struct udf_inode_info *iinfo = UDF_I(inode);
194194

195195
BUG_ON(!PageLocked(page));
196-
memcpy_to_page(page, 0, iinfo->i_data + iinfo->i_lenEAttr,
196+
memcpy_from_page(iinfo->i_data + iinfo->i_lenEAttr, page, 0,
197197
i_size_read(inode));
198198
unlock_page(page);
199199
mark_inode_dirty(inode);
@@ -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

@@ -407,6 +416,9 @@ static int udf_map_block(struct inode *inode, struct udf_map_rq *map)
407416
int err;
408417
struct udf_inode_info *iinfo = UDF_I(inode);
409418

419+
if (WARN_ON_ONCE(iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB))
420+
return -EFSCORRUPTED;
421+
410422
map->oflags = 0;
411423
if (!(map->iflags & UDF_MAP_CREATE)) {
412424
struct kernel_lb_addr eloc;

0 commit comments

Comments
 (0)