jffs2文件系统不支持export的问题

本文探讨了在嵌入式环境中设置NFS服务时遇到的问题,即特定文件系统(如NFS, cpio, jffs2)在使用exportfs命令时出现不支持导出操作的错误。通过对内核源码的分析,确定了问题在于这些文件系统未定义export_operations,而ext3等文件系统则可以正常工作。

因为需要,在嵌入式环境下提供nfs服务,下了nfs-util和portmap,编译通过后,运行都没问题,但是在使用exportfs发布共享目录时,发现在nfs,cpio,jffs2文件系统下都报不支持export操作

1.  跟踪内核源码,在fs/nfsd/export.ccheck_export函数中有如下的代码:

       /* There are two requirements on a filesystem to be exportable.

 * 1:  We must be able to identify the filesystem from a number.

        *       either a device number (so FS_REQUIRES_DEV needed)

        *       or an FSID number (so NFSEXP_FSID or ->uuid is needed).

        * 2:  We must be able to find an inode from a filehandle.

        *       This means that s_export_op must be set.

        */

       if (!(inode->i_sb->s_type->fs_flags & FS_REQUIRES_DEV) &&

           !(flags & NFSEXP_FSID) &&

           uuid == NULL) {

              dprintk("exp_export: export of non-dev fs without fsid/n");

              return -EINVAL;

       }

 

       if (!inode->i_sb->s_export_op ||

           !inode->i_sb->s_export_op->fh_to_dentry) {

              dprintk("exp_export: export of invalid fs type./n");

              return -EINVAL;

       }

可以看到文件系统要被export必须满足两个条件:第一要有唯一标识,可以是fsiduuid或者是设备号,第二是文件系统必须设置了export操作export_operations。第一个条件可以通过在/etc/exports文件中指定fsid的值来满足,第二个条件只有通过查找源代码来分析。在fs/nfs/super.cfs/jffs2/super.c中都未定义export_operations,而在fs/ext3fs/ext4中都进行了定义,所以ext3文件系统可以被正确export,而jffs2nfs都会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值