X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=module%2Fzfs%2Fzpl_inode.c;h=6175c2e93f8e4c2fe168f86a651a6764b3f8fc57;hb=e89260a1c8851ce05ea04b23606ba438b271d890;hp=d9b918b43d92d09bc6c60d2e57661be31672d67d;hpb=ebe7e575eae1e03b1faa545a424f008faeac589d;p=zfs.git diff --git a/module/zfs/zpl_inode.c b/module/zfs/zpl_inode.c index d9b918b..6175c2e 100644 --- a/module/zfs/zpl_inode.c +++ b/module/zfs/zpl_inode.c @@ -31,7 +31,11 @@ static struct dentry * +#ifdef HAVE_LOOKUP_NAMEIDATA zpl_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd) +#else +zpl_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags) +#endif { cred_t *cr = CRED(); struct inode *ip; @@ -54,7 +58,7 @@ zpl_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd) void zpl_vap_init(vattr_t *vap, struct inode *dir, struct dentry *dentry, - mode_t mode, cred_t *cr) + zpl_umode_t mode, cred_t *cr) { vap->va_mask = ATTR_MODE; vap->va_mode = mode; @@ -71,8 +75,13 @@ zpl_vap_init(vattr_t *vap, struct inode *dir, struct dentry *dentry, } static int -zpl_create(struct inode *dir, struct dentry *dentry, int mode, +#ifdef HAVE_CREATE_NAMEIDATA +zpl_create(struct inode *dir, struct dentry *dentry, zpl_umode_t mode, struct nameidata *nd) +#else +zpl_create(struct inode *dir, struct dentry *dentry, zpl_umode_t mode, + bool flag) +#endif { cred_t *cr = CRED(); struct inode *ip; @@ -83,8 +92,12 @@ zpl_create(struct inode *dir, struct dentry *dentry, int mode, vap = kmem_zalloc(sizeof(vattr_t), KM_SLEEP); zpl_vap_init(vap, dir, dentry, mode, cr); - error = -zfs_create(dir, (char *)dentry->d_name.name, - vap, 0, mode, &ip, cr, 0, NULL); + error = -zfs_create(dir, dname(dentry), vap, 0, mode, &ip, cr, 0, NULL); + if (error == 0) { + error = zpl_xattr_security_init(ip, dir, &dentry->d_name); + VERIFY3S(error, ==, 0); + } + kmem_free(vap, sizeof(vattr_t)); crfree(cr); ASSERT3S(error, <=, 0); @@ -93,7 +106,8 @@ zpl_create(struct inode *dir, struct dentry *dentry, int mode, } static int -zpl_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t rdev) +zpl_mknod(struct inode *dir, struct dentry *dentry, zpl_umode_t mode, + dev_t rdev) { cred_t *cr = CRED(); struct inode *ip; @@ -136,7 +150,7 @@ zpl_unlink(struct inode *dir, struct dentry *dentry) } static int -zpl_mkdir(struct inode *dir, struct dentry *dentry, int mode) +zpl_mkdir(struct inode *dir, struct dentry *dentry, zpl_umode_t mode) { cred_t *cr = CRED(); vattr_t *vap; @@ -293,9 +307,8 @@ zpl_follow_link(struct dentry *dentry, struct nameidata *nd) static void zpl_put_link(struct dentry *dentry, struct nameidata *nd, void *ptr) { - char *link; + const char *link = nd_get_link(nd); - link = nd_get_link(nd); if (!IS_ERR(link)) kmem_free(link, MAXPATHLEN); } @@ -328,6 +341,7 @@ out: return (error); } +#ifdef HAVE_INODE_TRUNCATE_RANGE static void zpl_truncate_range(struct inode* ip, loff_t start, loff_t end) { @@ -354,6 +368,7 @@ zpl_truncate_range(struct inode* ip, loff_t start, loff_t end) crfree(cr); } +#endif /* HAVE_INODE_TRUNCATE_RANGE */ #ifdef HAVE_INODE_FALLOCATE static long @@ -379,7 +394,9 @@ const struct inode_operations zpl_inode_operations = { .getxattr = generic_getxattr, .removexattr = generic_removexattr, .listxattr = zpl_xattr_list, +#ifdef HAVE_INODE_TRUNCATE_RANGE .truncate_range = zpl_truncate_range, +#endif /* HAVE_INODE_TRUNCATE_RANGE */ #ifdef HAVE_INODE_FALLOCATE .fallocate = zpl_fallocate, #endif /* HAVE_INODE_FALLOCATE */