struct inode *ip;
int error;
+ if (dlen(dentry) > ZFS_MAXNAMELEN)
+ return ERR_PTR(-ENAMETOOLONG);
+
crhold(cr);
error = -zfs_lookup(dir, dname(dentry), &ip, 0, cr, NULL, NULL);
ASSERT3S(error, <=, 0);
spin_lock(&dentry->d_lock);
dentry->d_time = jiffies;
+#ifndef HAVE_S_D_OP
+ d_set_d_op(dentry, &zpl_dentry_operations);
+#endif /* HAVE_S_D_OP */
spin_unlock(&dentry->d_lock);
if (error) {
error = zpl_xattr_security_init(ip, dir, &dentry->d_name);
VERIFY3S(error, ==, 0);
d_instantiate(dentry, ip);
- d_set_d_op(dentry, &zpl_dentry_operations);
}
kmem_free(vap, sizeof(vattr_t));
vap->va_rdev = rdev;
error = -zfs_create(dir, dname(dentry), vap, 0, mode, &ip, cr, 0, NULL);
- if (error == 0) {
+ if (error == 0)
d_instantiate(dentry, ip);
- d_set_d_op(dentry, &zpl_dentry_operations);
- }
kmem_free(vap, sizeof(vattr_t));
crfree(cr);
zpl_vap_init(vap, dir, mode | S_IFDIR, cr);
error = -zfs_mkdir(dir, dname(dentry), vap, &ip, cr, 0, NULL);
- if (error == 0) {
+ if (error == 0)
d_instantiate(dentry, ip);
- d_set_d_op(dentry, &zpl_dentry_operations);
- }
kmem_free(vap, sizeof(vattr_t));
crfree(cr);
zpl_vap_init(vap, dir, S_IFLNK | S_IRWXUGO, cr);
error = -zfs_symlink(dir, dname(dentry), vap, (char *)name, &ip, cr, 0);
- if (error == 0) {
+ if (error == 0)
d_instantiate(dentry, ip);
- d_set_d_op(dentry, &zpl_dentry_operations);
- }
kmem_free(vap, sizeof(vattr_t));
crfree(cr);
}
d_instantiate(dentry, ip);
- d_set_d_op(dentry, &zpl_dentry_operations);
out:
crfree(cr);
ASSERT3S(error, <=, 0);
#ifdef HAVE_D_REVALIDATE_NAMEIDATA
zpl_revalidate(struct dentry *dentry, struct nameidata *nd)
{
- unsigned int flags = nd->flags;
+ unsigned int flags = (nd ? nd->flags : 0);
#else
zpl_revalidate(struct dentry *dentry, unsigned int flags)
{