Add .zfs control directory
[zfs.git] / module / zfs / zpl_export.c
index a389556..f82ee30 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <sys/zfs_vnops.h>
 #include <sys/zfs_znode.h>
+#include <sys/zfs_ctldir.h>
 #include <sys/zpl.h>
 
 
@@ -42,7 +43,10 @@ zpl_encode_fh(struct dentry *dentry, __u32 *fh, int *max_len, int connectable)
 
        fid->fid_len = len_bytes - offsetof(fid_t, fid_data);
 
-       rc = zfs_fid(ip, fid);
+       if (zfsctl_is_node(ip))
+               rc = zfsctl_fid(ip, fid);
+       else
+               rc = zfs_fid(ip, fid);
 
        len_bytes = offsetof(fid_t, fid_data) + fid->fid_len;
        *max_len = roundup(len_bytes, sizeof (__u32)) / sizeof (__u32);
@@ -73,8 +77,6 @@ static struct dentry *
 zpl_fh_to_dentry(struct super_block *sb, struct fid *fh,
     int fh_len, int fh_type)
 {
-       zfs_sb_t *zsb = sb->s_fs_info;
-       struct vfsmount *vfs = zsb->z_vfs;
        fid_t *fid = (fid_t *)fh;
        struct inode *ip;
        int len_bytes, rc;
@@ -86,7 +88,7 @@ zpl_fh_to_dentry(struct super_block *sb, struct fid *fh,
            len_bytes < offsetof(fid_t, fid_data) + fid->fid_len)
                return ERR_PTR(-EINVAL);
 
-       rc = zfs_vget(vfs, &ip, fid);
+       rc = zfs_vget(sb, &ip, fid);
 
        if (rc != 0)
                return ERR_PTR(-rc);