mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
Merge tag 'erofs-for-6.15-rc2-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs
Pull erofs fixes from Gao Xiang: - Properly handle errors when file-backed I/O fails - Fix compilation issues on ARM platform (arm-linux-gnueabi) - Fix parsing of encoded extents - Minor cleanup * tag 'erofs-for-6.15-rc2-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs: erofs: remove duplicate code erofs: fix encoded extents handling erofs: add __packed annotation to union(__le16..) erofs: set error to bio if file-backed IO fails
This commit is contained in:
@@ -56,7 +56,7 @@ struct erofs_super_block {
|
||||
union {
|
||||
__le16 rootnid_2b; /* nid of root directory */
|
||||
__le16 blocks_hi; /* (48BIT on) blocks count MSB */
|
||||
} rb;
|
||||
} __packed rb;
|
||||
__le64 inos; /* total valid ino # (== f_files - f_favail) */
|
||||
__le64 epoch; /* base seconds used for compact inodes */
|
||||
__le32 fixed_nsec; /* fixed nanoseconds for compact inodes */
|
||||
@@ -148,7 +148,7 @@ union erofs_inode_i_nb {
|
||||
__le16 nlink; /* if EROFS_I_NLINK_1_BIT is unset */
|
||||
__le16 blocks_hi; /* total blocks count MSB */
|
||||
__le16 startblk_hi; /* starting block number MSB */
|
||||
};
|
||||
} __packed;
|
||||
|
||||
/* 32-byte reduced form of an ondisk inode */
|
||||
struct erofs_inode_compact {
|
||||
@@ -369,9 +369,9 @@ struct z_erofs_map_header {
|
||||
* bit 7 : pack the whole file into packed inode
|
||||
*/
|
||||
__u8 h_clusterbits;
|
||||
};
|
||||
} __packed;
|
||||
__le16 h_extents_hi; /* extent count MSB */
|
||||
};
|
||||
} __packed;
|
||||
};
|
||||
|
||||
enum {
|
||||
|
||||
@@ -32,6 +32,8 @@ static void erofs_fileio_ki_complete(struct kiocb *iocb, long ret)
|
||||
ret = 0;
|
||||
}
|
||||
if (rq->bio.bi_end_io) {
|
||||
if (ret < 0 && !rq->bio.bi_status)
|
||||
rq->bio.bi_status = errno_to_blk_status(ret);
|
||||
rq->bio.bi_end_io(&rq->bio);
|
||||
} else {
|
||||
bio_for_each_folio_all(fi, &rq->bio) {
|
||||
|
||||
@@ -725,7 +725,6 @@ static int z_erofs_register_pcluster(struct z_erofs_frontend *fe)
|
||||
lockref_init(&pcl->lockref); /* one ref for this request */
|
||||
pcl->algorithmformat = map->m_algorithmformat;
|
||||
pcl->pclustersize = map->m_plen;
|
||||
pcl->pageofs_in = pageofs_in;
|
||||
pcl->length = 0;
|
||||
pcl->partial = true;
|
||||
pcl->next = fe->head;
|
||||
|
||||
@@ -559,7 +559,8 @@ static int z_erofs_map_blocks_ext(struct inode *inode,
|
||||
pos += sizeof(__le64);
|
||||
lstart = 0;
|
||||
} else {
|
||||
lstart = map->m_la >> vi->z_lclusterbits;
|
||||
lstart = round_down(map->m_la, 1 << vi->z_lclusterbits);
|
||||
pos += (lstart >> vi->z_lclusterbits) * recsz;
|
||||
pa = EROFS_NULL_ADDR;
|
||||
}
|
||||
|
||||
@@ -614,7 +615,7 @@ static int z_erofs_map_blocks_ext(struct inode *inode,
|
||||
if (last && (vi->z_advise & Z_EROFS_ADVISE_FRAGMENT_PCLUSTER)) {
|
||||
map->m_flags |= EROFS_MAP_MAPPED | EROFS_MAP_FRAGMENT;
|
||||
vi->z_fragmentoff = map->m_plen;
|
||||
if (recsz >= offsetof(struct z_erofs_extent, pstart_lo))
|
||||
if (recsz > offsetof(struct z_erofs_extent, pstart_lo))
|
||||
vi->z_fragmentoff |= map->m_pa << 32;
|
||||
} else if (map->m_plen) {
|
||||
map->m_flags |= EROFS_MAP_MAPPED |
|
||||
|
||||
Reference in New Issue
Block a user