CC'ing MTD On Wed, Dec 28, 2016 at 9:53 AM, Coly Li <colyli@xxxxxxx> 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 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html