diff options
| author | Mark Brown <broonie@kernel.org> | 2023-03-13 16:21:01 +0300 |
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2023-03-13 16:21:01 +0300 |
| commit | c938bb0cf644a61cc6222cc6d0f106bb5c4b4ff5 (patch) | |
| tree | 22e62a91a4674df9043d298994a27acc11830044 /fs/udf/inode.c | |
| parent | 7d4ae72edba715d8e2dbfb3851879d354d13a7b9 (diff) | |
| parent | eeac8ede17557680855031c6f305ece2378af326 (diff) | |
| download | linux-c938bb0cf644a61cc6222cc6d0f106bb5c4b4ff5.tar.xz | |
Merge tag 'v6.3-rc2' into spi-6.4 to fix clock related boot issues
Linux 6.3-rc2
Diffstat (limited to 'fs/udf/inode.c')
| -rw-r--r-- | fs/udf/inode.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/fs/udf/inode.c b/fs/udf/inode.c index f7a9607c2b95..2210e5eb1ea0 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -193,7 +193,7 @@ static int udf_adinicb_writepage(struct folio *folio, struct udf_inode_info *iinfo = UDF_I(inode); 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)); unlock_page(page); 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) { + 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); } @@ -407,6 +416,9 @@ static int udf_map_block(struct inode *inode, struct udf_map_rq *map) int err; 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; if (!(map->iflags & UDF_MAP_CREATE)) { struct kernel_lb_addr eloc; |
