Linux 3.6 compat, sget()
[zfs.git] / module / zfs / zfs_ctldir.c
index 1923934..55d1696 100644 (file)
@@ -225,13 +225,13 @@ zfsctl_inode_alloc(zfs_sb_t *zsb, uint64_t id,
  * Lookup the inode with given id, it will be allocated if needed.
  */
 static struct inode *
-zfsctl_inode_lookup(zfs_sb_t *zsb, unsigned long id,
+zfsctl_inode_lookup(zfs_sb_t *zsb, uint64_t id,
     const struct file_operations *fops, const struct inode_operations *ops)
 {
        struct inode *ip = NULL;
 
        while (ip == NULL) {
-               ip = ilookup(zsb->z_sb, id);
+               ip = ilookup(zsb->z_sb, (unsigned long)id);
                if (ip)
                        break;
 
@@ -267,10 +267,14 @@ zfsctl_inode_inactive(struct inode *ip)
  * therefore checks against a vfs_count of 2 instead of 1.  This reference
  * is removed when the ctldir is destroyed in the unmount.  All other entities
  * under the '.zfs' directory are created dynamically as needed.
+ *
+ * Because the dynamically created '.zfs' directory entries assume the use
+ * of 64-bit inode numbers this support must be disabled on 32-bit systems.
  */
 int
 zfsctl_create(zfs_sb_t *zsb)
 {
+#if defined(CONFIG_64BIT)
        ASSERT(zsb->z_ctldir == NULL);
 
        zsb->z_ctldir = zfsctl_inode_alloc(zsb, ZFSCTL_INO_ROOT,
@@ -279,6 +283,9 @@ zfsctl_create(zfs_sb_t *zsb)
                return (ENOENT);
 
        return (0);
+#else
+       return (EOPNOTSUPP);
+#endif /* CONFIG_64BIT */
 }
 
 /*
@@ -913,8 +920,8 @@ zfsctl_lookup_objset(struct super_block *sb, uint64_t objsetid, zfs_sb_t **zsbp)
                 * race cannot occur to an expired mount point because
                 * we hold the zsb->z_ctldir_lock to prevent the race.
                 */
-               sbp = sget(&zpl_fs_type, zfsctl_test_super,
-                   zfsctl_set_super, &id);
+               sbp = zpl_sget(&zpl_fs_type, zfsctl_test_super,
+                   zfsctl_set_super, 0, &id);
                if (IS_ERR(sbp)) {
                        error = -PTR_ERR(sbp);
                } else {