-----BEGIN PGP SIGNATURE-----
 
 iQEzBAABCAAdFiEEq1nRK9aeMoq1VSgcnJ2qBz9kQNkFAmQIrVcACgkQnJ2qBz9k
 QNkG0gf/Z9O+5AKKGM3tGzO/IsQB+33S+cCSH6FVqIpV8rx6HJBUtUOU8bJBoA6r
 yY/t9phD1ahOBDpeZKQPj9zL5R3LWf0Xf3LDbMNfx7lD0mRiM1QR1hSOPQ9Frze+
 cydo1LQvtZ1U3Axs/26fNMRzBwF6a9l9X3YTvSHfpaEPuZwDPtDZAgT2ORE85gZv
 faTXlTubc6qEsvkHS7JWwloFRgqjdE74mMcBIhSQizo2Z+QH14uXUQ36DuU6UlU7
 bYQ5VBEN6kanKzR3gGcOkdb22k8SL91pvoK9nYhqOqlVi/ydc5KhuKeWoPXQ9DVT
 mXrBxfH8fF7G2Q98N8EgRcdia6ksNQ==
 =OBP7
 -----END PGP SIGNATURE-----

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()
This commit is contained in:
Linus Torvalds 2023-03-08 12:02:09 -08:00
commit 6a98c9cae2

View File

@ -193,7 +193,7 @@ static int udf_adinicb_writepage(struct folio *folio,
struct udf_inode_info *iinfo = UDF_I(inode); struct udf_inode_info *iinfo = UDF_I(inode);
BUG_ON(!PageLocked(page)); BUG_ON(!PageLocked(page));
memcpy_to_page(page, 0, iinfo->i_data + iinfo->i_lenEAttr, memcpy_from_page(iinfo->i_data + iinfo->i_lenEAttr, page, 0,
i_size_read(inode)); i_size_read(inode));
unlock_page(page); unlock_page(page);
mark_inode_dirty(inode); mark_inode_dirty(inode);
@ -241,6 +241,15 @@ static int udf_read_folio(struct file *file, struct folio *folio)
static void udf_readahead(struct readahead_control *rac) static void udf_readahead(struct readahead_control *rac)
{ {
struct udf_inode_info *iinfo = UDF_I(rac->mapping->host);
/*
* No readahead needed for in-ICB files and udf_get_block() would get
* confused for such file anyway.
*/
if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
return;
mpage_readahead(rac, udf_get_block); mpage_readahead(rac, udf_get_block);
} }
@ -407,6 +416,9 @@ static int udf_map_block(struct inode *inode, struct udf_map_rq *map)
int err; int err;
struct udf_inode_info *iinfo = UDF_I(inode); struct udf_inode_info *iinfo = UDF_I(inode);
if (WARN_ON_ONCE(iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB))
return -EFSCORRUPTED;
map->oflags = 0; map->oflags = 0;
if (!(map->iflags & UDF_MAP_CREATE)) { if (!(map->iflags & UDF_MAP_CREATE)) {
struct kernel_lb_addr eloc; struct kernel_lb_addr eloc;