X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=module%2Fzfs%2Fzfs_ctldir.c;h=d139b86136b2da54d2655f33e9a9cf0e1517d1b6;hb=c7dfc086297b6e7768e94d1eef3afaa58beeb5ec;hp=1923934cdc6fcec116f45af4863e905db0aff134;hpb=9ed86e7cc7d0880c35f675efc2177012f01f5678;p=zfs.git diff --git a/module/zfs/zfs_ctldir.c b/module/zfs/zfs_ctldir.c index 1923934..d139b86 100644 --- a/module/zfs/zfs_ctldir.c +++ b/module/zfs/zfs_ctldir.c @@ -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 */ } /* @@ -674,7 +681,7 @@ zfsctl_snapdir_inactive(struct inode *ip) "exec 0/dev/null " \ " 2>/dev/null; " \ - "umount -t zfs -n %s%s" + "umount -t zfs -n '%s%s'" static int __zfsctl_unmount_snapshot(zfs_snapentry_t *sep, int flags) @@ -774,7 +781,7 @@ zfsctl_unmount_snapshots(zfs_sb_t *zsb, int flags, int *count) "exec 0/dev/null " \ " 2>/dev/null; " \ - "mount -t zfs -n %s %s" + "mount -t zfs -n '%s' '%s'" int zfsctl_mount_snapshot(struct path *path, int flags) @@ -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 { @@ -945,7 +952,7 @@ zfsctl_shares_lookup(struct inode *dip, char *name, struct inode **ipp, if (zsb->z_shares_dir == 0) { ZFS_EXIT(zsb); - return (-ENOTSUP); + return (ENOTSUP); } error = zfs_zget(zsb, zsb->z_shares_dir, &dzp);