[PATCH v2] romfs: use different way to generate fsid for BLOCK or MTD

Richard Weinberger richard.weinberger at gmail.com
Wed Dec 28 01:44:37 PST 2016


CC'ing MTD

On Wed, Dec 28, 2016 at 9:53 AM, Coly Li <colyli at suse.de> wrote:
>  static struct kmem_cache *romfs_inode_cachep;
> @@ -416,8 +417,14 @@ static void romfs_destroy_inode(struct inode *inode)
>  static int romfs_statfs(struct dentry *dentry, struct kstatfs *buf)
>  {
>         struct super_block *sb = dentry->d_sb;
> -       u64 id = huge_encode_dev(sb->s_bdev->bd_dev);
> +       u64 id = 0;
>
> +#ifdef CONFIG_ROMFS_ON_BLOCK
> +       id = huge_encode_dev(sb->s_bdev->bd_dev);
> +#endif
> +#ifdef  CONFIG_ROMFS_ON_MTD
> +       id = huge_encode_dev(sb->s_dev);
> +#endif

How is this supposed to work with CONFIG_ROMFS_BACKED_BY_BOTH=y?

>         buf->f_type = ROMFS_MAGIC;
>         buf->f_namelen = ROMFS_MAXFN;
>         buf->f_bsize = ROMBSIZE;
> @@ -489,6 +496,13 @@ static int romfs_fill_super(struct super_block *sb, void *data, int silent)
>         sb->s_flags |= MS_RDONLY | MS_NOATIME;
>         sb->s_op = &romfs_super_ops;
>
> +#ifdef CONFIG_ROMFS_ON_MTD
> +       /* Use same dev ID from the underlying mtdblock device */
> +       if (sb->s_mtd)
> +               sb->s_dev = MKDEV(MTD_BLOCK_MAJOR, sb->s_mtd->index);
> +       else
> +               sb->s_dev = MKDEV(MTD_BLOCK_MAJOR, 0);

Hmm, when there is no MTD, s_dev is still equal to mtd0, since mtd0 is
->index of
value 0. This seems fishy to me.

-- 
Thanks,
//richard



More information about the linux-mtd mailing list