From owner-svn-src-all@FreeBSD.ORG Sun Dec 18 12:19:04 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7F0C2106566C; Sun, 18 Dec 2011 12:19:04 +0000 (UTC) (envelope-from pjd@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 631A88FC0A; Sun, 18 Dec 2011 12:19:04 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBICJ4aj008703; Sun, 18 Dec 2011 12:19:04 GMT (envelope-from pjd@svn.freebsd.org) Received: (from pjd@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBICJ4wF008700; Sun, 18 Dec 2011 12:19:04 GMT (envelope-from pjd@svn.freebsd.org) Message-Id: <201112181219.pBICJ4wF008700@svn.freebsd.org> From: Pawel Jakub Dawidek Date: Sun, 18 Dec 2011 12:19:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r228685 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Dec 2011 12:19:04 -0000 Author: pjd Date: Sun Dec 18 12:19:03 2011 New Revision: 228685 URL: http://svn.freebsd.org/changeset/base/228685 Log: Implement replying of ACLs updates. ACL changes should go to ZIL only if the 'sync' property is set to 'always', so replying them is not common. MFC after: 1 month Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_replay.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_replay.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_replay.c Sun Dec 18 02:10:25 2011 (r228684) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_replay.c Sun Dec 18 12:19:03 2011 (r228685) @@ -904,11 +904,15 @@ zfs_replay_setattr(zfsvfs_t *zfsvfs, lr_ return (error); } +extern int zfs_setsecattr(vnode_t *vp, vsecattr_t *vsecp, int flag, cred_t *cr, + caller_context_t *ct); + static int zfs_replay_acl_v0(zfsvfs_t *zfsvfs, lr_acl_v0_t *lr, boolean_t byteswap) { ace_t *ace = (ace_t *)(lr + 1); /* ace array follows lr_acl_t */ vsecattr_t vsa; + vnode_t *vp; znode_t *zp; int error; @@ -927,13 +931,12 @@ zfs_replay_acl_v0(zfsvfs_t *zfsvfs, lr_a vsa.vsa_aclflags = 0; vsa.vsa_aclentp = ace; -#ifdef TODO - error = VOP_SETSECATTR(ZTOV(zp), &vsa, 0, kcred, NULL); -#else - panic("%s:%u: unsupported condition", __func__, __LINE__); -#endif + vp = ZTOV(zp); + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); + error = zfs_setsecattr(vp, &vsa, 0, kcred, NULL); + VOP_UNLOCK(vp, 0); - VN_RELE(ZTOV(zp)); + VN_RELE(vp); return (error); } @@ -958,6 +961,7 @@ zfs_replay_acl(zfsvfs_t *zfsvfs, lr_acl_ ace_t *ace = (ace_t *)(lr + 1); vsecattr_t vsa; znode_t *zp; + vnode_t *vp; int error; if (byteswap) { @@ -973,7 +977,6 @@ zfs_replay_acl(zfsvfs_t *zfsvfs, lr_acl_ if ((error = zfs_zget(zfsvfs, lr->lr_foid, &zp)) != 0) return (error); -#ifdef TODO bzero(&vsa, sizeof (vsa)); vsa.vsa_mask = VSA_ACE | VSA_ACECNT | VSA_ACE_ACLFLAGS; vsa.vsa_aclcnt = lr->lr_aclcnt; @@ -990,16 +993,16 @@ zfs_replay_acl(zfsvfs_t *zfsvfs, lr_acl_ lr->lr_fuidcnt, lr->lr_domcnt, 0, 0); } - error = VOP_SETSECATTR(ZTOV(zp), &vsa, 0, kcred, NULL); + vp = ZTOV(zp); + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); + error = zfs_setsecattr(vp, &vsa, 0, kcred, NULL); + VOP_UNLOCK(vp, 0); if (zfsvfs->z_fuid_replay) zfs_fuid_info_free(zfsvfs->z_fuid_replay); -#else - error = EOPNOTSUPP; -#endif zfsvfs->z_fuid_replay = NULL; - VN_RELE(ZTOV(zp)); + VN_RELE(vp); return (error); } Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Sun Dec 18 02:10:25 2011 (r228684) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Sun Dec 18 12:19:03 2011 (r228685) @@ -5163,7 +5163,7 @@ zfs_getsecattr(vnode_t *vp, vsecattr_t * } /*ARGSUSED*/ -static int +int zfs_setsecattr(vnode_t *vp, vsecattr_t *vsecp, int flag, cred_t *cr, caller_context_t *ct) {