]> www.infradead.org Git - nvme.git/commitdiff
erofs: add support for FS_IOC_GETFSSYSFSPATH
authorHuang Xiaojia <huangxiaojia2@huawei.com>
Sat, 20 Jul 2024 08:23:35 +0000 (16:23 +0800)
committerGao Xiang <hsiangkao@linux.alibaba.com>
Fri, 26 Jul 2024 10:47:46 +0000 (18:47 +0800)
FS_IOC_GETFSSYSFSPATH ioctl exposes /sys/fs path of a given filesystem,
potentially standarizing sysfs reporting. This patch add support for
FS_IOC_GETFSSYSFSPATH for erofs, "erofs/<dev>" will be outputted for bdev
cases, "erofs/[domain_id,]<fs_id>" will be outputted for fscache cases.

Signed-off-by: Huang Xiaojia <huangxiaojia2@huawei.com>
Link: https://lore.kernel.org/r/20240720082335.441563-1-huangxiaojia2@huawei.com
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
fs/erofs/super.c

index 35268263aaed9f336336138fee80069da828a504..32ce5b35e1dff8eb25c199b09f48e1b7797457ab 100644 (file)
@@ -576,6 +576,21 @@ static const struct export_operations erofs_export_ops = {
        .get_parent = erofs_get_parent,
 };
 
+static void erofs_set_sysfs_name(struct super_block *sb)
+{
+       struct erofs_sb_info *sbi = EROFS_SB(sb);
+
+       if (erofs_is_fscache_mode(sb)) {
+               if (sbi->domain_id)
+                       super_set_sysfs_name_generic(sb, "%s,%s",sbi->domain_id,
+                                                    sbi->fsid);
+               else
+                       super_set_sysfs_name_generic(sb, "%s", sbi->fsid);
+               return;
+       }
+       super_set_sysfs_name_id(sb);
+}
+
 static int erofs_fc_fill_super(struct super_block *sb, struct fs_context *fc)
 {
        struct inode *inode;
@@ -643,6 +658,7 @@ static int erofs_fc_fill_super(struct super_block *sb, struct fs_context *fc)
                sb->s_flags |= SB_POSIXACL;
        else
                sb->s_flags &= ~SB_POSIXACL;
+       erofs_set_sysfs_name(sb);
 
 #ifdef CONFIG_EROFS_FS_ZIP
        xa_init(&sbi->managed_pslots);