Directory xattr znodes hold a reference on their parent
[zfs.git] / module / zfs / zpl_inode.c
index 5b31c12..6175c2e 100644 (file)
@@ -75,8 +75,13 @@ zpl_vap_init(vattr_t *vap, struct inode *dir, struct dentry *dentry,
 }
 
 static int
+#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;
@@ -87,8 +92,12 @@ zpl_create(struct inode *dir, struct dentry *dentry, zpl_umode_t 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);