Module Name: src Committed By: manu Date: Tue May 3 13:16:47 UTC 2011
Modified Files: src/lib/libpuffs: puffs.c src/sys/fs/puffs: puffs_vnops.c Log Message: Call advlock method if supplied To generate a diff of this commit: cvs rdiff -u -r1.115 -r1.116 src/lib/libpuffs/puffs.c cvs rdiff -u -r1.150 -r1.151 src/sys/fs/puffs/puffs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libpuffs/puffs.c diff -u src/lib/libpuffs/puffs.c:1.115 src/lib/libpuffs/puffs.c:1.116 --- src/lib/libpuffs/puffs.c:1.115 Mon Dec 6 14:50:34 2010 +++ src/lib/libpuffs/puffs.c Tue May 3 13:16:47 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: puffs.c,v 1.115 2010/12/06 14:50:34 pooka Exp $ */ +/* $NetBSD: puffs.c,v 1.116 2011/05/03 13:16:47 manu Exp $ */ /* * Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #if !defined(lint) -__RCSID("$NetBSD: puffs.c,v 1.115 2010/12/06 14:50:34 pooka Exp $"); +__RCSID("$NetBSD: puffs.c,v 1.116 2011/05/03 13:16:47 manu Exp $"); #endif /* !lint */ #include <sys/param.h> @@ -98,6 +98,7 @@ FILLOP(print, PRINT); FILLOP(read, READ); FILLOP(write, WRITE); + FILLOP(advlock, ADVLOCK); FILLOP(abortop, ABORTOP); FILLOP(pathconf, PATHCONF); Index: src/sys/fs/puffs/puffs_vnops.c diff -u src/sys/fs/puffs/puffs_vnops.c:1.150 src/sys/fs/puffs/puffs_vnops.c:1.151 --- src/sys/fs/puffs/puffs_vnops.c:1.150 Tue Jan 11 14:04:54 2011 +++ src/sys/fs/puffs/puffs_vnops.c Tue May 3 13:16:47 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: puffs_vnops.c,v 1.150 2011/01/11 14:04:54 kefren Exp $ */ +/* $NetBSD: puffs_vnops.c,v 1.151 2011/05/03 13:16:47 manu Exp $ */ /* * Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.150 2011/01/11 14:04:54 kefren Exp $"); +__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.151 2011/05/03 13:16:47 manu Exp $"); #include <sys/param.h> #include <sys/buf.h> @@ -125,7 +125,7 @@ { &vop_getpages_desc, puffs_vnop_checkop }, /* getpages */ { &vop_putpages_desc, genfs_putpages }, /* REAL putpages */ { &vop_pathconf_desc, puffs_vnop_checkop }, /* pathconf */ - { &vop_advlock_desc, puffs_vnop_advlock }, /* REAL advlock */ + { &vop_advlock_desc, puffs_vnop_advlock }, /* advlock */ { &vop_strategy_desc, puffs_vnop_strategy }, /* REAL strategy */ { &vop_revoke_desc, genfs_revoke }, /* REAL revoke */ { &vop_abortop_desc, puffs_vnop_abortop }, /* REAL abortop */ @@ -2108,10 +2108,28 @@ struct flock *a_fl; int a_flags; } */ *ap = v; + PUFFS_MSG_VARS(vn, advlock); struct vnode *vp = ap->a_vp; struct puffs_node *pn = VPTOPP(vp); + struct puffs_mount *pmp = MPTOPUFFSMP(vp->v_mount); + int error; + + if (!EXISTSOP(pmp, ADVLOCK)) + return lf_advlock(ap, &pn->pn_lockf, vp->v_size); + + PUFFS_MSG_ALLOC(vn, advlock); + (void)memcpy(&advlock_msg->pvnr_fl, ap->a_fl, + sizeof(advlock_msg->pvnr_fl)); + advlock_msg->pvnr_id = ap->a_id; + advlock_msg->pvnr_op = ap->a_op; + advlock_msg->pvnr_flags = ap->a_flags; + puffs_msg_setinfo(park_advlock, PUFFSOP_VN, + PUFFS_VN_ADVLOCK, VPTOPNC(vp)); + PUFFS_MSG_ENQUEUEWAIT2(pmp, park_advlock, vp->v_data, NULL, error); + error = checkerr(pmp, error, __func__); + PUFFS_MSG_RELEASE(advlock); - return lf_advlock(ap, &pn->pn_lockf, vp->v_size); + return error; } int