From owner-svn-src-head@FreeBSD.ORG Thu Jun 4 16:31:02 2009 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 19BAA106572D; Thu, 4 Jun 2009 16:31:02 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from mail.terabit.net.ua (mail.terabit.net.ua [195.137.202.147]) by mx1.freebsd.org (Postfix) with ESMTP id 8B4BA8FC15; Thu, 4 Jun 2009 16:31:01 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from skuns.zoral.com.ua ([91.193.166.194] helo=mail.zoral.com.ua) by mail.terabit.net.ua with esmtps (TLSv1:AES256-SHA:256) (Exim 4.63 (FreeBSD)) (envelope-from ) id 1MCFqG-0006I8-4o; Thu, 04 Jun 2009 19:31:00 +0300 Received: from deviant.kiev.zoral.com.ua (root@deviant.kiev.zoral.com.ua [10.1.1.148]) by mail.zoral.com.ua (8.14.2/8.14.2) with ESMTP id n54GUup6070992 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 4 Jun 2009 19:30:56 +0300 (EEST) (envelope-from kostikbel@gmail.com) Received: from deviant.kiev.zoral.com.ua (kostik@localhost [127.0.0.1]) by deviant.kiev.zoral.com.ua (8.14.3/8.14.3) with ESMTP id n54GUuwt067771; Thu, 4 Jun 2009 19:30:56 +0300 (EEST) (envelope-from kostikbel@gmail.com) Received: (from kostik@localhost) by deviant.kiev.zoral.com.ua (8.14.3/8.14.3/Submit) id n54GUuBa067766; Thu, 4 Jun 2009 19:30:56 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: deviant.kiev.zoral.com.ua: kostik set sender to kostikbel@gmail.com using -f Date: Thu, 4 Jun 2009 19:30:56 +0300 From: Kostik Belousov To: Paul Saab Message-ID: <20090604163056.GW1927@deviant.kiev.zoral.com.ua> References: <200906041618.n54GI851097005@svn.freebsd.org> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="qEtvru/posgxJ0S3" Content-Disposition: inline In-Reply-To: <200906041618.n54GI851097005@svn.freebsd.org> User-Agent: Mutt/1.4.2.3i X-Virus-Scanned: clamav-milter 0.95.1 at skuns.kiev.zoral.com.ua X-Virus-Status: Clean X-Spam-Status: No, score=-4.4 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.2.5 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on skuns.kiev.zoral.com.ua X-Virus-Scanned: mail.terabit.net.ua 1MCFqG-0006I8-4o 2e9e4e42ef29065eeb11ce9910c78272 X-Terabit: YES Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r193440 - in head/sys: cddl/contrib/opensolaris/uts/common/fs/zfs kern sys X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2009 16:31:03 -0000 --qEtvru/posgxJ0S3 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Jun 04, 2009 at 04:18:08PM +0000, Paul Saab wrote: > Author: ps > Date: Thu Jun 4 16:18:07 2009 > New Revision: 193440 > URL: http://svn.freebsd.org/changeset/base/193440 >=20 > Log: > Support shared vnode locks for write operations when the offset is > provided on filesystems that support it. This really improves mysql > + innodb performance on ZFS. > =20 > Reviewed by: jhb, kmacy, jeffr >=20 > Modified: > head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c > head/sys/kern/vfs_vnops.c > head/sys/sys/mount.h >=20 > Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c Thu = Jun 4 15:57:38 2009 (r193439) > +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c Thu = Jun 4 16:18:07 2009 (r193440) > @@ -573,6 +573,7 @@ zfs_domount(vfs_t *vfsp, char *osname) > vfsp->mnt_flag |=3D MNT_LOCAL; > vfsp->mnt_kern_flag |=3D MNTK_MPSAFE; > vfsp->mnt_kern_flag |=3D MNTK_LOOKUP_SHARED; > + vfsp->mnt_kern_flag |=3D MNTK_SHARED_WRITES; > =20 > if (error =3D dsl_prop_get_integer(osname, "readonly", &readonly, NULL)) > goto out; >=20 > Modified: head/sys/kern/vfs_vnops.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/kern/vfs_vnops.c Thu Jun 4 15:57:38 2009 (r193439) > +++ head/sys/kern/vfs_vnops.c Thu Jun 4 16:18:07 2009 (r193440) > @@ -367,7 +367,7 @@ vn_rdwr(rw, vp, base, len, offset, segfl > struct iovec aiov; > struct mount *mp; > struct ucred *cred; > - int error; > + int error, lock_flags; > =20 > VFS_ASSERT_GIANT(vp->v_mount); > =20 > @@ -378,7 +378,13 @@ vn_rdwr(rw, vp, base, len, offset, segfl > (error =3D vn_start_write(vp, &mp, V_WAIT | PCATCH)) > !=3D 0) > return (error); > - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); > + if (mp !=3D NULL && > + (mp->mnt_kern_flag & MNTK_SHARED_WRITES)) { > + lock_flags =3D LK_SHARED; > + } else { > + lock_flags =3D LK_EXCLUSIVE; > + } > + vn_lock(vp, lock_flags | LK_RETRY); > } else > vn_lock(vp, LK_SHARED | LK_RETRY); > =20 > @@ -564,7 +570,7 @@ vn_write(fp, uio, active_cred, flags, td > { > struct vnode *vp; > struct mount *mp; > - int error, ioflag; > + int error, ioflag, lock_flags; > int vfslocked; > =20 > KASSERT(uio->uio_td =3D=3D td, ("uio_td %p is not td %p", > @@ -587,7 +593,16 @@ vn_write(fp, uio, active_cred, flags, td > if (vp->v_type !=3D VCHR && > (error =3D vn_start_write(vp, &mp, V_WAIT | PCATCH)) !=3D 0) > goto unlock; > - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); > +=20 > + if (vp->v_mount !=3D NULL && > + (vp->v_mount->mnt_kern_flag & MNTK_SHARED_WRITES) && > + (flags & FOF_OFFSET) !=3D 0) { > + lock_flags =3D LK_SHARED; > + } else { > + lock_flags =3D LK_EXCLUSIVE; > + } > + > + vn_lock(vp, lock_flags | LK_RETRY); > if ((flags & FOF_OFFSET) =3D=3D 0) > uio->uio_offset =3D fp->f_offset; > ioflag |=3D sequential_heuristic(uio, fp); Why do you check for vnode v_mount flags in vn_write, while performing the check on the vop_getwritemount(vp) result for vn_rdwr ? --qEtvru/posgxJ0S3 Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (FreeBSD) iEYEARECAAYFAkon9r8ACgkQC3+MBN1Mb4gPQgCg8DPGr3LwncSOOjHAWuCSjjLM y84Anjy/sfJxO6pgpt+TAdjgJag5qLYo =Bf4f -----END PGP SIGNATURE----- --qEtvru/posgxJ0S3--