From owner-svn-src-head@FreeBSD.ORG Wed Jun 10 17:48:03 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 E63F51065672; Wed, 10 Jun 2009 17:48:03 +0000 (UTC) (envelope-from dchagin@dchagin.static.corbina.ru) Received: from contrabass.post.ru (contrabass.post.ru [85.21.78.5]) by mx1.freebsd.org (Postfix) with ESMTP id 79C748FC12; Wed, 10 Jun 2009 17:48:02 +0000 (UTC) (envelope-from dchagin@dchagin.static.corbina.ru) Received: from corbina.ru (mail.post.ru [195.14.50.16]) by contrabass.post.ru (Postfix) with ESMTP id ED2E1A446D; Wed, 10 Jun 2009 21:48:00 +0400 (MSD) X-Virus-Scanned: by cgpav Uf39PSi9pFi9oFi9 Received: from [10.208.17.3] (HELO dchagin.static.corbina.ru) by corbina.ru (CommuniGate Pro SMTP 5.1.14) with ESMTPS id 1826837836; Wed, 10 Jun 2009 21:48:00 +0400 Received: from dchagin.static.corbina.ru (localhost.chd.net [127.0.0.1]) by dchagin.static.corbina.ru (8.14.3/8.14.3) with ESMTP id n5AHm0nX002030; Wed, 10 Jun 2009 21:48:00 +0400 (MSD) (envelope-from dchagin@dchagin.static.corbina.ru) Received: (from dchagin@localhost) by dchagin.static.corbina.ru (8.14.3/8.14.3/Submit) id n5AHlt8v002029; Wed, 10 Jun 2009 21:47:55 +0400 (MSD) (envelope-from dchagin) Date: Wed, 10 Jun 2009 21:47:55 +0400 From: Chagin Dmitry To: Paul Saab Message-ID: <20090610174755.GA1927@dchagin.static.corbina.ru> References: <200906082123.n58LNsdd044147@svn.freebsd.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="YiEDa0DAkWCtVeE4" Content-Disposition: inline In-Reply-To: <200906082123.n58LNsdd044147@svn.freebsd.org> User-Agent: Mutt/1.5.19 (2009-01-05) Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r193762 - in head/sys: 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: Wed, 10 Jun 2009 17:48:04 -0000 --YiEDa0DAkWCtVeE4 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Jun 08, 2009 at 09:23:54PM +0000, Paul Saab wrote: > Author: ps > Date: Mon Jun 8 21:23:54 2009 > New Revision: 193762 > URL: http://svn.freebsd.org/changeset/base/193762 >=20 > Log: > Simply shared vnode locking and extend it to also include fsync. > Also, in vop_write, no longer assert for exclusive locks on the > vnode. > =20 > Reviewed by: jhb, kmacy, jeffr >=20 > Modified: > head/sys/kern/vfs_syscalls.c > head/sys/kern/vfs_vnops.c > head/sys/kern/vnode_if.src > head/sys/sys/mount.h >=20 > Modified: head/sys/kern/vfs_syscalls.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_syscalls.c Mon Jun 8 21:16:06 2009 (r193761) > +++ head/sys/kern/vfs_syscalls.c Mon Jun 8 21:23:54 2009 (r193762) > @@ -3476,7 +3476,7 @@ fsync(td, uap) > struct mount *mp; > struct file *fp; > int vfslocked; > - int error; > + int error, lock_flags; > =20 > AUDIT_ARG(fd, uap->fd); > if ((error =3D getvnode(td->td_proc->p_fd, uap->fd, &fp)) !=3D 0) > @@ -3485,7 +3485,13 @@ fsync(td, uap) > vfslocked =3D VFS_LOCK_GIANT(vp->v_mount); > if ((error =3D vn_start_write(vp, &mp, V_WAIT | PCATCH)) !=3D 0) > goto drop; > - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); > + if (MNT_SHARED_WRITES(mp) || > + ((mp =3D=3D NULL) && MNT_SHARED_WRITES(vp->v_mount))) { > + lock_flags =3D LK_SHARED; > + } else { > + lock_flags =3D LK_EXCLUSIVE; > + } > + vn_lock(vp, lock_flags | LK_RETRY); > AUDIT_ARG(vnode, vp, ARG_VNODE1); > if (vp->v_object !=3D NULL) { > VM_OBJECT_LOCK(vp->v_object); >=20 vnode_if.src needs to be changed: diff --git a/sys/kern/vnode_if.src b/sys/kern/vnode_if.src index f54d046..49cc782 100644 --- a/sys/kern/vnode_if.src +++ b/sys/kern/vnode_if.src @@ -247,7 +247,7 @@ vop_revoke { }; -%% fsync vp E E E +%% fsync vp L L L vop_fsync { IN struct vnode *vp; > 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 Mon Jun 8 21:16:06 2009 (r193761) > +++ head/sys/kern/vfs_vnops.c Mon Jun 8 21:23:54 2009 (r193762) > @@ -376,8 +376,8 @@ vn_rdwr(rw, vp, base, len, offset, segfl > (error =3D vn_start_write(vp, &mp, V_WAIT | PCATCH)) > !=3D 0) > return (error); > - if (mp !=3D NULL && > - (mp->mnt_kern_flag & MNTK_SHARED_WRITES)) { > + if (MNT_SHARED_WRITES(mp) || > + ((mp =3D=3D NULL) && MNT_SHARED_WRITES(vp->v_mount))) { > lock_flags =3D LK_SHARED; > } else { > lock_flags =3D LK_EXCLUSIVE; > @@ -592,7 +592,8 @@ vn_write(fp, uio, active_cred, flags, td > (error =3D vn_start_write(vp, &mp, V_WAIT | PCATCH)) !=3D 0) > goto unlock; > =20 > - if (mp !=3D NULL && (mp->mnt_kern_flag & MNTK_SHARED_WRITES) && > + if ((MNT_SHARED_WRITES(mp) || > + ((mp =3D=3D NULL) && MNT_SHARED_WRITES(vp->v_mount))) && > (flags & FOF_OFFSET) !=3D 0) { > lock_flags =3D LK_SHARED; > } else { >=20 > Modified: head/sys/kern/vnode_if.src > =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/vnode_if.src Mon Jun 8 21:16:06 2009 (r193761) > +++ head/sys/kern/vnode_if.src Mon Jun 8 21:23:54 2009 (r193762) > @@ -197,7 +197,7 @@ vop_read { > }; > =20 > =20 > -%% write vp E E E > +%% write vp L L L > %! write pre VOP_WRITE_PRE > %! write post VOP_WRITE_POST > =20 >=20 > Modified: head/sys/sys/mount.h > =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/sys/mount.h Mon Jun 8 21:16:06 2009 (r193761) > +++ head/sys/sys/mount.h Mon Jun 8 21:23:54 2009 (r193762) > @@ -336,6 +336,9 @@ void __mnt_vnode_markerfree(str > #define MNTK_LOOKUP_SHARED 0x40000000 /* FS supports shared lock lookups= */ > #define MNTK_NOKNOTE 0x80000000 /* Don't send KNOTEs from VOP hooks */ > =20 > +#define MNT_SHARED_WRITES(mp) (((mp) !=3D NULL) && \ > + ((mp)->mnt_kern_flag & MNTK_SHARED_WRITES)) > + > /* > * Sysctl CTL_VFS definitions. > * --=20 Have fun! chd --YiEDa0DAkWCtVeE4 Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.10 (FreeBSD) iEYEARECAAYFAkov8coACgkQ0t2Tb3OO/O2tiQCg0T7p4lkPUwihE2YeixY/6hnz 1MsAoKv0De92PFd6N/a+93lI8wY5b2CQ =df3j -----END PGP SIGNATURE----- --YiEDa0DAkWCtVeE4--