From 812e91a7e3abe59565462e4bb2a01724afddb042 Mon Sep 17 00:00:00 2001 From: Marcel Telka Date: Wed, 13 Jan 2016 15:35:55 -0800 Subject: [PATCH] Illumos 4039 - zfs_rename()/zfs_link() needs stronger test for XDEV 4039 zfs_rename()/zfs_link() needs stronger test for XDEV Reviewed by: Gordon Ross Reviewed by: Kevin Crowe Reviewed by: Saso Kiselkov Reviewed by: Matthew Ahrens Approved by: Dan McDonald References: https://www.illumos.org/issues/4039 https://github.com/illumos/illumos-gate/commit/18e6497 Porting notes: - This check was updated in Linux in a similar fashion early on in the port. Therefore, this patch just reorders the function and updates the comment so it flows the same way as the upstream code. Ported-by: Brian Behlendorf Closes #4218 --- module/zfs/zfs_vnops.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/module/zfs/zfs_vnops.c b/module/zfs/zfs_vnops.c index 64412a69d..311613ae5 100644 --- a/module/zfs/zfs_vnops.c +++ b/module/zfs/zfs_vnops.c @@ -3207,13 +3207,18 @@ zfs_rename(struct inode *sdip, char *snm, struct inode *tdip, char *tnm, ZFS_VERIFY_ZP(sdzp); zilog = zsb->z_log; + tdzp = ITOZ(tdip); + ZFS_VERIFY_ZP(tdzp); + + /* + * We check i_sb because snapshots and the ctldir must have different + * super blocks. + */ if (tdip->i_sb != sdip->i_sb || zfsctl_is_node(tdip)) { ZFS_EXIT(zsb); return (SET_ERROR(EXDEV)); } - tdzp = ITOZ(tdip); - ZFS_VERIFY_ZP(tdzp); if (zsb->z_utf8 && u8_validate(tnm, strlen(tnm), NULL, U8_VALIDATE_ENTIRE, &error) < 0) { ZFS_EXIT(zsb); @@ -3751,14 +3756,18 @@ zfs_link(struct inode *tdip, struct inode *sip, char *name, cred_t *cr) return (SET_ERROR(EPERM)); } + szp = ITOZ(sip); + ZFS_VERIFY_ZP(szp); + + /* + * We check i_sb because snapshots and the ctldir must have different + * super blocks. + */ if (sip->i_sb != tdip->i_sb || zfsctl_is_node(sip)) { ZFS_EXIT(zsb); return (SET_ERROR(EXDEV)); } - szp = ITOZ(sip); - ZFS_VERIFY_ZP(szp); - /* Prevent links to .zfs/shares files */ if ((error = sa_lookup(szp->z_sa_hdl, SA_ZPL_PARENT(zsb), -- 2.40.0