Re: [PATCH RFC 7/8] erofs: open via dedicated fs bdev helpers
From: Gao Xiang
Date: Tue Jun 02 2026 - 12:38:43 EST
On 2026/6/2 18:10, Christian Brauner wrote:
Route opens through fs_bdev_file_open_by_path() so each external device
is registered against the correct superblock, and convert the matching
releases.
Signed-off-by: Christian Brauner (Amutable) <brauner@xxxxxxxxxx>
---
fs/erofs/data.c | 6 +++++
fs/erofs/internal.h | 10 ++++++++
fs/erofs/super.c | 66 +++++++++++++++++++++++++++++++++++++++++++----------
fs/erofs/zdata.c | 10 +++++---
4 files changed, 77 insertions(+), 15 deletions(-)
diff --git a/fs/erofs/data.c b/fs/erofs/data.c
index 44da21c9d777..5220585293df 100644
--- a/fs/erofs/data.c
+++ b/fs/erofs/data.c
@@ -69,6 +69,9 @@ int erofs_init_metabuf(struct erofs_buf *buf, struct super_block *sb,
{
struct erofs_sb_info *sbi = EROFS_SB(sb);
+ if (erofs_is_shutdown(sb))
+ return -EIO;
+
buf->file = NULL;
if (in_metabox) {
if (unlikely(!sbi->metabox_inode))
@@ -236,6 +239,9 @@ int erofs_map_dev(struct super_block *sb, struct erofs_map_dev *map)
}
up_read(&devs->rwsem);
}
+ if (erofs_is_shutdown(sb) ||
+ (map->m_dif && READ_ONCE(map->m_dif->dead)))
+ return -EIO;
Take a quick look at the code, maybe we can just add
the SHUTDOWN status only since I don't think remove an
individual blob device is useful for the typical image
use cases, so there is no need adding `dead` for each
individual extra device.
and just bail out if erofs_is_shutdown() at the very
beginning of erofs_map_dev()?
return 0;
}
...
diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c
index 43bb5a6a9924..89ae91935364 100644
--- a/fs/erofs/zdata.c
+++ b/fs/erofs/zdata.c
@@ -1697,11 +1697,15 @@ static void z_erofs_submit_queue(struct z_erofs_frontend *f,
continue;
}
- /* no device id here, thus it will always succeed */
mdev = (struct erofs_map_dev) {
.m_pa = round_down(pcl->pos, sb->s_blocksize),
};
- (void)erofs_map_dev(sb, &mdev);
+ if (erofs_map_dev(sb, &mdev)) {
+ /* the backing device is gone; fail the batch */
+ q[JQ_SUBMIT]->eio = true;
+ qtail[JQ_SUBMIT] = &pcl->next;
+ continue;
+ }
It needs some injection tests anyway.
May I ask if it's an urgent 7.2 work? If not, I could
make a preparation patch for the upcoming 7.2 cycle
to handle erofs_map_dev() failure here so you don't
need to bother with this in this patchset.
I will seek more time to resolve the recent todos
yet always intercepted by other unrelated stuffs.
Thanks,
Gao Xaing