4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or https://opensource.org/licenses/CDDL-1.0.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
22 * Copyright (c) 2011, Lawrence Livermore National Security, LLC.
23 * Copyright (c) 2015 by Chunwei Chen. All rights reserved.
27 #include <sys/sysmacros.h>
28 #include <sys/zfs_ctldir.h>
29 #include <sys/zfs_vfsops.h>
30 #include <sys/zfs_vnops.h>
31 #include <sys/zfs_znode.h>
32 #include <sys/dmu_objset.h>
37 static struct dentry
*
38 zpl_lookup(struct inode
*dir
, struct dentry
*dentry
, unsigned int flags
)
44 fstrans_cookie_t cookie
;
45 pathname_t
*ppn
= NULL
;
48 zfsvfs_t
*zfsvfs
= dentry
->d_sb
->s_fs_info
;
50 if (dlen(dentry
) >= ZAP_MAXNAMELEN
)
51 return (ERR_PTR(-ENAMETOOLONG
));
54 cookie
= spl_fstrans_mark();
56 /* If we are a case insensitive fs, we need the real name */
57 if (zfsvfs
->z_case
== ZFS_CASE_INSENSITIVE
) {
58 zfs_flags
= FIGNORECASE
;
63 error
= -zfs_lookup(ITOZ(dir
), dname(dentry
), &zp
,
64 zfs_flags
, cr
, NULL
, ppn
);
65 spl_fstrans_unmark(cookie
);
66 ASSERT3S(error
, <=, 0);
69 spin_lock(&dentry
->d_lock
);
70 dentry
->d_time
= jiffies
;
71 spin_unlock(&dentry
->d_lock
);
75 * If we have a case sensitive fs, we do not want to
76 * insert negative entries, so return NULL for ENOENT.
77 * Fall through if the error is not ENOENT. Also free memory.
86 return (d_splice_alias(NULL
, dentry
));
88 return (ERR_PTR(error
));
93 * If we are case insensitive, call the correct function
94 * to install the name.
97 struct dentry
*new_dentry
;
100 if (strcmp(dname(dentry
), pn
.pn_buf
) == 0) {
101 new_dentry
= d_splice_alias(ip
, dentry
);
103 ci_name
.name
= pn
.pn_buf
;
104 ci_name
.len
= strlen(pn
.pn_buf
);
105 new_dentry
= d_add_ci(dentry
, ip
, &ci_name
);
110 return (d_splice_alias(ip
, dentry
));
115 zpl_vap_init(vattr_t
*vap
, struct inode
*dir
, umode_t mode
, cred_t
*cr
,
118 vap
->va_mask
= ATTR_MODE
;
121 vap
->va_uid
= zfs_vfsuid_to_uid(mnt_ns
,
122 zfs_i_user_ns(dir
), crgetuid(cr
));
124 if (dir
->i_mode
& S_ISGID
) {
125 vap
->va_gid
= KGID_TO_SGID(dir
->i_gid
);
127 vap
->va_mode
|= S_ISGID
;
129 vap
->va_gid
= zfs_vfsgid_to_gid(mnt_ns
,
130 zfs_i_user_ns(dir
), crgetgid(cr
));
135 #ifdef HAVE_IOPS_CREATE_USERNS
136 zpl_create(struct user_namespace
*user_ns
, struct inode
*dir
,
137 struct dentry
*dentry
, umode_t mode
, bool flag
)
138 #elif defined(HAVE_IOPS_CREATE_IDMAP)
139 zpl_create(struct mnt_idmap
*user_ns
, struct inode
*dir
,
140 struct dentry
*dentry
, umode_t mode
, bool flag
)
142 zpl_create(struct inode
*dir
, struct dentry
*dentry
, umode_t mode
, bool flag
)
149 fstrans_cookie_t cookie
;
150 #if !(defined(HAVE_IOPS_CREATE_USERNS) || defined(HAVE_IOPS_CREATE_IDMAP))
151 zidmap_t
*user_ns
= kcred
->user_ns
;
155 vap
= kmem_zalloc(sizeof (vattr_t
), KM_SLEEP
);
156 zpl_vap_init(vap
, dir
, mode
, cr
, user_ns
);
158 cookie
= spl_fstrans_mark();
159 error
= -zfs_create(ITOZ(dir
), dname(dentry
), vap
, 0,
160 mode
, &zp
, cr
, 0, NULL
, user_ns
);
162 error
= zpl_xattr_security_init(ZTOI(zp
), dir
, &dentry
->d_name
);
164 error
= zpl_init_acl(ZTOI(zp
), dir
);
167 (void) zfs_remove(ITOZ(dir
), dname(dentry
), cr
, 0);
168 remove_inode_hash(ZTOI(zp
));
171 d_instantiate(dentry
, ZTOI(zp
));
175 spl_fstrans_unmark(cookie
);
176 kmem_free(vap
, sizeof (vattr_t
));
178 ASSERT3S(error
, <=, 0);
184 #ifdef HAVE_IOPS_MKNOD_USERNS
185 zpl_mknod(struct user_namespace
*user_ns
, struct inode
*dir
,
186 struct dentry
*dentry
, umode_t mode
,
187 #elif defined(HAVE_IOPS_MKNOD_IDMAP)
188 zpl_mknod(struct mnt_idmap
*user_ns
, struct inode
*dir
,
189 struct dentry
*dentry
, umode_t mode
,
191 zpl_mknod(struct inode
*dir
, struct dentry
*dentry
, umode_t mode
,
199 fstrans_cookie_t cookie
;
200 #if !(defined(HAVE_IOPS_MKNOD_USERNS) || defined(HAVE_IOPS_MKNOD_IDMAP))
201 zidmap_t
*user_ns
= kcred
->user_ns
;
205 * We currently expect Linux to supply rdev=0 for all sockets
206 * and fifos, but we want to know if this behavior ever changes.
208 if (S_ISSOCK(mode
) || S_ISFIFO(mode
))
212 vap
= kmem_zalloc(sizeof (vattr_t
), KM_SLEEP
);
213 zpl_vap_init(vap
, dir
, mode
, cr
, user_ns
);
216 cookie
= spl_fstrans_mark();
217 error
= -zfs_create(ITOZ(dir
), dname(dentry
), vap
, 0,
218 mode
, &zp
, cr
, 0, NULL
, user_ns
);
220 error
= zpl_xattr_security_init(ZTOI(zp
), dir
, &dentry
->d_name
);
222 error
= zpl_init_acl(ZTOI(zp
), dir
);
225 (void) zfs_remove(ITOZ(dir
), dname(dentry
), cr
, 0);
226 remove_inode_hash(ZTOI(zp
));
229 d_instantiate(dentry
, ZTOI(zp
));
233 spl_fstrans_unmark(cookie
);
234 kmem_free(vap
, sizeof (vattr_t
));
236 ASSERT3S(error
, <=, 0);
243 #ifdef HAVE_TMPFILE_IDMAP
244 zpl_tmpfile(struct mnt_idmap
*userns
, struct inode
*dir
,
245 struct file
*file
, umode_t mode
)
246 #elif !defined(HAVE_TMPFILE_DENTRY)
247 zpl_tmpfile(struct user_namespace
*userns
, struct inode
*dir
,
248 struct file
*file
, umode_t mode
)
250 #ifdef HAVE_TMPFILE_USERNS
251 zpl_tmpfile(struct user_namespace
*userns
, struct inode
*dir
,
252 struct dentry
*dentry
, umode_t mode
)
254 zpl_tmpfile(struct inode
*dir
, struct dentry
*dentry
, umode_t mode
)
262 fstrans_cookie_t cookie
;
263 #if !(defined(HAVE_TMPFILE_USERNS) || defined(HAVE_TMPFILE_IDMAP))
264 zidmap_t
*userns
= kcred
->user_ns
;
268 vap
= kmem_zalloc(sizeof (vattr_t
), KM_SLEEP
);
270 * The VFS does not apply the umask, therefore it is applied here
271 * when POSIX ACLs are not enabled.
273 if (!IS_POSIXACL(dir
))
274 mode
&= ~current_umask();
275 zpl_vap_init(vap
, dir
, mode
, cr
, userns
);
277 cookie
= spl_fstrans_mark();
278 error
= -zfs_tmpfile(dir
, vap
, 0, mode
, &ip
, cr
, 0, NULL
, userns
);
280 /* d_tmpfile will do drop_nlink, so we should set it first */
282 #ifndef HAVE_TMPFILE_DENTRY
285 error
= zpl_xattr_security_init(ip
, dir
,
286 &file
->f_path
.dentry
->d_name
);
288 d_tmpfile(dentry
, ip
);
290 error
= zpl_xattr_security_init(ip
, dir
, &dentry
->d_name
);
293 error
= zpl_init_acl(ip
, dir
);
294 #ifndef HAVE_TMPFILE_DENTRY
295 error
= finish_open_simple(file
, error
);
298 * don't need to handle error here, file is already in
303 spl_fstrans_unmark(cookie
);
304 kmem_free(vap
, sizeof (vattr_t
));
306 ASSERT3S(error
, <=, 0);
313 zpl_unlink(struct inode
*dir
, struct dentry
*dentry
)
317 fstrans_cookie_t cookie
;
318 zfsvfs_t
*zfsvfs
= dentry
->d_sb
->s_fs_info
;
321 cookie
= spl_fstrans_mark();
322 error
= -zfs_remove(ITOZ(dir
), dname(dentry
), cr
, 0);
325 * For a CI FS we must invalidate the dentry to prevent the
326 * creation of negative entries.
328 if (error
== 0 && zfsvfs
->z_case
== ZFS_CASE_INSENSITIVE
)
329 d_invalidate(dentry
);
331 spl_fstrans_unmark(cookie
);
333 ASSERT3S(error
, <=, 0);
339 #ifdef HAVE_IOPS_MKDIR_USERNS
340 zpl_mkdir(struct user_namespace
*user_ns
, struct inode
*dir
,
341 struct dentry
*dentry
, umode_t mode
)
342 #elif defined(HAVE_IOPS_MKDIR_IDMAP)
343 zpl_mkdir(struct mnt_idmap
*user_ns
, struct inode
*dir
,
344 struct dentry
*dentry
, umode_t mode
)
346 zpl_mkdir(struct inode
*dir
, struct dentry
*dentry
, umode_t mode
)
353 fstrans_cookie_t cookie
;
354 #if !(defined(HAVE_IOPS_MKDIR_USERNS) || defined(HAVE_IOPS_MKDIR_IDMAP))
355 zidmap_t
*user_ns
= kcred
->user_ns
;
359 vap
= kmem_zalloc(sizeof (vattr_t
), KM_SLEEP
);
360 zpl_vap_init(vap
, dir
, mode
| S_IFDIR
, cr
, user_ns
);
362 cookie
= spl_fstrans_mark();
363 error
= -zfs_mkdir(ITOZ(dir
), dname(dentry
), vap
, &zp
, cr
, 0, NULL
,
366 error
= zpl_xattr_security_init(ZTOI(zp
), dir
, &dentry
->d_name
);
368 error
= zpl_init_acl(ZTOI(zp
), dir
);
371 (void) zfs_rmdir(ITOZ(dir
), dname(dentry
), NULL
, cr
, 0);
372 remove_inode_hash(ZTOI(zp
));
375 d_instantiate(dentry
, ZTOI(zp
));
379 spl_fstrans_unmark(cookie
);
380 kmem_free(vap
, sizeof (vattr_t
));
382 ASSERT3S(error
, <=, 0);
388 zpl_rmdir(struct inode
*dir
, struct dentry
*dentry
)
392 fstrans_cookie_t cookie
;
393 zfsvfs_t
*zfsvfs
= dentry
->d_sb
->s_fs_info
;
396 cookie
= spl_fstrans_mark();
397 error
= -zfs_rmdir(ITOZ(dir
), dname(dentry
), NULL
, cr
, 0);
400 * For a CI FS we must invalidate the dentry to prevent the
401 * creation of negative entries.
403 if (error
== 0 && zfsvfs
->z_case
== ZFS_CASE_INSENSITIVE
)
404 d_invalidate(dentry
);
406 spl_fstrans_unmark(cookie
);
408 ASSERT3S(error
, <=, 0);
414 #ifdef HAVE_USERNS_IOPS_GETATTR
415 zpl_getattr_impl(struct user_namespace
*user_ns
,
416 const struct path
*path
, struct kstat
*stat
, u32 request_mask
,
417 unsigned int query_flags
)
418 #elif defined(HAVE_IDMAP_IOPS_GETATTR)
419 zpl_getattr_impl(struct mnt_idmap
*user_ns
,
420 const struct path
*path
, struct kstat
*stat
, u32 request_mask
,
421 unsigned int query_flags
)
423 zpl_getattr_impl(const struct path
*path
, struct kstat
*stat
, u32 request_mask
,
424 unsigned int query_flags
)
428 fstrans_cookie_t cookie
;
429 struct inode
*ip
= path
->dentry
->d_inode
;
430 znode_t
*zp __maybe_unused
= ITOZ(ip
);
432 cookie
= spl_fstrans_mark();
435 * XXX query_flags currently ignored.
438 #ifdef HAVE_GENERIC_FILLATTR_IDMAP_REQMASK
439 error
= -zfs_getattr_fast(user_ns
, request_mask
, ip
, stat
);
440 #elif (defined(HAVE_USERNS_IOPS_GETATTR) || defined(HAVE_IDMAP_IOPS_GETATTR))
441 error
= -zfs_getattr_fast(user_ns
, ip
, stat
);
443 error
= -zfs_getattr_fast(kcred
->user_ns
, ip
, stat
);
447 if (request_mask
& STATX_BTIME
) {
448 stat
->btime
= zp
->z_btime
;
449 stat
->result_mask
|= STATX_BTIME
;
453 #ifdef STATX_ATTR_IMMUTABLE
454 if (zp
->z_pflags
& ZFS_IMMUTABLE
)
455 stat
->attributes
|= STATX_ATTR_IMMUTABLE
;
456 stat
->attributes_mask
|= STATX_ATTR_IMMUTABLE
;
459 #ifdef STATX_ATTR_APPEND
460 if (zp
->z_pflags
& ZFS_APPENDONLY
)
461 stat
->attributes
|= STATX_ATTR_APPEND
;
462 stat
->attributes_mask
|= STATX_ATTR_APPEND
;
465 #ifdef STATX_ATTR_NODUMP
466 if (zp
->z_pflags
& ZFS_NODUMP
)
467 stat
->attributes
|= STATX_ATTR_NODUMP
;
468 stat
->attributes_mask
|= STATX_ATTR_NODUMP
;
471 spl_fstrans_unmark(cookie
);
472 ASSERT3S(error
, <=, 0);
476 ZPL_GETATTR_WRAPPER(zpl_getattr
);
479 #ifdef HAVE_USERNS_IOPS_SETATTR
480 zpl_setattr(struct user_namespace
*user_ns
, struct dentry
*dentry
,
482 #elif defined(HAVE_IDMAP_IOPS_SETATTR)
483 zpl_setattr(struct mnt_idmap
*user_ns
, struct dentry
*dentry
,
486 zpl_setattr(struct dentry
*dentry
, struct iattr
*ia
)
489 struct inode
*ip
= dentry
->d_inode
;
493 fstrans_cookie_t cookie
;
495 #ifdef HAVE_SETATTR_PREPARE_USERNS
496 error
= zpl_setattr_prepare(user_ns
, dentry
, ia
);
497 #elif defined(HAVE_SETATTR_PREPARE_IDMAP)
498 error
= zpl_setattr_prepare(user_ns
, dentry
, ia
);
500 error
= zpl_setattr_prepare(zfs_init_idmap
, dentry
, ia
);
506 vap
= kmem_zalloc(sizeof (vattr_t
), KM_SLEEP
);
507 vap
->va_mask
= ia
->ia_valid
& ATTR_IATTR_MASK
;
508 vap
->va_mode
= ia
->ia_mode
;
509 if (ia
->ia_valid
& ATTR_UID
)
510 #ifdef HAVE_IATTR_VFSID
511 vap
->va_uid
= zfs_vfsuid_to_uid(user_ns
, zfs_i_user_ns(ip
),
512 __vfsuid_val(ia
->ia_vfsuid
));
514 vap
->va_uid
= KUID_TO_SUID(ia
->ia_uid
);
516 if (ia
->ia_valid
& ATTR_GID
)
517 #ifdef HAVE_IATTR_VFSID
518 vap
->va_gid
= zfs_vfsgid_to_gid(user_ns
, zfs_i_user_ns(ip
),
519 __vfsgid_val(ia
->ia_vfsgid
));
521 vap
->va_gid
= KGID_TO_SGID(ia
->ia_gid
);
523 vap
->va_size
= ia
->ia_size
;
524 vap
->va_atime
= ia
->ia_atime
;
525 vap
->va_mtime
= ia
->ia_mtime
;
526 vap
->va_ctime
= ia
->ia_ctime
;
528 if (vap
->va_mask
& ATTR_ATIME
)
529 ip
->i_atime
= zpl_inode_timestamp_truncate(ia
->ia_atime
, ip
);
531 cookie
= spl_fstrans_mark();
532 #ifdef HAVE_USERNS_IOPS_SETATTR
533 error
= -zfs_setattr(ITOZ(ip
), vap
, 0, cr
, user_ns
);
534 #elif defined(HAVE_IDMAP_IOPS_SETATTR)
535 error
= -zfs_setattr(ITOZ(ip
), vap
, 0, cr
, user_ns
);
537 error
= -zfs_setattr(ITOZ(ip
), vap
, 0, cr
, zfs_init_idmap
);
539 if (!error
&& (ia
->ia_valid
& ATTR_MODE
))
540 error
= zpl_chmod_acl(ip
);
542 spl_fstrans_unmark(cookie
);
543 kmem_free(vap
, sizeof (vattr_t
));
545 ASSERT3S(error
, <=, 0);
551 #ifdef HAVE_IOPS_RENAME_USERNS
552 zpl_rename2(struct user_namespace
*user_ns
, struct inode
*sdip
,
553 struct dentry
*sdentry
, struct inode
*tdip
, struct dentry
*tdentry
,
555 #elif defined(HAVE_IOPS_RENAME_IDMAP)
556 zpl_rename2(struct mnt_idmap
*user_ns
, struct inode
*sdip
,
557 struct dentry
*sdentry
, struct inode
*tdip
, struct dentry
*tdentry
,
560 zpl_rename2(struct inode
*sdip
, struct dentry
*sdentry
,
561 struct inode
*tdip
, struct dentry
*tdentry
, unsigned int rflags
)
565 vattr_t
*wo_vap
= NULL
;
567 fstrans_cookie_t cookie
;
568 #if !(defined(HAVE_IOPS_RENAME_USERNS) || defined(HAVE_IOPS_RENAME_IDMAP))
569 zidmap_t
*user_ns
= kcred
->user_ns
;
573 if (rflags
& RENAME_WHITEOUT
) {
574 wo_vap
= kmem_zalloc(sizeof (vattr_t
), KM_SLEEP
);
575 zpl_vap_init(wo_vap
, sdip
, S_IFCHR
, cr
, user_ns
);
576 wo_vap
->va_rdev
= makedevice(0, 0);
579 cookie
= spl_fstrans_mark();
580 error
= -zfs_rename(ITOZ(sdip
), dname(sdentry
), ITOZ(tdip
),
581 dname(tdentry
), cr
, 0, rflags
, wo_vap
, user_ns
);
582 spl_fstrans_unmark(cookie
);
584 kmem_free(wo_vap
, sizeof (vattr_t
));
586 ASSERT3S(error
, <=, 0);
591 #if !defined(HAVE_IOPS_RENAME_USERNS) && \
592 !defined(HAVE_RENAME_WANTS_FLAGS) && \
593 !defined(HAVE_RENAME2) && \
594 !defined(HAVE_IOPS_RENAME_IDMAP)
596 zpl_rename(struct inode
*sdip
, struct dentry
*sdentry
,
597 struct inode
*tdip
, struct dentry
*tdentry
)
599 return (zpl_rename2(sdip
, sdentry
, tdip
, tdentry
, 0));
604 #ifdef HAVE_IOPS_SYMLINK_USERNS
605 zpl_symlink(struct user_namespace
*user_ns
, struct inode
*dir
,
606 struct dentry
*dentry
, const char *name
)
607 #elif defined(HAVE_IOPS_SYMLINK_IDMAP)
608 zpl_symlink(struct mnt_idmap
*user_ns
, struct inode
*dir
,
609 struct dentry
*dentry
, const char *name
)
611 zpl_symlink(struct inode
*dir
, struct dentry
*dentry
, const char *name
)
618 fstrans_cookie_t cookie
;
619 #if !(defined(HAVE_IOPS_SYMLINK_USERNS) || defined(HAVE_IOPS_SYMLINK_IDMAP))
620 zidmap_t
*user_ns
= kcred
->user_ns
;
624 vap
= kmem_zalloc(sizeof (vattr_t
), KM_SLEEP
);
625 zpl_vap_init(vap
, dir
, S_IFLNK
| S_IRWXUGO
, cr
, user_ns
);
627 cookie
= spl_fstrans_mark();
628 error
= -zfs_symlink(ITOZ(dir
), dname(dentry
), vap
,
629 (char *)name
, &zp
, cr
, 0, user_ns
);
631 error
= zpl_xattr_security_init(ZTOI(zp
), dir
, &dentry
->d_name
);
633 (void) zfs_remove(ITOZ(dir
), dname(dentry
), cr
, 0);
634 remove_inode_hash(ZTOI(zp
));
637 d_instantiate(dentry
, ZTOI(zp
));
641 spl_fstrans_unmark(cookie
);
642 kmem_free(vap
, sizeof (vattr_t
));
644 ASSERT3S(error
, <=, 0);
649 #if defined(HAVE_PUT_LINK_COOKIE)
651 zpl_put_link(struct inode
*unused
, void *cookie
)
653 kmem_free(cookie
, MAXPATHLEN
);
655 #elif defined(HAVE_PUT_LINK_NAMEIDATA)
657 zpl_put_link(struct dentry
*dentry
, struct nameidata
*nd
, void *ptr
)
659 const char *link
= nd_get_link(nd
);
662 kmem_free(link
, MAXPATHLEN
);
664 #elif defined(HAVE_PUT_LINK_DELAYED)
666 zpl_put_link(void *ptr
)
668 kmem_free(ptr
, MAXPATHLEN
);
673 zpl_get_link_common(struct dentry
*dentry
, struct inode
*ip
, char **link
)
675 fstrans_cookie_t cookie
;
683 iov
.iov_len
= MAXPATHLEN
;
684 iov
.iov_base
= kmem_zalloc(MAXPATHLEN
, KM_SLEEP
);
687 zfs_uio_iovec_init(&uio
, &iov
, 1, 0, UIO_SYSSPACE
, MAXPATHLEN
- 1, 0);
689 cookie
= spl_fstrans_mark();
690 error
= -zfs_readlink(ip
, &uio
, cr
);
691 spl_fstrans_unmark(cookie
);
695 kmem_free(iov
.iov_base
, MAXPATHLEN
);
697 *link
= iov
.iov_base
;
702 #if defined(HAVE_GET_LINK_DELAYED)
704 zpl_get_link(struct dentry
*dentry
, struct inode
*inode
,
705 struct delayed_call
*done
)
711 return (ERR_PTR(-ECHILD
));
713 error
= zpl_get_link_common(dentry
, inode
, &link
);
715 return (ERR_PTR(error
));
717 set_delayed_call(done
, zpl_put_link
, link
);
721 #elif defined(HAVE_GET_LINK_COOKIE)
723 zpl_get_link(struct dentry
*dentry
, struct inode
*inode
, void **cookie
)
729 return (ERR_PTR(-ECHILD
));
731 error
= zpl_get_link_common(dentry
, inode
, &link
);
733 return (ERR_PTR(error
));
735 return (*cookie
= link
);
737 #elif defined(HAVE_FOLLOW_LINK_COOKIE)
739 zpl_follow_link(struct dentry
*dentry
, void **cookie
)
744 error
= zpl_get_link_common(dentry
, dentry
->d_inode
, &link
);
746 return (ERR_PTR(error
));
748 return (*cookie
= link
);
750 #elif defined(HAVE_FOLLOW_LINK_NAMEIDATA)
752 zpl_follow_link(struct dentry
*dentry
, struct nameidata
*nd
)
757 error
= zpl_get_link_common(dentry
, dentry
->d_inode
, &link
);
759 nd_set_link(nd
, ERR_PTR(error
));
761 nd_set_link(nd
, link
);
768 zpl_link(struct dentry
*old_dentry
, struct inode
*dir
, struct dentry
*dentry
)
771 struct inode
*ip
= old_dentry
->d_inode
;
773 fstrans_cookie_t cookie
;
775 if (ip
->i_nlink
>= ZFS_LINK_MAX
)
779 zpl_inode_set_ctime_to_ts(ip
, current_time(ip
));
780 /* Must have an existing ref, so igrab() cannot return NULL */
781 VERIFY3P(igrab(ip
), !=, NULL
);
783 cookie
= spl_fstrans_mark();
784 error
= -zfs_link(ITOZ(dir
), ITOZ(ip
), dname(dentry
), cr
, 0);
790 d_instantiate(dentry
, ip
);
792 spl_fstrans_unmark(cookie
);
794 ASSERT3S(error
, <=, 0);
799 const struct inode_operations zpl_inode_operations
= {
800 .setattr
= zpl_setattr
,
801 .getattr
= zpl_getattr
,
802 #ifdef HAVE_GENERIC_SETXATTR
803 .setxattr
= generic_setxattr
,
804 .getxattr
= generic_getxattr
,
805 .removexattr
= generic_removexattr
,
807 .listxattr
= zpl_xattr_list
,
808 #if defined(CONFIG_FS_POSIX_ACL)
809 #if defined(HAVE_SET_ACL)
810 .set_acl
= zpl_set_acl
,
811 #endif /* HAVE_SET_ACL */
812 #if defined(HAVE_GET_INODE_ACL)
813 .get_inode_acl
= zpl_get_acl
,
815 .get_acl
= zpl_get_acl
,
816 #endif /* HAVE_GET_INODE_ACL */
817 #endif /* CONFIG_FS_POSIX_ACL */
820 #ifdef HAVE_RENAME2_OPERATIONS_WRAPPER
821 const struct inode_operations_wrapper zpl_dir_inode_operations
= {
824 const struct inode_operations zpl_dir_inode_operations
= {
826 .create
= zpl_create
,
827 .lookup
= zpl_lookup
,
829 .unlink
= zpl_unlink
,
830 .symlink
= zpl_symlink
,
835 .rename2
= zpl_rename2
,
836 #elif defined(HAVE_RENAME_WANTS_FLAGS) || defined(HAVE_IOPS_RENAME_USERNS)
837 .rename
= zpl_rename2
,
838 #elif defined(HAVE_IOPS_RENAME_IDMAP)
839 .rename
= zpl_rename2
,
841 .rename
= zpl_rename
,
844 .tmpfile
= zpl_tmpfile
,
846 .setattr
= zpl_setattr
,
847 .getattr
= zpl_getattr
,
848 #ifdef HAVE_GENERIC_SETXATTR
849 .setxattr
= generic_setxattr
,
850 .getxattr
= generic_getxattr
,
851 .removexattr
= generic_removexattr
,
853 .listxattr
= zpl_xattr_list
,
854 #if defined(CONFIG_FS_POSIX_ACL)
855 #if defined(HAVE_SET_ACL)
856 .set_acl
= zpl_set_acl
,
857 #endif /* HAVE_SET_ACL */
858 #if defined(HAVE_GET_INODE_ACL)
859 .get_inode_acl
= zpl_get_acl
,
861 .get_acl
= zpl_get_acl
,
862 #endif /* HAVE_GET_INODE_ACL */
863 #endif /* CONFIG_FS_POSIX_ACL */
864 #ifdef HAVE_RENAME2_OPERATIONS_WRAPPER
866 .rename2
= zpl_rename2
,
870 const struct inode_operations zpl_symlink_inode_operations
= {
871 #ifdef HAVE_GENERIC_READLINK
872 .readlink
= generic_readlink
,
874 #if defined(HAVE_GET_LINK_DELAYED) || defined(HAVE_GET_LINK_COOKIE)
875 .get_link
= zpl_get_link
,
876 #elif defined(HAVE_FOLLOW_LINK_COOKIE) || defined(HAVE_FOLLOW_LINK_NAMEIDATA)
877 .follow_link
= zpl_follow_link
,
879 #if defined(HAVE_PUT_LINK_COOKIE) || defined(HAVE_PUT_LINK_NAMEIDATA)
880 .put_link
= zpl_put_link
,
882 .setattr
= zpl_setattr
,
883 .getattr
= zpl_getattr
,
884 #ifdef HAVE_GENERIC_SETXATTR
885 .setxattr
= generic_setxattr
,
886 .getxattr
= generic_getxattr
,
887 .removexattr
= generic_removexattr
,
889 .listxattr
= zpl_xattr_list
,
892 const struct inode_operations zpl_special_inode_operations
= {
893 .setattr
= zpl_setattr
,
894 .getattr
= zpl_getattr
,
895 #ifdef HAVE_GENERIC_SETXATTR
896 .setxattr
= generic_setxattr
,
897 .getxattr
= generic_getxattr
,
898 .removexattr
= generic_removexattr
,
900 .listxattr
= zpl_xattr_list
,
901 #if defined(CONFIG_FS_POSIX_ACL)
902 #if defined(HAVE_SET_ACL)
903 .set_acl
= zpl_set_acl
,
904 #endif /* HAVE_SET_ACL */
905 #if defined(HAVE_GET_INODE_ACL)
906 .get_inode_acl
= zpl_get_acl
,
908 .get_acl
= zpl_get_acl
,
909 #endif /* HAVE_GET_INODE_ACL */
910 #endif /* CONFIG_FS_POSIX_ACL */