Index: external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c =================================================================== RCS file: /cvsroot/src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c,v retrieving revision 1.7 diff -p -u -4 -r1.7 zfs_replay.c --- external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c 30 Nov 2010 10:45:27 -0000 1.7 +++ external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c 4 Jan 2014 09:32:11 -0000 @@ -515,8 +515,10 @@ zfs_replay_create(zfsvfs_t *zfsvfs, lr_c error = VOP_MKDIR(ZTOV(dzp), &vp, &cn, &xva.xva_vattr /*,vflg*/); break; case TX_MKXATTR: error = zfs_make_xattrdir(dzp, &xva.xva_vattr, &vp, kcred); + if (error == 0 && vp != NULL) + VOP_UNLOCK(vp); break; case TX_SYMLINK: name = (char *)(lr + 1); link = name + strlen(name) + 1; @@ -528,12 +530,10 @@ zfs_replay_create(zfsvfs_t *zfsvfs, lr_c } VOP_UNLOCK(ZTOV(dzp)); out: - if (error == 0 && vp != NULL) { - VOP_UNLOCK(vp); + if (error == 0 && vp != NULL) VN_RELE(vp); - } VN_RELE(ZTOV(dzp)); if (zfsvfs->z_fuid_replay) Index: external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c =================================================================== RCS file: /cvsroot/src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c,v retrieving revision 1.14 diff -p -u -4 -r1.14 zfs_vnops.c --- external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c 18 Oct 2012 14:22:57 -0000 1.14 +++ external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c 4 Jan 2014 09:32:11 -0000 @@ -4980,22 +4980,10 @@ zfs_netbsd_create(void *v) /* XXX !EXCL is wrong here... */ error = zfs_create(dvp, __UNCONST(cnp->cn_nameptr), vap, !EXCL, mode, vpp, cnp->cn_cred); - if (error) { - KASSERT(*vpp == NULL); - goto out; - } - KASSERT(*vpp != NULL); - - /* - * Lock *vpp in conformance to the VOP_CREATE protocol. - */ - vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY); - -out: + KASSERT((error == 0) == (*vpp != NULL)); KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE); - KASSERT((*vpp == NULL) || (VOP_ISLOCKED(*vpp) == LK_EXCLUSIVE)); /* * Unlock and release dvp because the VOP_CREATE protocol is insane. */ @@ -5088,22 +5076,10 @@ zfs_netbsd_mkdir(void *v) vattr_init_mask(vap); error = zfs_mkdir(dvp, __UNCONST(cnp->cn_nameptr), vap, vpp, cnp->cn_cred, NULL, 0, NULL); - if (error) { - KASSERT(*vpp == NULL); - goto out; - } - KASSERT(*vpp != NULL); - - /* - * Lock *vpp in conformance to the VOP_MKDIR protocol. - */ - vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY); - -out: + KASSERT((error == 0) == (*vpp != NULL)); KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE); - KASSERT((*vpp == NULL) || (VOP_ISLOCKED(*vpp) == LK_EXCLUSIVE)); /* * Unlock and release dvp because the VOP_MKDIR protocol is insane. */ @@ -5408,23 +5384,10 @@ zfs_netbsd_symlink(void *v) vattr_init_mask(vap); error = zfs_symlink(dvp, vpp, __UNCONST(cnp->cn_nameptr), vap, target, cnp->cn_cred, 0); - if (error) { - KASSERT(*vpp == NULL); - goto out; - } - KASSERT(*vpp != NULL); - - - /* - * Lock *vpp in conformance to the VOP_SYMLINK protocol. - */ - vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY); - -out: + KASSERT((error == 0) == (*vpp != NULL)); KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE); - KASSERT((*vpp == NULL) || (VOP_ISLOCKED(*vpp) == LK_EXCLUSIVE)); /* * Unlock and release dvp because the VOP_SYMLINK protocol is insane. */ @@ -5861,9 +5824,9 @@ zfs_netbsd_putpages(void *v) int (**zfs_vnodeop_p)(void *); const struct vnodeopv_entry_desc zfs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, zfs_netbsd_lookup }, - { &vop_create_desc, zfs_netbsd_create }, + { &vop_create1_desc, zfs_netbsd_create }, { &vop_open_desc, zfs_netbsd_open }, { &vop_close_desc, zfs_netbsd_close }, { &vop_access_desc, zfs_netbsd_access }, { &vop_getattr_desc, zfs_netbsd_getattr }, @@ -5876,11 +5839,11 @@ const struct vnodeopv_entry_desc zfs_vno { &vop_link_desc, zfs_netbsd_link }, { &vop_lock_desc, zfs_netbsd_lock }, { &vop_unlock_desc, zfs_netbsd_unlock }, { &vop_rename_desc, zfs_netbsd_rename }, - { &vop_mkdir_desc, zfs_netbsd_mkdir }, + { &vop_mkdir1_desc, zfs_netbsd_mkdir }, { &vop_rmdir_desc, zfs_netbsd_rmdir }, - { &vop_symlink_desc, zfs_netbsd_symlink }, + { &vop_symlink1_desc, zfs_netbsd_symlink }, { &vop_readdir_desc, zfs_netbsd_readdir }, { &vop_readlink_desc, zfs_netbsd_readlink }, { &vop_inactive_desc, zfs_netbsd_inactive }, { &vop_reclaim_desc, zfs_netbsd_reclaim }, Index: lib/libp2k/p2k.c =================================================================== RCS file: /cvsroot/src/lib/libp2k/p2k.c,v retrieving revision 1.60 diff -p -u -4 -r1.60 p2k.c --- lib/libp2k/p2k.c 23 Nov 2012 14:27:14 -0000 1.60 +++ lib/libp2k/p2k.c 4 Jan 2014 09:32:23 -0000 @@ -807,9 +807,8 @@ do_makenode(struct puffs_usermount *pu, assert(RUMP_VOP_ISLOCKED(dvp) == 0); freecn(cn); if (rv == 0) { - RUMP_VOP_UNLOCK(vp); p2n = getp2n(p2m, vp, true, p2n); puffs_newinfo_setcookie(pni, p2n); } else { free(p2n); Index: sys/coda/coda_vnops.c =================================================================== RCS file: /cvsroot/src/sys/coda/coda_vnops.c,v retrieving revision 1.91 diff -p -u -4 -r1.91 coda_vnops.c --- sys/coda/coda_vnops.c 17 Oct 2013 20:55:30 -0000 1.91 +++ sys/coda/coda_vnops.c 4 Jan 2014 09:32:25 -0000 @@ -99,10 +99,10 @@ static int coda_lockdebug = 0; const struct vnodeopv_entry_desc coda_vnodeop_entries[] = { { &vop_default_desc, coda_vop_error }, { &vop_lookup_desc, coda_lookup }, /* lookup */ - { &vop_create_desc, coda_create }, /* create */ - { &vop_mknod_desc, coda_vop_error }, /* mknod */ + { &vop_create1_desc, coda_create }, /* create */ + { &vop_mknod1_desc, coda_vop_error }, /* mknod */ { &vop_open_desc, coda_open }, /* open */ { &vop_close_desc, coda_close }, /* close */ { &vop_access_desc, coda_access }, /* access */ { &vop_getattr_desc, coda_getattr }, /* getattr */ @@ -115,11 +115,11 @@ const struct vnodeopv_entry_desc coda_vn { &vop_fsync_desc, coda_fsync }, /* fsync */ { &vop_remove_desc, coda_remove }, /* remove */ { &vop_link_desc, coda_link }, /* link */ { &vop_rename_desc, coda_rename }, /* rename */ - { &vop_mkdir_desc, coda_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, coda_mkdir }, /* mkdir */ { &vop_rmdir_desc, coda_rmdir }, /* rmdir */ - { &vop_symlink_desc, coda_symlink }, /* symlink */ + { &vop_symlink1_desc, coda_symlink }, /* symlink */ { &vop_readdir_desc, coda_readdir }, /* readdir */ { &vop_readlink_desc, coda_readlink }, /* readlink */ { &vop_abortop_desc, coda_abortop }, /* abortop */ { &vop_inactive_desc, coda_inactive }, /* inactive */ @@ -1096,21 +1096,16 @@ coda_create(void *v) error));) } /* - * vnodeops(9) says that we must unlock the parent and lock the child. - * XXX Should we lock the child first? + * vnodeops(9) says that we must unlock the parent. */ vput(dvp); if (!error) { #ifdef CODA_VERBOSE if ((cnp->cn_flags & LOCKLEAF) == 0) /* This should not happen; flags are for lookup only. */ printf("%s: LOCKLEAF not set!\n", __func__); - - if ((error = vn_lock(*ap->a_vpp, LK_EXCLUSIVE))) - /* XXX Perhaps avoid this panic. */ - panic("%s: couldn't lock child", __func__); #endif } return(error); @@ -1421,18 +1416,10 @@ coda_mkdir(void *v) } /* * Currently, all mkdirs explicitly vput their dvp's. - * It also appears that we *must* lock the vpp, since - * lockleaf isn't set, but someone down the road is going - * to try to unlock the new directory. */ vput(dvp); - if (!error) { - if ((error = vn_lock(*ap->a_vpp, LK_EXCLUSIVE))) { - panic("%s: couldn't lock child", __func__); - } - } return(error); } @@ -1575,10 +1562,11 @@ coda_symlink(void *v) saved_cn_flags = cnp->cn_flags; cnp->cn_flags &= ~(MODMASK | OPMASK); cnp->cn_flags |= LOOKUP; error = VOP_LOOKUP(dvp, ap->a_vpp, cnp); + if (ap->a_vpp != NULL && error == 0) + VOP_UNLOCK(*ap->a_vpp); cnp->cn_flags = saved_cn_flags; - /* Either an error occurs, or ap->a_vpp is locked. */ } exit: /* unlock and deference parent */ Index: sys/fs/adosfs/advnops.c =================================================================== RCS file: /cvsroot/src/sys/fs/adosfs/advnops.c,v retrieving revision 1.41 diff -p -u -4 -r1.41 advnops.c --- sys/fs/adosfs/advnops.c 18 Mar 2013 19:35:35 -0000 1.41 +++ sys/fs/adosfs/advnops.c 4 Jan 2014 09:32:26 -0000 @@ -95,10 +95,10 @@ int adosfs_pathconf(void *); const struct vnodeopv_entry_desc adosfs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, adosfs_lookup }, /* lookup */ - { &vop_create_desc, adosfs_create }, /* create */ - { &vop_mknod_desc, adosfs_mknod }, /* mknod */ + { &vop_create1_desc, adosfs_create }, /* create */ + { &vop_mknod1_desc, adosfs_mknod }, /* mknod */ { &vop_open_desc, adosfs_open }, /* open */ { &vop_close_desc, adosfs_close }, /* close */ { &vop_access_desc, adosfs_access }, /* access */ { &vop_getattr_desc, adosfs_getattr }, /* getattr */ @@ -115,11 +115,11 @@ const struct vnodeopv_entry_desc adosfs_ { &vop_seek_desc, adosfs_seek }, /* seek */ { &vop_remove_desc, adosfs_remove }, /* remove */ { &vop_link_desc, adosfs_link }, /* link */ { &vop_rename_desc, adosfs_rename }, /* rename */ - { &vop_mkdir_desc, adosfs_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, adosfs_mkdir }, /* mkdir */ { &vop_rmdir_desc, adosfs_rmdir }, /* rmdir */ - { &vop_symlink_desc, adosfs_symlink }, /* symlink */ + { &vop_symlink1_desc, adosfs_symlink }, /* symlink */ { &vop_readdir_desc, adosfs_readdir }, /* readdir */ { &vop_readlink_desc, adosfs_readlink }, /* readlink */ { &vop_abortop_desc, adosfs_abortop }, /* abortop */ { &vop_inactive_desc, adosfs_inactive }, /* inactive */ Index: sys/fs/cd9660/cd9660_vnops.c =================================================================== RCS file: /cvsroot/src/sys/fs/cd9660/cd9660_vnops.c,v retrieving revision 1.45 diff -p -u -4 -r1.45 cd9660_vnops.c --- sys/fs/cd9660/cd9660_vnops.c 23 Jun 2013 07:28:36 -0000 1.45 +++ sys/fs/cd9660/cd9660_vnops.c 4 Jan 2014 09:32:26 -0000 @@ -850,10 +850,10 @@ cd9660_setattr(void *v) int (**cd9660_vnodeop_p)(void *); const struct vnodeopv_entry_desc cd9660_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, cd9660_lookup }, /* lookup */ - { &vop_create_desc, cd9660_create }, /* create */ - { &vop_mknod_desc, cd9660_mknod }, /* mknod */ + { &vop_create1_desc, cd9660_create }, /* create */ + { &vop_mknod1_desc, cd9660_mknod }, /* mknod */ { &vop_open_desc, cd9660_open }, /* open */ { &vop_close_desc, cd9660_close }, /* close */ { &vop_access_desc, cd9660_access }, /* access */ { &vop_getattr_desc, cd9660_getattr }, /* getattr */ @@ -869,11 +869,11 @@ const struct vnodeopv_entry_desc cd9660_ { &vop_seek_desc, cd9660_seek }, /* seek */ { &vop_remove_desc, cd9660_remove }, /* remove */ { &vop_link_desc, cd9660_link }, /* link */ { &vop_rename_desc, cd9660_rename }, /* rename */ - { &vop_mkdir_desc, cd9660_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, cd9660_mkdir }, /* mkdir */ { &vop_rmdir_desc, cd9660_rmdir }, /* rmdir */ - { &vop_symlink_desc, cd9660_symlink }, /* symlink */ + { &vop_symlink1_desc, cd9660_symlink }, /* symlink */ { &vop_readdir_desc, cd9660_readdir }, /* readdir */ { &vop_readlink_desc, cd9660_readlink }, /* readlink */ { &vop_abortop_desc, cd9660_abortop }, /* abortop */ { &vop_inactive_desc, cd9660_inactive }, /* inactive */ @@ -900,10 +900,10 @@ const struct vnodeopv_desc cd9660_vnodeo int (**cd9660_specop_p)(void *); const struct vnodeopv_entry_desc cd9660_specop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, spec_lookup }, /* lookup */ - { &vop_create_desc, spec_create }, /* create */ - { &vop_mknod_desc, spec_mknod }, /* mknod */ + { &vop_create1_desc, spec_create }, /* create */ + { &vop_mknod1_desc, spec_mknod }, /* mknod */ { &vop_open_desc, spec_open }, /* open */ { &vop_close_desc, spec_close }, /* close */ { &vop_access_desc, cd9660_access }, /* access */ { &vop_getattr_desc, cd9660_getattr }, /* getattr */ @@ -920,11 +920,11 @@ const struct vnodeopv_entry_desc cd9660_ { &vop_seek_desc, spec_seek }, /* seek */ { &vop_remove_desc, spec_remove }, /* remove */ { &vop_link_desc, spec_link }, /* link */ { &vop_rename_desc, spec_rename }, /* rename */ - { &vop_mkdir_desc, spec_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, spec_mkdir }, /* mkdir */ { &vop_rmdir_desc, spec_rmdir }, /* rmdir */ - { &vop_symlink_desc, spec_symlink }, /* symlink */ + { &vop_symlink1_desc, spec_symlink }, /* symlink */ { &vop_readdir_desc, spec_readdir }, /* readdir */ { &vop_readlink_desc, spec_readlink }, /* readlink */ { &vop_abortop_desc, spec_abortop }, /* abortop */ { &vop_inactive_desc, cd9660_inactive }, /* inactive */ @@ -948,10 +948,10 @@ const struct vnodeopv_desc cd9660_specop int (**cd9660_fifoop_p)(void *); const struct vnodeopv_entry_desc cd9660_fifoop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, vn_fifo_bypass }, /* lookup */ - { &vop_create_desc, vn_fifo_bypass }, /* create */ - { &vop_mknod_desc, vn_fifo_bypass }, /* mknod */ + { &vop_create1_desc, vn_fifo_bypass }, /* create */ + { &vop_mknod1_desc, vn_fifo_bypass }, /* mknod */ { &vop_open_desc, vn_fifo_bypass }, /* open */ { &vop_close_desc, vn_fifo_bypass }, /* close */ { &vop_access_desc, cd9660_access }, /* access */ { &vop_getattr_desc, cd9660_getattr }, /* getattr */ @@ -968,11 +968,11 @@ const struct vnodeopv_entry_desc cd9660_ { &vop_seek_desc, vn_fifo_bypass }, /* seek */ { &vop_remove_desc, vn_fifo_bypass }, /* remove */ { &vop_link_desc, vn_fifo_bypass } , /* link */ { &vop_rename_desc, vn_fifo_bypass }, /* rename */ - { &vop_mkdir_desc, vn_fifo_bypass }, /* mkdir */ + { &vop_mkdir1_desc, vn_fifo_bypass }, /* mkdir */ { &vop_rmdir_desc, vn_fifo_bypass }, /* rmdir */ - { &vop_symlink_desc, vn_fifo_bypass }, /* symlink */ + { &vop_symlink1_desc, vn_fifo_bypass }, /* symlink */ { &vop_readdir_desc, vn_fifo_bypass }, /* readdir */ { &vop_readlink_desc, vn_fifo_bypass }, /* readlink */ { &vop_abortop_desc, vn_fifo_bypass }, /* abortop */ { &vop_inactive_desc, cd9660_inactive }, /* inactive */ Index: sys/fs/efs/efs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/fs/efs/efs_vnops.c,v retrieving revision 1.30 diff -p -u -4 -r1.30 efs_vnops.c --- sys/fs/efs/efs_vnops.c 18 Mar 2013 19:35:36 -0000 1.30 +++ sys/fs/efs/efs_vnops.c 4 Jan 2014 09:32:26 -0000 @@ -796,10 +796,10 @@ efs_advlock(void *v) int (**efs_vnodeop_p)(void *); const struct vnodeopv_entry_desc efs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error}, /* error handler */ { &vop_lookup_desc, efs_lookup }, /* lookup */ - { &vop_create_desc, genfs_eopnotsupp}, /* create */ - { &vop_mknod_desc, genfs_eopnotsupp}, /* mknod */ + { &vop_create1_desc, genfs_eopnotsupp}, /* create */ + { &vop_mknod1_desc, genfs_eopnotsupp}, /* mknod */ { &vop_open_desc, genfs_nullop }, /* open */ { &vop_close_desc, genfs_nullop }, /* close */ { &vop_access_desc, efs_access }, /* access */ { &vop_getattr_desc, efs_getattr }, /* getattr */ @@ -816,11 +816,11 @@ const struct vnodeopv_entry_desc efs_vno { &vop_seek_desc, genfs_seek }, /* seek */ { &vop_remove_desc, genfs_eopnotsupp}, /* remove */ { &vop_link_desc, genfs_eopnotsupp}, /* link */ { &vop_rename_desc, genfs_eopnotsupp}, /* rename */ - { &vop_mkdir_desc, genfs_eopnotsupp}, /* mkdir */ + { &vop_mkdir1_desc, genfs_eopnotsupp}, /* mkdir */ { &vop_rmdir_desc, genfs_eopnotsupp}, /* rmdir */ - { &vop_symlink_desc, genfs_eopnotsupp}, /* symlink */ + { &vop_symlink1_desc, genfs_eopnotsupp}, /* symlink */ { &vop_readdir_desc, efs_readdir }, /* readdir */ { &vop_readlink_desc, efs_readlink }, /* readlink */ { &vop_abortop_desc, genfs_abortop }, /* abortop */ { &vop_inactive_desc, efs_inactive }, /* inactive */ @@ -852,10 +852,10 @@ const struct vnodeopv_desc efs_vnodeop_o int (**efs_specop_p)(void *); const struct vnodeopv_entry_desc efs_specop_entries[] = { { &vop_default_desc, vn_default_error}, /* error handler */ { &vop_lookup_desc, spec_lookup }, /* lookup */ - { &vop_create_desc, spec_create }, /* create */ - { &vop_mknod_desc, spec_mknod }, /* mknod */ + { &vop_create1_desc, spec_create }, /* create */ + { &vop_mknod1_desc, spec_mknod }, /* mknod */ { &vop_open_desc, spec_open }, /* open */ { &vop_close_desc, spec_close }, /* close */ { &vop_access_desc, efs_access }, /* access */ { &vop_getattr_desc, efs_getattr }, /* getattr */ @@ -872,11 +872,11 @@ const struct vnodeopv_entry_desc efs_spe { &vop_seek_desc, spec_seek }, /* seek */ { &vop_remove_desc, spec_remove }, /* remove */ { &vop_link_desc, spec_link }, /* link */ { &vop_rename_desc, spec_rename }, /* rename */ - { &vop_mkdir_desc, spec_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, spec_mkdir }, /* mkdir */ { &vop_rmdir_desc, spec_rmdir }, /* rmdir */ - { &vop_symlink_desc, spec_symlink }, /* symlink */ + { &vop_symlink1_desc, spec_symlink }, /* symlink */ { &vop_readdir_desc, spec_readdir }, /* readdir */ { &vop_readlink_desc, spec_readlink }, /* readlink */ { &vop_abortop_desc, spec_abortop }, /* abortop */ { &vop_inactive_desc, efs_inactive }, /* inactive */ @@ -908,10 +908,10 @@ const struct vnodeopv_desc efs_specop_op int (**efs_fifoop_p)(void *); const struct vnodeopv_entry_desc efs_fifoop_entries[] = { { &vop_default_desc, vn_default_error}, /* error handler */ { &vop_lookup_desc, vn_fifo_bypass }, /* lookup */ - { &vop_create_desc, vn_fifo_bypass }, /* create */ - { &vop_mknod_desc, vn_fifo_bypass }, /* mknod */ + { &vop_create1_desc, vn_fifo_bypass }, /* create */ + { &vop_mknod1_desc, vn_fifo_bypass }, /* mknod */ { &vop_open_desc, vn_fifo_bypass }, /* open */ { &vop_close_desc, vn_fifo_bypass }, /* close */ { &vop_access_desc, efs_access }, /* access */ { &vop_getattr_desc, efs_getattr }, /* getattr */ @@ -928,11 +928,11 @@ const struct vnodeopv_entry_desc efs_fif { &vop_seek_desc, vn_fifo_bypass }, /* seek */ { &vop_remove_desc, vn_fifo_bypass }, /* remove */ { &vop_link_desc, vn_fifo_bypass }, /* link */ { &vop_rename_desc, vn_fifo_bypass }, /* rename */ - { &vop_mkdir_desc, vn_fifo_bypass }, /* mkdir */ + { &vop_mkdir1_desc, vn_fifo_bypass }, /* mkdir */ { &vop_rmdir_desc, vn_fifo_bypass }, /* rmdir */ - { &vop_symlink_desc, vn_fifo_bypass }, /* symlink */ + { &vop_symlink1_desc, vn_fifo_bypass }, /* symlink */ { &vop_readdir_desc, vn_fifo_bypass }, /* readdir */ { &vop_readlink_desc, vn_fifo_bypass }, /* readlink */ { &vop_abortop_desc, vn_fifo_bypass }, /* abortop */ { &vop_inactive_desc, efs_inactive }, /* inactive */ Index: sys/fs/filecorefs/filecore_vnops.c =================================================================== RCS file: /cvsroot/src/sys/fs/filecorefs/filecore_vnops.c,v retrieving revision 1.39 diff -p -u -4 -r1.39 filecore_vnops.c --- sys/fs/filecorefs/filecore_vnops.c 20 Oct 2013 17:14:48 -0000 1.39 +++ sys/fs/filecorefs/filecore_vnops.c 4 Jan 2014 09:32:26 -0000 @@ -556,10 +556,10 @@ filecore_pathconf(void *v) int (**filecore_vnodeop_p)(void *); const struct vnodeopv_entry_desc filecore_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, filecore_lookup }, /* lookup */ - { &vop_create_desc, filecore_create }, /* create */ - { &vop_mknod_desc, filecore_mknod }, /* mknod */ + { &vop_create1_desc, filecore_create }, /* create */ + { &vop_mknod1_desc, filecore_mknod }, /* mknod */ { &vop_open_desc, filecore_open }, /* open */ { &vop_close_desc, filecore_close }, /* close */ { &vop_access_desc, filecore_access }, /* access */ { &vop_getattr_desc, filecore_getattr }, /* getattr */ @@ -576,11 +576,11 @@ const struct vnodeopv_entry_desc filecor { &vop_seek_desc, filecore_seek }, /* seek */ { &vop_remove_desc, filecore_remove }, /* remove */ { &vop_link_desc, filecore_link }, /* link */ { &vop_rename_desc, filecore_rename }, /* rename */ - { &vop_mkdir_desc, filecore_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, filecore_mkdir }, /* mkdir */ { &vop_rmdir_desc, filecore_rmdir }, /* rmdir */ - { &vop_symlink_desc, filecore_symlink }, /* symlink */ + { &vop_symlink1_desc, filecore_symlink }, /* symlink */ { &vop_readdir_desc, filecore_readdir }, /* readdir */ { &vop_readlink_desc, filecore_readlink }, /* readlink */ { &vop_abortop_desc, filecore_abortop }, /* abortop */ { &vop_inactive_desc, filecore_inactive }, /* inactive */ Index: sys/fs/hfs/hfs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/fs/hfs/hfs_vnops.c,v retrieving revision 1.28 diff -p -u -4 -r1.28 hfs_vnops.c --- sys/fs/hfs/hfs_vnops.c 18 Oct 2013 19:58:11 -0000 1.28 +++ sys/fs/hfs/hfs_vnops.c 4 Jan 2014 09:32:26 -0000 @@ -154,11 +154,11 @@ int hfs_vop_print(void *); int (**hfs_vnodeop_p) (void *); const struct vnodeopv_entry_desc hfs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, hfs_vop_lookup }, /* lookup */ - { &vop_create_desc, genfs_eopnotsupp }, /* create */ + { &vop_create1_desc, genfs_eopnotsupp }, /* create */ { &vop_whiteout_desc, genfs_eopnotsupp }, /* whiteout */ - { &vop_mknod_desc, genfs_eopnotsupp }, /* mknod */ + { &vop_mknod1_desc, genfs_eopnotsupp }, /* mknod */ { &vop_open_desc, hfs_vop_open }, /* open */ { &vop_close_desc, hfs_vop_close }, /* close */ { &vop_access_desc, hfs_vop_access }, /* access */ { &vop_getattr_desc, hfs_vop_getattr }, /* getattr */ @@ -175,11 +175,11 @@ const struct vnodeopv_entry_desc hfs_vno { &vop_seek_desc, genfs_seek }, /* seek */ { &vop_remove_desc, genfs_eopnotsupp }, /* remove */ { &vop_link_desc, genfs_eopnotsupp }, /* link */ { &vop_rename_desc, genfs_eopnotsupp }, /* rename */ - { &vop_mkdir_desc, genfs_eopnotsupp }, /* mkdir */ + { &vop_mkdir1_desc, genfs_eopnotsupp }, /* mkdir */ { &vop_rmdir_desc, genfs_eopnotsupp }, /* rmdir */ - { &vop_symlink_desc, genfs_eopnotsupp }, /* symlink */ + { &vop_symlink1_desc, genfs_eopnotsupp }, /* symlink */ { &vop_readdir_desc, hfs_vop_readdir }, /* readdir */ { &vop_readlink_desc, hfs_vop_readlink }, /* readlink */ { &vop_abortop_desc, genfs_abortop }, /* abortop */ { &vop_inactive_desc, genfs_eopnotsupp }, /* inactive */ @@ -209,10 +209,10 @@ const struct vnodeopv_desc hfs_vnodeop_o int (**hfs_specop_p) (void *); const struct vnodeopv_entry_desc hfs_specop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, spec_lookup }, /* lookup */ - { &vop_create_desc, spec_create }, /* create */ - { &vop_mknod_desc, spec_mknod }, /* mknod */ + { &vop_create1_desc, spec_create }, /* create */ + { &vop_mknod1_desc, spec_mknod }, /* mknod */ { &vop_open_desc, spec_open }, /* open */ { &vop_close_desc, spec_close }, /* close */ { &vop_access_desc, hfs_vop_access }, /* access */ { &vop_getattr_desc, hfs_vop_getattr }, /* getattr */ @@ -229,11 +229,11 @@ const struct vnodeopv_entry_desc hfs_spe { &vop_seek_desc, spec_seek }, /* seek */ { &vop_remove_desc, spec_remove }, /* remove */ { &vop_link_desc, spec_link }, /* link */ { &vop_rename_desc, spec_rename }, /* rename */ - { &vop_mkdir_desc, spec_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, spec_mkdir }, /* mkdir */ { &vop_rmdir_desc, spec_rmdir }, /* rmdir */ - { &vop_symlink_desc, spec_symlink }, /* symlink */ + { &vop_symlink1_desc, spec_symlink }, /* symlink */ { &vop_readdir_desc, spec_readdir }, /* readdir */ { &vop_readlink_desc, spec_readlink }, /* readlink */ { &vop_abortop_desc, spec_abortop }, /* abortop */ { &vop_inactive_desc, genfs_eopnotsupp }, /* inactive */ @@ -265,10 +265,10 @@ const struct vnodeopv_desc hfs_specop_op int (**hfs_fifoop_p) (void *); const struct vnodeopv_entry_desc hfs_fifoop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, vn_fifo_bypass }, /* lookup */ - { &vop_create_desc, vn_fifo_bypass }, /* create */ - { &vop_mknod_desc, vn_fifo_bypass }, /* mknod */ + { &vop_create1_desc, vn_fifo_bypass }, /* create */ + { &vop_mknod1_desc, vn_fifo_bypass }, /* mknod */ { &vop_open_desc, vn_fifo_bypass }, /* open */ { &vop_close_desc, vn_fifo_bypass }, /* close */ { &vop_access_desc, hfs_vop_access }, /* access */ { &vop_getattr_desc, hfs_vop_getattr }, /* getattr */ @@ -285,11 +285,11 @@ const struct vnodeopv_entry_desc hfs_fif { &vop_seek_desc, vn_fifo_bypass }, /* seek */ { &vop_remove_desc, vn_fifo_bypass }, /* remove */ { &vop_link_desc, vn_fifo_bypass }, /* link */ { &vop_rename_desc, vn_fifo_bypass }, /* rename */ - { &vop_mkdir_desc, vn_fifo_bypass }, /* mkdir */ + { &vop_mkdir1_desc, vn_fifo_bypass }, /* mkdir */ { &vop_rmdir_desc, vn_fifo_bypass }, /* rmdir */ - { &vop_symlink_desc, vn_fifo_bypass }, /* symlink */ + { &vop_symlink1_desc, vn_fifo_bypass }, /* symlink */ { &vop_readdir_desc, vn_fifo_bypass }, /* readdir */ { &vop_readlink_desc, vn_fifo_bypass }, /* readlink */ { &vop_abortop_desc, vn_fifo_bypass }, /* abortop */ { &vop_inactive_desc, genfs_eopnotsupp }, /* inactive */ Index: sys/fs/msdosfs/msdosfs_lookup.c =================================================================== RCS file: /cvsroot/src/sys/fs/msdosfs/msdosfs_lookup.c,v retrieving revision 1.30 diff -p -u -4 -r1.30 msdosfs_lookup.c --- sys/fs/msdosfs/msdosfs_lookup.c 24 Dec 2013 16:51:24 -0000 1.30 +++ sys/fs/msdosfs/msdosfs_lookup.c 4 Jan 2014 09:32:26 -0000 @@ -710,9 +710,14 @@ createde(struct denode *dep, struct deno diroffset = MSDOSFSROOT_OFS; else diroffset = 0; } - return deget(pmp, dirclust, diroffset, depp); + error = deget(pmp, dirclust, diroffset, depp); +#ifndef MAKEFS + if (error == 0) + VOP_UNLOCK(DETOV(*depp)); +#endif + return error; } return 0; Index: sys/fs/msdosfs/msdosfs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/fs/msdosfs/msdosfs_vnops.c,v retrieving revision 1.87 diff -p -u -4 -r1.87 msdosfs_vnops.c --- sys/fs/msdosfs/msdosfs_vnops.c 2 Nov 2013 10:30:18 -0000 1.87 +++ sys/fs/msdosfs/msdosfs_vnops.c 4 Jan 2014 09:32:26 -0000 @@ -1865,10 +1865,10 @@ msdosfs_detimes(struct denode *dep, cons int (**msdosfs_vnodeop_p)(void *); const struct vnodeopv_entry_desc msdosfs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, msdosfs_lookup }, /* lookup */ - { &vop_create_desc, msdosfs_create }, /* create */ - { &vop_mknod_desc, genfs_eopnotsupp }, /* mknod */ + { &vop_create1_desc, msdosfs_create }, /* create */ + { &vop_mknod1_desc, genfs_eopnotsupp }, /* mknod */ { &vop_open_desc, genfs_nullop }, /* open */ { &vop_close_desc, msdosfs_close }, /* close */ { &vop_access_desc, msdosfs_access }, /* access */ { &vop_getattr_desc, msdosfs_getattr }, /* getattr */ @@ -1885,11 +1885,11 @@ const struct vnodeopv_entry_desc msdosfs { &vop_seek_desc, msdosfs_seek }, /* seek */ { &vop_remove_desc, msdosfs_remove }, /* remove */ { &vop_link_desc, genfs_eopnotsupp }, /* link */ { &vop_rename_desc, msdosfs_rename }, /* rename */ - { &vop_mkdir_desc, msdosfs_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, msdosfs_mkdir }, /* mkdir */ { &vop_rmdir_desc, msdosfs_rmdir }, /* rmdir */ - { &vop_symlink_desc, genfs_eopnotsupp }, /* symlink */ + { &vop_symlink1_desc, genfs_eopnotsupp }, /* symlink */ { &vop_readdir_desc, msdosfs_readdir }, /* readdir */ { &vop_readlink_desc, genfs_einval }, /* readlink */ { &vop_abortop_desc, msdosfs_abortop }, /* abortop */ { &vop_inactive_desc, msdosfs_inactive }, /* inactive */ Index: sys/fs/nilfs/nilfs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/fs/nilfs/nilfs_vnops.c,v retrieving revision 1.24 diff -p -u -4 -r1.24 nilfs_vnops.c --- sys/fs/nilfs/nilfs_vnops.c 18 Oct 2013 19:57:28 -0000 1.24 +++ sys/fs/nilfs/nilfs_vnops.c 4 Jan 2014 09:32:26 -0000 @@ -1562,10 +1562,10 @@ int (**nilfs_vnodeop_p) __P((void *)); const struct vnodeopv_entry_desc nilfs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, nilfs_lookup }, /* lookup */ - { &vop_create_desc, nilfs_create }, /* create */ - { &vop_mknod_desc, nilfs_mknod }, /* mknod */ /* TODO */ + { &vop_create1_desc, nilfs_create }, /* create */ + { &vop_mknod1_desc, nilfs_mknod }, /* mknod */ /* TODO */ { &vop_open_desc, nilfs_open }, /* open */ { &vop_close_desc, nilfs_close }, /* close */ { &vop_access_desc, nilfs_access }, /* access */ { &vop_getattr_desc, nilfs_getattr }, /* getattr */ @@ -1582,11 +1582,11 @@ const struct vnodeopv_entry_desc nilfs_v { &vop_seek_desc, genfs_seek }, /* seek */ { &vop_remove_desc, nilfs_remove }, /* remove */ { &vop_link_desc, nilfs_link }, /* link */ /* TODO */ { &vop_rename_desc, nilfs_rename }, /* rename */ /* TODO */ - { &vop_mkdir_desc, nilfs_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, nilfs_mkdir }, /* mkdir */ { &vop_rmdir_desc, nilfs_rmdir }, /* rmdir */ - { &vop_symlink_desc, nilfs_symlink }, /* symlink */ /* TODO */ + { &vop_symlink1_desc, nilfs_symlink }, /* symlink */ /* TODO */ { &vop_readdir_desc, nilfs_readdir }, /* readdir */ { &vop_readlink_desc, nilfs_readlink }, /* readlink */ /* TEST ME */ { &vop_abortop_desc, genfs_abortop }, /* abortop */ /* TODO/OK? */ { &vop_inactive_desc, nilfs_inactive }, /* inactive */ Index: sys/fs/ntfs/ntfs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/fs/ntfs/ntfs_vnops.c,v retrieving revision 1.55 diff -p -u -4 -r1.55 ntfs_vnops.c --- sys/fs/ntfs/ntfs_vnops.c 18 Mar 2013 19:35:38 -0000 1.55 +++ sys/fs/ntfs/ntfs_vnops.c 4 Jan 2014 09:32:26 -0000 @@ -805,10 +805,10 @@ vop_t **ntfs_vnodeop_p; const struct vnodeopv_entry_desc ntfs_vnodeop_entries[] = { { &vop_default_desc, (vop_t *) ntfs_bypass }, { &vop_lookup_desc, (vop_t *) ntfs_lookup }, /* lookup */ - { &vop_create_desc, genfs_eopnotsupp }, /* create */ - { &vop_mknod_desc, genfs_eopnotsupp }, /* mknod */ + { &vop_create1_desc, genfs_eopnotsupp }, /* create */ + { &vop_mknod1_desc, genfs_eopnotsupp }, /* mknod */ { &vop_open_desc, (vop_t *) ntfs_open }, /* open */ { &vop_close_desc,(vop_t *) ntfs_close }, /* close */ { &vop_access_desc, (vop_t *) ntfs_access }, /* access */ { &vop_getattr_desc, (vop_t *) ntfs_getattr }, /* getattr */ @@ -825,11 +825,11 @@ const struct vnodeopv_entry_desc ntfs_vn { &vop_seek_desc, genfs_seek }, /* seek */ { &vop_remove_desc, genfs_eopnotsupp }, /* remove */ { &vop_link_desc, genfs_eopnotsupp }, /* link */ { &vop_rename_desc, genfs_eopnotsupp }, /* rename */ - { &vop_mkdir_desc, genfs_eopnotsupp }, /* mkdir */ + { &vop_mkdir1_desc, genfs_eopnotsupp }, /* mkdir */ { &vop_rmdir_desc, genfs_eopnotsupp }, /* rmdir */ - { &vop_symlink_desc, genfs_eopnotsupp }, /* symlink */ + { &vop_symlink1_desc, genfs_eopnotsupp }, /* symlink */ { &vop_readdir_desc, (vop_t *) ntfs_readdir }, /* readdir */ { &vop_readlink_desc, genfs_eopnotsupp }, /* readlink */ { &vop_abortop_desc, genfs_abortop }, /* abortop */ { &vop_inactive_desc, (vop_t *) ntfs_inactive }, /* inactive */ Index: sys/fs/ptyfs/ptyfs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/fs/ptyfs/ptyfs_vnops.c,v retrieving revision 1.42 diff -p -u -4 -r1.42 ptyfs_vnops.c --- sys/fs/ptyfs/ptyfs_vnops.c 5 Nov 2013 00:40:33 -0000 1.42 +++ sys/fs/ptyfs/ptyfs_vnops.c 4 Jan 2014 09:32:26 -0000 @@ -165,10 +165,10 @@ static int atoi(const char *, size_t); int (**ptyfs_vnodeop_p)(void *); const struct vnodeopv_entry_desc ptyfs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, ptyfs_lookup }, /* lookup */ - { &vop_create_desc, ptyfs_create }, /* create */ - { &vop_mknod_desc, ptyfs_mknod }, /* mknod */ + { &vop_create1_desc, ptyfs_create }, /* create */ + { &vop_mknod1_desc, ptyfs_mknod }, /* mknod */ { &vop_open_desc, ptyfs_open }, /* open */ { &vop_close_desc, ptyfs_close }, /* close */ { &vop_access_desc, ptyfs_access }, /* access */ { &vop_getattr_desc, ptyfs_getattr }, /* getattr */ @@ -185,11 +185,11 @@ const struct vnodeopv_entry_desc ptyfs_v { &vop_seek_desc, ptyfs_seek }, /* seek */ { &vop_remove_desc, ptyfs_remove }, /* remove */ { &vop_link_desc, ptyfs_link }, /* link */ { &vop_rename_desc, ptyfs_rename }, /* rename */ - { &vop_mkdir_desc, ptyfs_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, ptyfs_mkdir }, /* mkdir */ { &vop_rmdir_desc, ptyfs_rmdir }, /* rmdir */ - { &vop_symlink_desc, ptyfs_symlink }, /* symlink */ + { &vop_symlink1_desc, ptyfs_symlink }, /* symlink */ { &vop_readdir_desc, ptyfs_readdir }, /* readdir */ { &vop_readlink_desc, ptyfs_readlink }, /* readlink */ { &vop_abortop_desc, ptyfs_abortop }, /* abortop */ { &vop_inactive_desc, spec_inactive }, /* inactive */ Index: sys/fs/puffs/puffs_node.c =================================================================== RCS file: /cvsroot/src/sys/fs/puffs/puffs_node.c,v retrieving revision 1.30 diff -p -u -4 -r1.30 puffs_node.c --- sys/fs/puffs/puffs_node.c 17 Oct 2013 21:03:27 -0000 1.30 +++ sys/fs/puffs/puffs_node.c 4 Jan 2014 09:32:26 -0000 @@ -242,9 +242,8 @@ puffs_newnode(struct mount *mp, struct v if (error) return error; vp->v_type = type; - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); *vpp = vp; if (PUFFS_USE_NAMECACHE(pmp)) cache_enter(dvp, vp, cnp->cn_nameptr, cnp->cn_namelen, Index: sys/fs/puffs/puffs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/fs/puffs/puffs_vnops.c,v retrieving revision 1.177 diff -p -u -4 -r1.177 puffs_vnops.c --- sys/fs/puffs/puffs_vnops.c 17 Oct 2013 21:03:27 -0000 1.177 +++ sys/fs/puffs/puffs_vnops.c 4 Jan 2014 09:32:26 -0000 @@ -103,10 +103,10 @@ int puffs_vnop_checkop(void *); int (**puffs_vnodeop_p)(void *); const struct vnodeopv_entry_desc puffs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, puffs_vnop_lookup }, /* REAL lookup */ - { &vop_create_desc, puffs_vnop_checkop }, /* create */ - { &vop_mknod_desc, puffs_vnop_checkop }, /* mknod */ + { &vop_create1_desc, puffs_vnop_checkop }, /* create */ + { &vop_mknod1_desc, puffs_vnop_checkop }, /* mknod */ { &vop_open_desc, puffs_vnop_open }, /* REAL open */ { &vop_close_desc, puffs_vnop_checkop }, /* close */ { &vop_access_desc, puffs_vnop_access }, /* REAL access */ { &vop_getattr_desc, puffs_vnop_checkop }, /* getattr */ @@ -117,11 +117,11 @@ const struct vnodeopv_entry_desc puffs_v { &vop_seek_desc, puffs_vnop_checkop }, /* seek */ { &vop_remove_desc, puffs_vnop_checkop }, /* remove */ { &vop_link_desc, puffs_vnop_checkop }, /* link */ { &vop_rename_desc, puffs_vnop_checkop }, /* rename */ - { &vop_mkdir_desc, puffs_vnop_checkop }, /* mkdir */ + { &vop_mkdir1_desc, puffs_vnop_checkop }, /* mkdir */ { &vop_rmdir_desc, puffs_vnop_checkop }, /* rmdir */ - { &vop_symlink_desc, puffs_vnop_checkop }, /* symlink */ + { &vop_symlink1_desc, puffs_vnop_checkop }, /* symlink */ { &vop_readdir_desc, puffs_vnop_checkop }, /* readdir */ { &vop_readlink_desc, puffs_vnop_checkop }, /* readlink */ { &vop_getpages_desc, puffs_vnop_checkop }, /* getpages */ { &vop_putpages_desc, genfs_putpages }, /* REAL putpages */ @@ -158,10 +158,10 @@ const struct vnodeopv_desc puffs_vnodeop int (**puffs_specop_p)(void *); const struct vnodeopv_entry_desc puffs_specop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, spec_lookup }, /* lookup, ENOTDIR */ - { &vop_create_desc, spec_create }, /* genfs_badop */ - { &vop_mknod_desc, spec_mknod }, /* genfs_badop */ + { &vop_create1_desc, spec_create }, /* genfs_badop */ + { &vop_mknod1_desc, spec_mknod }, /* genfs_badop */ { &vop_open_desc, spec_open }, /* spec_open */ { &vop_close_desc, spec_close }, /* spec_close */ { &vop_access_desc, puffs_vnop_checkop }, /* access */ { &vop_getattr_desc, puffs_vnop_checkop }, /* getattr */ @@ -178,11 +178,11 @@ const struct vnodeopv_entry_desc puffs_s { &vop_seek_desc, spec_seek }, /* genfs_nullop */ { &vop_remove_desc, spec_remove }, /* genfs_badop */ { &vop_link_desc, spec_link }, /* genfs_badop */ { &vop_rename_desc, spec_rename }, /* genfs_badop */ - { &vop_mkdir_desc, spec_mkdir }, /* genfs_badop */ + { &vop_mkdir1_desc, spec_mkdir }, /* genfs_badop */ { &vop_rmdir_desc, spec_rmdir }, /* genfs_badop */ - { &vop_symlink_desc, spec_symlink }, /* genfs_badop */ + { &vop_symlink1_desc, spec_symlink }, /* genfs_badop */ { &vop_readdir_desc, spec_readdir }, /* genfs_badop */ { &vop_readlink_desc, spec_readlink }, /* genfs_badop */ { &vop_abortop_desc, spec_abortop }, /* genfs_badop */ { &vop_inactive_desc, puffs_vnop_inactive }, /* REAL inactive */ @@ -215,10 +215,10 @@ const struct vnodeopv_desc puffs_specop_ int (**puffs_fifoop_p)(void *); const struct vnodeopv_entry_desc puffs_fifoop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, vn_fifo_bypass }, /* lookup, ENOTDIR */ - { &vop_create_desc, vn_fifo_bypass }, /* genfs_badop */ - { &vop_mknod_desc, vn_fifo_bypass }, /* genfs_badop */ + { &vop_create1_desc, vn_fifo_bypass }, /* genfs_badop */ + { &vop_mknod1_desc, vn_fifo_bypass }, /* genfs_badop */ { &vop_open_desc, vn_fifo_bypass }, /* open */ { &vop_close_desc, vn_fifo_bypass }, /* close */ { &vop_access_desc, puffs_vnop_checkop }, /* access */ { &vop_getattr_desc, puffs_vnop_checkop }, /* getattr */ @@ -235,11 +235,11 @@ const struct vnodeopv_entry_desc puffs_f { &vop_seek_desc, vn_fifo_bypass }, /* genfs_badop */ { &vop_remove_desc, vn_fifo_bypass }, /* genfs_badop */ { &vop_link_desc, vn_fifo_bypass }, /* genfs_badop */ { &vop_rename_desc, vn_fifo_bypass }, /* genfs_badop */ - { &vop_mkdir_desc, vn_fifo_bypass }, /* genfs_badop */ + { &vop_mkdir1_desc, vn_fifo_bypass }, /* genfs_badop */ { &vop_rmdir_desc, vn_fifo_bypass }, /* genfs_badop */ - { &vop_symlink_desc, vn_fifo_bypass }, /* genfs_badop */ + { &vop_symlink1_desc, vn_fifo_bypass }, /* genfs_badop */ { &vop_readdir_desc, vn_fifo_bypass }, /* genfs_badop */ { &vop_readlink_desc, vn_fifo_bypass }, /* genfs_badop */ { &vop_abortop_desc, vn_fifo_bypass }, /* genfs_badop */ { &vop_inactive_desc, puffs_vnop_inactive }, /* REAL inactive */ @@ -271,10 +271,10 @@ const struct vnodeopv_desc puffs_fifoop_ /* "real" vnode operations */ int (**puffs_msgop_p)(void *); const struct vnodeopv_entry_desc puffs_msgop_entries[] = { { &vop_default_desc, vn_default_error }, - { &vop_create_desc, puffs_vnop_create }, /* create */ - { &vop_mknod_desc, puffs_vnop_mknod }, /* mknod */ + { &vop_create1_desc, puffs_vnop_create }, /* create */ + { &vop_mknod1_desc, puffs_vnop_mknod }, /* mknod */ { &vop_open_desc, puffs_vnop_open }, /* open */ { &vop_close_desc, puffs_vnop_close }, /* close */ { &vop_access_desc, puffs_vnop_access }, /* access */ { &vop_getattr_desc, puffs_vnop_getattr }, /* getattr */ @@ -284,11 +284,11 @@ const struct vnodeopv_entry_desc puffs_m { &vop_seek_desc, puffs_vnop_seek }, /* seek */ { &vop_remove_desc, puffs_vnop_remove }, /* remove */ { &vop_link_desc, puffs_vnop_link }, /* link */ { &vop_rename_desc, puffs_vnop_rename }, /* rename */ - { &vop_mkdir_desc, puffs_vnop_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, puffs_vnop_mkdir }, /* mkdir */ { &vop_rmdir_desc, puffs_vnop_rmdir }, /* rmdir */ - { &vop_symlink_desc, puffs_vnop_symlink }, /* symlink */ + { &vop_symlink1_desc, puffs_vnop_symlink }, /* symlink */ { &vop_readdir_desc, puffs_vnop_readdir }, /* readdir */ { &vop_readlink_desc, puffs_vnop_readlink }, /* readlink */ { &vop_print_desc, puffs_vnop_print }, /* print */ { &vop_islocked_desc, puffs_vnop_islocked }, /* islocked */ Index: sys/fs/smbfs/smbfs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/fs/smbfs/smbfs_vnops.c,v retrieving revision 1.86 diff -p -u -4 -r1.86 smbfs_vnops.c --- sys/fs/smbfs/smbfs_vnops.c 18 Mar 2013 19:35:39 -0000 1.86 +++ sys/fs/smbfs/smbfs_vnops.c 4 Jan 2014 09:32:26 -0000 @@ -125,9 +125,9 @@ static struct vnodeopv_entry_desc smbfs_ { &vop_default_desc, vn_default_error }, { &vop_access_desc, smbfs_access }, { &vop_advlock_desc, smbfs_advlock }, { &vop_close_desc, smbfs_close }, - { &vop_create_desc, smbfs_create }, + { &vop_create1_desc, smbfs_create }, { &vop_fsync_desc, smbfs_fsync }, { &vop_getattr_desc, smbfs_getattr }, { &vop_getpages_desc, genfs_compat_getpages }, { &vop_inactive_desc, smbfs_inactive }, @@ -135,10 +135,10 @@ static struct vnodeopv_entry_desc smbfs_ { &vop_islocked_desc, genfs_islocked }, { &vop_link_desc, smbfs_link }, { &vop_lock_desc, genfs_lock }, { &vop_lookup_desc, smbfs_lookup }, - { &vop_mkdir_desc, smbfs_mkdir }, - { &vop_mknod_desc, genfs_eopnotsupp }, + { &vop_mkdir1_desc, smbfs_mkdir }, + { &vop_mknod1_desc, genfs_eopnotsupp }, { &vop_open_desc, smbfs_open }, { &vop_pathconf_desc, smbfs_pathconf }, { &vop_print_desc, smbfs_print }, { &vop_putpages_desc, genfs_putpages }, @@ -149,9 +149,9 @@ static struct vnodeopv_entry_desc smbfs_ { &vop_rename_desc, smbfs_rename }, { &vop_rmdir_desc, smbfs_rmdir }, { &vop_setattr_desc, smbfs_setattr }, { &vop_strategy_desc, smbfs_strategy }, - { &vop_symlink_desc, smbfs_symlink }, + { &vop_symlink1_desc, smbfs_symlink }, { &vop_unlock_desc, genfs_unlock }, { &vop_write_desc, smbfs_write }, { &vop_mmap_desc, genfs_mmap }, /* mmap */ { &vop_seek_desc, genfs_seek }, /* seek */ @@ -601,8 +601,10 @@ smbfs_create(void *v) error = smbfs_smb_lookup(dnp, name, nmlen, &fattr, &scred); if (error) goto out; error = smbfs_nget(VTOVFS(dvp), dvp, name, nmlen, &fattr, ap->a_vpp); + if (ap->a_vpp != NULL && error == 0) + VOP_UNLOCK(*ap->a_vpp); if (error) goto out; cache_enter(dvp, *ap->a_vpp, cnp->cn_nameptr, cnp->cn_namelen, @@ -804,8 +806,10 @@ smbfs_mkdir(void *v) error = smbfs_smb_lookup(dnp, name, len, &fattr, &scred); if (error) goto out; error = smbfs_nget(VTOVFS(dvp), dvp, name, len, &fattr, &vp); + if (error == 0) + VOP_UNLOCK(vp); if (error) goto out; *ap->a_vpp = vp; Index: sys/fs/sysvbfs/sysvbfs.c =================================================================== RCS file: /cvsroot/src/sys/fs/sysvbfs/sysvbfs.c,v retrieving revision 1.12 diff -p -u -4 -r1.12 sysvbfs.c --- sys/fs/sysvbfs/sysvbfs.c 10 May 2008 02:26:09 -0000 1.12 +++ sys/fs/sysvbfs/sysvbfs.c 4 Jan 2014 09:32:26 -0000 @@ -49,10 +49,10 @@ int (**sysvbfs_vnodeop_p)(void *); /* fi const struct vnodeopv_entry_desc sysvbfs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, sysvbfs_lookup }, /* lookup */ - { &vop_create_desc, sysvbfs_create }, /* create */ - { &vop_mknod_desc, genfs_eopnotsupp }, /* mknod */ + { &vop_create1_desc, sysvbfs_create }, /* create */ + { &vop_mknod1_desc, genfs_eopnotsupp }, /* mknod */ { &vop_open_desc, sysvbfs_open }, /* open */ { &vop_close_desc, sysvbfs_close }, /* close */ { &vop_access_desc, sysvbfs_access }, /* access */ { &vop_getattr_desc, sysvbfs_getattr }, /* getattr */ @@ -69,11 +69,11 @@ const struct vnodeopv_entry_desc sysvbfs { &vop_seek_desc, genfs_seek }, /* seek */ { &vop_remove_desc, sysvbfs_remove }, /* remove */ { &vop_link_desc, genfs_eopnotsupp }, /* link */ { &vop_rename_desc, sysvbfs_rename }, /* rename */ - { &vop_mkdir_desc, genfs_eopnotsupp }, /* mkdir */ + { &vop_mkdir1_desc, genfs_eopnotsupp }, /* mkdir */ { &vop_rmdir_desc, genfs_eopnotsupp }, /* rmdir */ - { &vop_symlink_desc, genfs_eopnotsupp }, /* symlink */ + { &vop_symlink1_desc, genfs_eopnotsupp }, /* symlink */ { &vop_readdir_desc, sysvbfs_readdir }, /* readdir */ { &vop_readlink_desc, genfs_eopnotsupp }, /* readlink */ { &vop_abortop_desc, genfs_abortop }, /* abortop */ { &vop_inactive_desc, sysvbfs_inactive }, /* inactive */ Index: sys/fs/sysvbfs/sysvbfs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/fs/sysvbfs/sysvbfs_vnops.c,v retrieving revision 1.49 diff -p -u -4 -r1.49 sysvbfs_vnops.c --- sys/fs/sysvbfs/sysvbfs_vnops.c 24 Dec 2013 09:56:18 -0000 1.49 +++ sys/fs/sysvbfs/sysvbfs_vnops.c 4 Jan 2014 09:32:26 -0000 @@ -165,8 +165,9 @@ sysvbfs_create(void *arg) bnode = (*a->a_vpp)->v_data; bnode->update_ctime = true; bnode->update_mtime = true; bnode->update_atime = true; + VOP_UNLOCK(*a->a_vpp); unlock_exit: /* unlock parent directory */ vput(a->a_dvp); /* locked at sysvbfs_lookup(); */ Index: sys/fs/tmpfs/tmpfs_fifoops.c =================================================================== RCS file: /cvsroot/src/sys/fs/tmpfs/tmpfs_fifoops.c,v retrieving revision 1.10 diff -p -u -4 -r1.10 tmpfs_fifoops.c --- sys/fs/tmpfs/tmpfs_fifoops.c 23 Nov 2013 16:35:32 -0000 1.10 +++ sys/fs/tmpfs/tmpfs_fifoops.c 4 Jan 2014 09:32:26 -0000 @@ -49,10 +49,10 @@ __KERNEL_RCSID(0, "$NetBSD: tmpfs_fifoop int (**tmpfs_fifoop_p)(void *); const struct vnodeopv_entry_desc tmpfs_fifoop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, tmpfs_fifo_lookup }, - { &vop_create_desc, tmpfs_fifo_create }, - { &vop_mknod_desc, tmpfs_fifo_mknod }, + { &vop_create1_desc, tmpfs_fifo_create }, + { &vop_mknod1_desc, tmpfs_fifo_mknod }, { &vop_open_desc, tmpfs_fifo_open }, { &vop_close_desc, tmpfs_fifo_close }, { &vop_access_desc, tmpfs_fifo_access }, { &vop_getattr_desc, tmpfs_fifo_getattr }, @@ -69,11 +69,11 @@ const struct vnodeopv_entry_desc tmpfs_f { &vop_seek_desc, tmpfs_fifo_seek }, { &vop_remove_desc, tmpfs_fifo_remove }, { &vop_link_desc, tmpfs_fifo_link }, { &vop_rename_desc, tmpfs_fifo_rename }, - { &vop_mkdir_desc, tmpfs_fifo_mkdir }, + { &vop_mkdir1_desc, tmpfs_fifo_mkdir }, { &vop_rmdir_desc, tmpfs_fifo_rmdir }, - { &vop_symlink_desc, tmpfs_fifo_symlink }, + { &vop_symlink1_desc, tmpfs_fifo_symlink }, { &vop_readdir_desc, tmpfs_fifo_readdir }, { &vop_readlink_desc, tmpfs_fifo_readlink }, { &vop_abortop_desc, tmpfs_fifo_abortop }, { &vop_inactive_desc, tmpfs_fifo_inactive }, Index: sys/fs/tmpfs/tmpfs_specops.c =================================================================== RCS file: /cvsroot/src/sys/fs/tmpfs/tmpfs_specops.c,v retrieving revision 1.11 diff -p -u -4 -r1.11 tmpfs_specops.c --- sys/fs/tmpfs/tmpfs_specops.c 23 Nov 2013 16:35:32 -0000 1.11 +++ sys/fs/tmpfs/tmpfs_specops.c 4 Jan 2014 09:32:26 -0000 @@ -52,10 +52,10 @@ int (**tmpfs_specop_p)(void *); const struct vnodeopv_entry_desc tmpfs_specop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, tmpfs_spec_lookup }, - { &vop_create_desc, tmpfs_spec_create }, - { &vop_mknod_desc, tmpfs_spec_mknod }, + { &vop_create1_desc, tmpfs_spec_create }, + { &vop_mknod1_desc, tmpfs_spec_mknod }, { &vop_open_desc, tmpfs_spec_open }, { &vop_close_desc, tmpfs_spec_close }, { &vop_access_desc, tmpfs_spec_access }, { &vop_getattr_desc, tmpfs_spec_getattr }, @@ -72,11 +72,11 @@ const struct vnodeopv_entry_desc tmpfs_s { &vop_seek_desc, tmpfs_spec_seek }, { &vop_remove_desc, tmpfs_spec_remove }, { &vop_link_desc, tmpfs_spec_link }, { &vop_rename_desc, tmpfs_spec_rename }, - { &vop_mkdir_desc, tmpfs_spec_mkdir }, + { &vop_mkdir1_desc, tmpfs_spec_mkdir }, { &vop_rmdir_desc, tmpfs_spec_rmdir }, - { &vop_symlink_desc, tmpfs_spec_symlink }, + { &vop_symlink1_desc, tmpfs_spec_symlink }, { &vop_readdir_desc, tmpfs_spec_readdir }, { &vop_readlink_desc, tmpfs_spec_readlink }, { &vop_abortop_desc, tmpfs_spec_abortop }, { &vop_inactive_desc, tmpfs_spec_inactive }, Index: sys/fs/tmpfs/tmpfs_subr.c =================================================================== RCS file: /cvsroot/src/sys/fs/tmpfs/tmpfs_subr.c,v retrieving revision 1.93 diff -p -u -4 -r1.93 tmpfs_subr.c --- sys/fs/tmpfs/tmpfs_subr.c 3 Jan 2014 09:53:12 -0000 1.93 +++ sys/fs/tmpfs/tmpfs_subr.c 4 Jan 2014 09:32:26 -0000 @@ -423,8 +423,10 @@ tmpfs_construct_node(vnode_t *dvp, vnode /* Update the parent's timestamps. */ tmpfs_update(dvp, TMPFS_UPDATE_MTIME | TMPFS_UPDATE_CTIME); out: + if (vpp != NULL && error == 0) + VOP_UNLOCK(*vpp); vput(dvp); return error; } Index: sys/fs/tmpfs/tmpfs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/fs/tmpfs/tmpfs_vnops.c,v retrieving revision 1.111 diff -p -u -4 -r1.111 tmpfs_vnops.c --- sys/fs/tmpfs/tmpfs_vnops.c 3 Jan 2014 09:53:12 -0000 1.111 +++ sys/fs/tmpfs/tmpfs_vnops.c 4 Jan 2014 09:32:26 -0000 @@ -64,10 +64,10 @@ __KERNEL_RCSID(0, "$NetBSD: tmpfs_vnops. int (**tmpfs_vnodeop_p)(void *); const struct vnodeopv_entry_desc tmpfs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, tmpfs_lookup }, - { &vop_create_desc, tmpfs_create }, - { &vop_mknod_desc, tmpfs_mknod }, + { &vop_create1_desc, tmpfs_create }, + { &vop_mknod1_desc, tmpfs_mknod }, { &vop_open_desc, tmpfs_open }, { &vop_close_desc, tmpfs_close }, { &vop_access_desc, tmpfs_access }, { &vop_getattr_desc, tmpfs_getattr }, @@ -84,11 +84,11 @@ const struct vnodeopv_entry_desc tmpfs_v { &vop_seek_desc, tmpfs_seek }, { &vop_remove_desc, tmpfs_remove }, { &vop_link_desc, tmpfs_link }, { &vop_rename_desc, tmpfs_rename }, - { &vop_mkdir_desc, tmpfs_mkdir }, + { &vop_mkdir1_desc, tmpfs_mkdir }, { &vop_rmdir_desc, tmpfs_rmdir }, - { &vop_symlink_desc, tmpfs_symlink }, + { &vop_symlink1_desc, tmpfs_symlink }, { &vop_readdir_desc, tmpfs_readdir }, { &vop_readlink_desc, tmpfs_readlink }, { &vop_abortop_desc, tmpfs_abortop }, { &vop_inactive_desc, tmpfs_inactive }, Index: sys/fs/udf/udf_subr.c =================================================================== RCS file: /cvsroot/src/sys/fs/udf/udf_subr.c,v retrieving revision 1.122 diff -p -u -4 -r1.122 udf_subr.c --- sys/fs/udf/udf_subr.c 21 Nov 2013 23:42:09 -0000 1.122 +++ sys/fs/udf/udf_subr.c 4 Jan 2014 09:32:27 -0000 @@ -5780,19 +5780,14 @@ udf_create_node_raw(struct vnode *dvp, s error = getnewvnode(VT_UDF, ump->vfs_mountp, vnodeops, NULL, &nvp); if (error) return error; - /* lock node */ - error = vn_lock(nvp, LK_EXCLUSIVE | LK_RETRY); - if (error) - goto error_out_unget; - /* reserve space for one logical block */ vpart_num = ump->node_part; error = udf_reserve_space(ump, NULL, UDF_C_NODE, vpart_num, 1, /* can_fail */ true); if (error) - goto error_out_unlock; + goto error_out_unget; /* allocate node */ error = udf_allocate_space(ump, NULL, UDF_C_NODE, vpart_num, 1, &lmapping); @@ -5875,9 +5870,9 @@ udf_create_node_raw(struct vnode *dvp, s udf_free_allocated_space(ump, lb_num, vpart_num, 1); /* recycle udf_node */ udf_dispose_node(udf_node); - vput(nvp); + vrele(nvp); *vpp = NULL; return error; } @@ -5892,11 +5887,8 @@ udf_create_node_raw(struct vnode *dvp, s error_out_unreserve: udf_do_unreserve_space(ump, NULL, vpart_num, 1); -error_out_unlock: - VOP_UNLOCK(nvp); - error_out_unget: nvp->v_data = NULL; ungetnewvnode(nvp); Index: sys/fs/udf/udf_vnops.c =================================================================== RCS file: /cvsroot/src/sys/fs/udf/udf_vnops.c,v retrieving revision 1.87 diff -p -u -4 -r1.87 udf_vnops.c --- sys/fs/udf/udf_vnops.c 18 Oct 2013 19:56:55 -0000 1.87 +++ sys/fs/udf/udf_vnops.c 4 Jan 2014 09:32:27 -0000 @@ -2134,10 +2134,10 @@ int (**udf_vnodeop_p)(void *); const struct vnodeopv_entry_desc udf_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, udf_lookup }, /* lookup */ - { &vop_create_desc, udf_create }, /* create */ - { &vop_mknod_desc, udf_mknod }, /* mknod */ /* TODO */ + { &vop_create1_desc, udf_create }, /* create */ + { &vop_mknod1_desc, udf_mknod }, /* mknod */ /* TODO */ { &vop_open_desc, udf_open }, /* open */ { &vop_close_desc, udf_close }, /* close */ { &vop_access_desc, udf_access }, /* access */ { &vop_getattr_desc, udf_getattr }, /* getattr */ @@ -2154,11 +2154,11 @@ const struct vnodeopv_entry_desc udf_vno { &vop_seek_desc, genfs_seek }, /* seek */ { &vop_remove_desc, udf_remove }, /* remove */ { &vop_link_desc, udf_link }, /* link */ /* TODO */ { &vop_rename_desc, udf_rename }, /* rename */ /* TODO */ - { &vop_mkdir_desc, udf_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, udf_mkdir }, /* mkdir */ { &vop_rmdir_desc, udf_rmdir }, /* rmdir */ - { &vop_symlink_desc, udf_symlink }, /* symlink */ /* TODO */ + { &vop_symlink1_desc, udf_symlink }, /* symlink */ /* TODO */ { &vop_readdir_desc, udf_readdir }, /* readdir */ { &vop_readlink_desc, udf_readlink }, /* readlink */ /* TEST ME */ { &vop_abortop_desc, genfs_abortop }, /* abortop */ /* TODO/OK? */ { &vop_inactive_desc, udf_inactive }, /* inactive */ Index: sys/fs/union/union_subr.c =================================================================== RCS file: /cvsroot/src/sys/fs/union/union_subr.c,v retrieving revision 1.57 diff -p -u -4 -r1.57 union_subr.c --- sys/fs/union/union_subr.c 17 Oct 2013 21:03:50 -0000 1.57 +++ sys/fs/union/union_subr.c 4 Jan 2014 09:32:27 -0000 @@ -933,8 +933,9 @@ union_vn_create(struct vnode **vpp, stru error = VOP_CREATE(un->un_dirvp, &vp, &cn, vap); if (error) return error; + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); error = VOP_OPEN(vp, fmode, cred); if (error) { vput(vp); return error; Index: sys/fs/union/union_vnops.c =================================================================== RCS file: /cvsroot/src/sys/fs/union/union_vnops.c,v retrieving revision 1.49 diff -p -u -4 -r1.49 union_vnops.c --- sys/fs/union/union_vnops.c 21 Nov 2011 18:29:22 -0000 1.49 +++ sys/fs/union/union_vnops.c 4 Jan 2014 09:32:27 -0000 @@ -144,11 +144,11 @@ static int union_lookup1(struct vnode *, int (**union_vnodeop_p)(void *); const struct vnodeopv_entry_desc union_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, union_lookup }, /* lookup */ - { &vop_create_desc, union_create }, /* create */ + { &vop_create1_desc, union_create }, /* create */ { &vop_whiteout_desc, union_whiteout }, /* whiteout */ - { &vop_mknod_desc, union_mknod }, /* mknod */ + { &vop_mknod1_desc, union_mknod }, /* mknod */ { &vop_open_desc, union_open }, /* open */ { &vop_close_desc, union_close }, /* close */ { &vop_access_desc, union_access }, /* access */ { &vop_getattr_desc, union_getattr }, /* getattr */ @@ -163,11 +163,11 @@ const struct vnodeopv_entry_desc union_v { &vop_seek_desc, union_seek }, /* seek */ { &vop_remove_desc, union_remove }, /* remove */ { &vop_link_desc, union_link }, /* link */ { &vop_rename_desc, union_rename }, /* rename */ - { &vop_mkdir_desc, union_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, union_mkdir }, /* mkdir */ { &vop_rmdir_desc, union_rmdir }, /* rmdir */ - { &vop_symlink_desc, union_symlink }, /* symlink */ + { &vop_symlink1_desc, union_symlink }, /* symlink */ { &vop_readdir_desc, union_readdir }, /* readdir */ { &vop_readlink_desc, union_readlink }, /* readlink */ { &vop_abortop_desc, union_abortop }, /* abortop */ { &vop_inactive_desc, union_inactive }, /* inactive */ @@ -447,8 +447,13 @@ start: if (upperdvp) { VOP_UNLOCK(upperdvp); uerror = union_mkshadow(um, upperdvp, cnp, &uppervp); + /* + * XXX: lock upper node until lookup returns + * unlocked nodes. + */ + vn_lock(uppervp, LK_EXCLUSIVE | LK_RETRY); vn_lock(upperdvp, LK_EXCLUSIVE | LK_RETRY); if (uerror == 0 && cnp->cn_nameiop != LOOKUP) { vput(uppervp); if (lowervp != NULLVP) @@ -507,12 +512,15 @@ union_create(void *v) error = VOP_CREATE(dvp, &vp, cnp, ap->a_vap); if (error) return (error); + /* XXX: lock upper node until lookup returns unlocked nodes. */ + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); error = union_allocvp(ap->a_vpp, mp, NULLVP, NULLVP, cnp, vp, NULLVP, 1); + VOP_UNLOCK(vp); if (error) - vput(vp); + vrele(vp); return (error); } vput(ap->a_dvp); @@ -561,12 +569,15 @@ union_mknod(void *v) error = VOP_MKNOD(dvp, &vp, cnp, ap->a_vap); if (error) return (error); + /* XXX: lock upper node until lookup returns unlocked nodes. */ + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); error = union_allocvp(ap->a_vpp, mp, NULLVP, NULLVP, cnp, vp, NULLVP, 1); + VOP_UNLOCK(vp); if (error) - vput(vp); + vrele(vp); return (error); } vput(ap->a_dvp); @@ -1371,12 +1382,15 @@ union_mkdir(void *v) vrele(ap->a_dvp); return (error); } + /* XXX: lock upper node until lookup returns unlocked nodes. */ + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); error = union_allocvp(ap->a_vpp, ap->a_dvp->v_mount, ap->a_dvp, NULLVP, cnp, vp, NULLVP, 1); + VOP_UNLOCK(vp); if (error) - vput(vp); + vrele(vp); vrele(ap->a_dvp); return (error); } Index: sys/fs/unionfs/unionfs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/fs/unionfs/unionfs_vnops.c,v retrieving revision 1.7 diff -p -u -4 -r1.7 unionfs_vnops.c --- sys/fs/unionfs/unionfs_vnops.c 5 Nov 2012 17:27:39 -0000 1.7 +++ sys/fs/unionfs/unionfs_vnops.c 4 Jan 2014 09:32:27 -0000 @@ -1809,11 +1809,11 @@ unionfs_revoke(void *v) int (**unionfs_vnodeop_p)(void *); const struct vnodeopv_entry_desc unionfs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, unionfs_lookup }, /* lookup */ - { &vop_create_desc, unionfs_create }, /* create */ + { &vop_create1_desc, unionfs_create }, /* create */ { &vop_whiteout_desc, unionfs_whiteout }, /* whiteout */ - { &vop_mknod_desc, unionfs_mknod }, /* mknod */ + { &vop_mknod1_desc, unionfs_mknod }, /* mknod */ { &vop_open_desc, unionfs_open }, /* open */ { &vop_close_desc, unionfs_close }, /* close */ { &vop_access_desc, unionfs_access }, /* access */ { &vop_getattr_desc, unionfs_getattr }, /* getattr */ @@ -1828,11 +1828,11 @@ const struct vnodeopv_entry_desc unionfs { &vop_seek_desc, unionfs_seek }, /* seek */ { &vop_remove_desc, unionfs_remove }, /* remove */ { &vop_link_desc, unionfs_link }, /* link */ { &vop_rename_desc, unionfs_rename }, /* rename */ - { &vop_mkdir_desc, unionfs_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, unionfs_mkdir }, /* mkdir */ { &vop_rmdir_desc, unionfs_rmdir }, /* rmdir */ - { &vop_symlink_desc, unionfs_symlink }, /* symlink */ + { &vop_symlink1_desc, unionfs_symlink }, /* symlink */ { &vop_readdir_desc, unionfs_readdir }, /* readdir */ { &vop_readlink_desc, unionfs_readlink }, /* readlink */ { &vop_abortop_desc, unionfs_abortop }, /* abortop */ { &vop_inactive_desc, unionfs_inactive }, /* inactive */ Index: sys/fs/v7fs/v7fs_extern.c =================================================================== RCS file: /cvsroot/src/sys/fs/v7fs/v7fs_extern.c,v retrieving revision 1.1 diff -p -u -4 -r1.1 v7fs_extern.c --- sys/fs/v7fs/v7fs_extern.c 27 Jun 2011 11:52:24 -0000 1.1 +++ sys/fs/v7fs/v7fs_extern.c 4 Jan 2014 09:32:27 -0000 @@ -55,10 +55,10 @@ int (**v7fs_vnodeop_p)(void *); /* fille const struct vnodeopv_entry_desc v7fs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, v7fs_lookup }, /* lookup */ - { &vop_create_desc, v7fs_create }, /* create */ - { &vop_mknod_desc, v7fs_mknod }, /* mknod */ + { &vop_create1_desc, v7fs_create }, /* create */ + { &vop_mknod1_desc, v7fs_mknod }, /* mknod */ { &vop_open_desc, v7fs_open }, /* open */ { &vop_close_desc, v7fs_close }, /* close */ { &vop_access_desc, v7fs_access }, /* access */ { &vop_getattr_desc, v7fs_getattr }, /* getattr */ @@ -75,11 +75,11 @@ const struct vnodeopv_entry_desc v7fs_vn { &vop_seek_desc, genfs_seek }, /* seek */ { &vop_remove_desc, v7fs_remove }, /* remove */ { &vop_link_desc, v7fs_link }, /* link */ { &vop_rename_desc, v7fs_rename }, /* rename */ - { &vop_mkdir_desc, v7fs_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, v7fs_mkdir }, /* mkdir */ { &vop_rmdir_desc, v7fs_rmdir }, /* rmdir */ - { &vop_symlink_desc, v7fs_symlink }, /* symlink */ + { &vop_symlink1_desc, v7fs_symlink }, /* symlink */ { &vop_readdir_desc, v7fs_readdir }, /* readdir */ { &vop_readlink_desc, v7fs_readlink }, /* readlink */ { &vop_abortop_desc, genfs_abortop }, /* abortop */ { &vop_inactive_desc, v7fs_inactive }, /* inactive */ @@ -102,10 +102,10 @@ const struct vnodeopv_entry_desc v7fs_vn int (**v7fs_specop_p)(void *); const struct vnodeopv_entry_desc v7fs_specop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, spec_lookup }, /* lookup */ - { &vop_create_desc, spec_create }, /* create xxx*/ - { &vop_mknod_desc, spec_mknod }, /* mknod xxx*/ + { &vop_create1_desc, spec_create }, /* create xxx*/ + { &vop_mknod1_desc, spec_mknod }, /* mknod xxx*/ { &vop_open_desc, spec_open }, /* open */ { &vop_close_desc, spec_close }, /* close */ { &vop_access_desc, v7fs_access }, /* access */ { &vop_getattr_desc, v7fs_getattr }, /* getattr */ @@ -122,11 +122,11 @@ const struct vnodeopv_entry_desc v7fs_sp { &vop_seek_desc, spec_seek }, /* seek */ { &vop_remove_desc, spec_remove }, /* remove */ { &vop_link_desc, spec_link }, /* link */ { &vop_rename_desc, spec_rename }, /* rename */ - { &vop_mkdir_desc, spec_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, spec_mkdir }, /* mkdir */ { &vop_rmdir_desc, spec_rmdir }, /* rmdir */ - { &vop_symlink_desc, spec_symlink }, /* symlink */ + { &vop_symlink1_desc, spec_symlink }, /* symlink */ { &vop_readdir_desc, spec_readdir }, /* readdir */ { &vop_readlink_desc, spec_readlink }, /* readlink */ { &vop_abortop_desc, spec_abortop }, /* abortop */ { &vop_inactive_desc, v7fs_inactive }, /* inactive */ @@ -148,10 +148,10 @@ const struct vnodeopv_entry_desc v7fs_sp int (**v7fs_fifoop_p)(void *); const struct vnodeopv_entry_desc v7fs_fifoop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, vn_fifo_bypass }, /* lookup */ - { &vop_create_desc, vn_fifo_bypass }, /* create */ - { &vop_mknod_desc, vn_fifo_bypass }, /* mknod */ + { &vop_create1_desc, vn_fifo_bypass }, /* create */ + { &vop_mknod1_desc, vn_fifo_bypass }, /* mknod */ { &vop_open_desc, vn_fifo_bypass }, /* open */ { &vop_close_desc, vn_fifo_bypass }, /* close */ { &vop_access_desc, v7fs_access }, /* access */ { &vop_getattr_desc, v7fs_getattr }, /* getattr */ @@ -168,11 +168,11 @@ const struct vnodeopv_entry_desc v7fs_fi { &vop_seek_desc, vn_fifo_bypass }, /* seek */ { &vop_remove_desc, vn_fifo_bypass }, /* remove */ { &vop_link_desc, vn_fifo_bypass }, /* link */ { &vop_rename_desc, vn_fifo_bypass }, /* rename */ - { &vop_mkdir_desc, vn_fifo_bypass }, /* mkdir */ + { &vop_mkdir1_desc, vn_fifo_bypass }, /* mkdir */ { &vop_rmdir_desc, vn_fifo_bypass }, /* rmdir */ - { &vop_symlink_desc, vn_fifo_bypass }, /* symlink */ + { &vop_symlink1_desc, vn_fifo_bypass }, /* symlink */ { &vop_readdir_desc, vn_fifo_bypass }, /* readdir */ { &vop_readlink_desc, vn_fifo_bypass }, /* readlink */ { &vop_abortop_desc, vn_fifo_bypass }, /* abortop */ { &vop_inactive_desc, v7fs_inactive }, /* inactive */ Index: sys/fs/v7fs/v7fs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/fs/v7fs/v7fs_vnops.c,v retrieving revision 1.13 diff -p -u -4 -r1.13 v7fs_vnops.c --- sys/fs/v7fs/v7fs_vnops.c 20 Nov 2013 23:44:23 -0000 1.13 +++ sys/fs/v7fs/v7fs_vnops.c 4 Jan 2014 09:32:27 -0000 @@ -238,8 +238,10 @@ v7fs_create(void *v) newnode->update_atime = true; DPRINTF("allocated %s->#%d\n", a->a_cnp->cn_nameptr, ino); unlock_exit: + if (a->a_vpp != NULL && error == 0) + VOP_UNLOCK(*a->a_vpp); /* unlock parent directory */ vput(a->a_dvp); /* locked at v7fs_lookup(); */ return error; @@ -290,8 +292,10 @@ v7fs_mknod(void *v) newnode->update_mtime = true; newnode->update_atime = true; unlock_exit: + if (a->a_vpp != NULL && error == 0) + VOP_UNLOCK(*a->a_vpp); vput(dvp); return error; } @@ -848,8 +852,10 @@ v7fs_mkdir(void *v) newnode->update_mtime = true; newnode->update_atime = true; unlock_exit: + if (a->a_vpp != NULL && error == 0) + VOP_UNLOCK(*a->a_vpp); vput(dvp); return error; } @@ -1285,8 +1291,10 @@ v7fs_symlink(void *v) newnode->update_ctime = true; newnode->update_mtime = true; newnode->update_atime = true; unlock_exit: + if (a->a_vpp != NULL && error == 0) + VOP_UNLOCK(*a->a_vpp); /* unlock parent directory */ vput(a->a_dvp); return error; Index: sys/kern/uipc_usrreq.c =================================================================== RCS file: /cvsroot/src/sys/kern/uipc_usrreq.c,v retrieving revision 1.148 diff -p -u -4 -r1.148 uipc_usrreq.c --- sys/kern/uipc_usrreq.c 29 Oct 2013 09:53:51 -0000 1.148 +++ sys/kern/uipc_usrreq.c 4 Jan 2014 09:32:27 -0000 @@ -965,8 +965,9 @@ unp_bind(struct socket *so, struct mbuf pathbuf_destroy(pb); goto bad; } vp = nd.ni_vp; + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); solock(so); vp->v_socket = unp->unp_socket; unp->unp_vnode = vp; unp->unp_addrlen = addrlen; Index: sys/kern/vfs_syscalls.c =================================================================== RCS file: /cvsroot/src/sys/kern/vfs_syscalls.c,v retrieving revision 1.471 diff -p -u -4 -r1.471 vfs_syscalls.c --- sys/kern/vfs_syscalls.c 27 Nov 2013 17:24:44 -0000 1.471 +++ sys/kern/vfs_syscalls.c 4 Jan 2014 09:32:28 -0000 @@ -2252,16 +2252,16 @@ do_sys_mknodat(struct lwp *l, int fdat, case VOP_MKNOD_DESCOFFSET: error = VOP_MKNOD(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr); if (error == 0) - vput(nd.ni_vp); + vrele(nd.ni_vp); break; case VOP_CREATE_DESCOFFSET: error = VOP_CREATE(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr); if (error == 0) - vput(nd.ni_vp); + vrele(nd.ni_vp); break; } } else { VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); @@ -2340,9 +2340,9 @@ do_sys_mkfifoat(struct lwp *l, int fdat, /* We will read cwdi->cwdi_cmask unlocked. */ vattr.va_mode = (mode & ALLPERMS) &~ p->p_cwdi->cwdi_cmask; error = VOP_MKNOD(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr); if (error == 0) - vput(nd.ni_vp); + vrele(nd.ni_vp); pathbuf_destroy(pb); return (error); } @@ -2497,9 +2497,9 @@ do_sys_symlinkat(struct lwp *l, const ch /* We will read cwdi->cwdi_cmask unlocked. */ vattr.va_mode = ACCESSPERMS &~ p->p_cwdi->cwdi_cmask; error = VOP_SYMLINK(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr, path); if (error == 0) - vput(nd.ni_vp); + vrele(nd.ni_vp); out2: pathbuf_destroy(linkpb); out1: PNBUF_PUT(path); @@ -4556,9 +4556,9 @@ do_sys_mkdirat(struct lwp *l, int fdat, /* We will read cwdi->cwdi_cmask unlocked. */ vattr.va_mode = (mode & ACCESSPERMS) &~ p->p_cwdi->cwdi_cmask; error = VOP_MKDIR(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr); if (!error) - vput(nd.ni_vp); + vrele(nd.ni_vp); pathbuf_destroy(pb); return (error); } Index: sys/kern/vfs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/kern/vfs_vnops.c,v retrieving revision 1.186 diff -p -u -4 -r1.186 vfs_vnops.c --- sys/kern/vfs_vnops.c 12 Nov 2012 11:00:07 -0000 1.186 +++ sys/kern/vfs_vnops.c 4 Jan 2014 09:32:28 -0000 @@ -187,8 +187,9 @@ vn_open(struct nameidata *ndp, int fmode if (error) goto out; fmode &= ~O_TRUNC; vp = ndp->ni_vp; + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); } else { VOP_ABORTOP(ndp->ni_dvp, &ndp->ni_cnd); if (ndp->ni_dvp == ndp->ni_vp) vrele(ndp->ni_dvp); Index: sys/kern/vnode_if.c =================================================================== RCS file: /cvsroot/src/sys/kern/vnode_if.c,v retrieving revision 1.89 diff -p -u -4 -r1.89 vnode_if.c --- sys/kern/vnode_if.c 17 Jul 2013 21:21:34 -0000 1.89 +++ sys/kern/vnode_if.c 4 Jan 2014 09:32:28 -0000 @@ -1,5 +1,5 @@ -/* $NetBSD: vnode_if.c,v 1.89 2013/07/17 21:21:34 pooka Exp $ */ +/* $NetBSD$ */ /* * Warning: DO NOT EDIT! This file is automatically generated! * (Modifications made here may easily be lost!) @@ -39,9 +39,9 @@ * SUCH DAMAGE. */ #include -__KERNEL_RCSID(0, "$NetBSD: vnode_if.c,v 1.89 2013/07/17 21:21:34 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD$"); #include #include #include @@ -129,9 +129,9 @@ VOP_LOOKUP(struct vnode *dvp, const int vop_create_vp_offsets[] = { VOPARG_OFFSETOF(struct vop_create_args,a_dvp), VDESC_NO_OFFSET }; -const struct vnodeop_desc vop_create_desc = { +const struct vnodeop_desc vop_create1_desc = { VOP_CREATE_DESCOFFSET, "vop_create", 0 | VDESC_VP0_WILLPUT, vop_create_vp_offsets, @@ -147,16 +147,16 @@ VOP_CREATE(struct vnode *dvp, { int error; bool mpsafe; struct vop_create_args a; - a.a_desc = VDESC(vop_create); + a.a_desc = VDESC(vop_create1); a.a_dvp = dvp; a.a_vpp = vpp; a.a_cnp = cnp; a.a_vap = vap; mpsafe = (dvp->v_vflag & VV_MPSAFE); if (!mpsafe) { KERNEL_LOCK(1, curlwp); } - error = (VCALL(dvp, VOFFSET(vop_create), &a)); + error = (VCALL(dvp, VOFFSET(vop_create1), &a)); if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); } #ifdef DIAGNOSTIC if (error == 0) KASSERT((*vpp)->v_size != VSIZENOTSET @@ -168,9 +168,9 @@ VOP_CREATE(struct vnode *dvp, const int vop_mknod_vp_offsets[] = { VOPARG_OFFSETOF(struct vop_mknod_args,a_dvp), VDESC_NO_OFFSET }; -const struct vnodeop_desc vop_mknod_desc = { +const struct vnodeop_desc vop_mknod1_desc = { VOP_MKNOD_DESCOFFSET, "vop_mknod", 0 | VDESC_VP0_WILLPUT, vop_mknod_vp_offsets, @@ -186,16 +186,16 @@ VOP_MKNOD(struct vnode *dvp, { int error; bool mpsafe; struct vop_mknod_args a; - a.a_desc = VDESC(vop_mknod); + a.a_desc = VDESC(vop_mknod1); a.a_dvp = dvp; a.a_vpp = vpp; a.a_cnp = cnp; a.a_vap = vap; mpsafe = (dvp->v_vflag & VV_MPSAFE); if (!mpsafe) { KERNEL_LOCK(1, curlwp); } - error = (VCALL(dvp, VOFFSET(vop_mknod), &a)); + error = (VCALL(dvp, VOFFSET(vop_mknod1), &a)); if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); } #ifdef DIAGNOSTIC if (error == 0) KASSERT((*vpp)->v_size != VSIZENOTSET @@ -806,9 +806,9 @@ VOP_RENAME(struct vnode *fdvp, const int vop_mkdir_vp_offsets[] = { VOPARG_OFFSETOF(struct vop_mkdir_args,a_dvp), VDESC_NO_OFFSET }; -const struct vnodeop_desc vop_mkdir_desc = { +const struct vnodeop_desc vop_mkdir1_desc = { VOP_MKDIR_DESCOFFSET, "vop_mkdir", 0 | VDESC_VP0_WILLPUT, vop_mkdir_vp_offsets, @@ -824,16 +824,16 @@ VOP_MKDIR(struct vnode *dvp, { int error; bool mpsafe; struct vop_mkdir_args a; - a.a_desc = VDESC(vop_mkdir); + a.a_desc = VDESC(vop_mkdir1); a.a_dvp = dvp; a.a_vpp = vpp; a.a_cnp = cnp; a.a_vap = vap; mpsafe = (dvp->v_vflag & VV_MPSAFE); if (!mpsafe) { KERNEL_LOCK(1, curlwp); } - error = (VCALL(dvp, VOFFSET(vop_mkdir), &a)); + error = (VCALL(dvp, VOFFSET(vop_mkdir1), &a)); if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); } #ifdef DIAGNOSTIC if (error == 0) KASSERT((*vpp)->v_size != VSIZENOTSET @@ -878,9 +878,9 @@ VOP_RMDIR(struct vnode *dvp, const int vop_symlink_vp_offsets[] = { VOPARG_OFFSETOF(struct vop_symlink_args,a_dvp), VDESC_NO_OFFSET }; -const struct vnodeop_desc vop_symlink_desc = { +const struct vnodeop_desc vop_symlink1_desc = { VOP_SYMLINK_DESCOFFSET, "vop_symlink", 0 | VDESC_VP0_WILLPUT, vop_symlink_vp_offsets, @@ -897,17 +897,17 @@ VOP_SYMLINK(struct vnode *dvp, { int error; bool mpsafe; struct vop_symlink_args a; - a.a_desc = VDESC(vop_symlink); + a.a_desc = VDESC(vop_symlink1); a.a_dvp = dvp; a.a_vpp = vpp; a.a_cnp = cnp; a.a_vap = vap; a.a_target = target; mpsafe = (dvp->v_vflag & VV_MPSAFE); if (!mpsafe) { KERNEL_LOCK(1, curlwp); } - error = (VCALL(dvp, VOFFSET(vop_symlink), &a)); + error = (VCALL(dvp, VOFFSET(vop_symlink1), &a)); if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); } #ifdef DIAGNOSTIC if (error == 0) KASSERT((*vpp)->v_size != VSIZENOTSET @@ -1642,10 +1642,10 @@ const struct vnodeop_desc * const vfs_op &vop_default_desc, /* MUST BE FIRST */ &vop_bwrite_desc, &vop_lookup_desc, - &vop_create_desc, - &vop_mknod_desc, + &vop_create1_desc, + &vop_mknod1_desc, &vop_open_desc, &vop_close_desc, &vop_access_desc, &vop_getattr_desc, @@ -1662,11 +1662,11 @@ const struct vnodeop_desc * const vfs_op &vop_seek_desc, &vop_remove_desc, &vop_link_desc, &vop_rename_desc, - &vop_mkdir_desc, + &vop_mkdir1_desc, &vop_rmdir_desc, - &vop_symlink_desc, + &vop_symlink1_desc, &vop_readdir_desc, &vop_readlink_desc, &vop_abortop_desc, &vop_inactive_desc, Index: sys/kern/vnode_if.sh =================================================================== RCS file: /cvsroot/src/sys/kern/vnode_if.sh,v retrieving revision 1.59 diff -p -u -4 -r1.59 vnode_if.sh --- sys/kern/vnode_if.sh 17 Jul 2013 21:20:53 -0000 1.59 +++ sys/kern/vnode_if.sh 4 Jan 2014 09:32:28 -0000 @@ -96,8 +96,9 @@ awk_parser=' /^#/ { next; } # First line of description /^vop_/ { name=$1; + desc_name=$1; argc=0; willmake=-1; next; } @@ -107,8 +108,13 @@ awk_parser=' next; } # Middle lines of description { + if ($1 == "VERSION") { + desc_name=desc_name $2; + next; + } + argdir[argc] = $1; i=2; if ($2 == "LOCKED=YES") { lockstate[argc] = 1; @@ -227,9 +233,9 @@ function doit() { for (i=0; iv_vflag & VV_MPSAFE);\n", argname[0]); printf("\tif (!mpsafe) { KERNEL_LOCK(1, curlwp); }\n"); printf("\terror = (VCALL(%s, VOFFSET(%s), &a));\n", - argname[0], name); + argname[0], desc_name); printf("\tif (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }\n"); if (willmake != -1) { printf("#ifdef DIAGNOSTIC\n"); printf("\tif (error == 0)\n" \ @@ -468,9 +474,9 @@ const struct vnodeop_desc * const ${rump # Body stuff sed -e "$sed_prep" $src | $awk -v rump=${rump} ' function doit() { - printf("\t&%s_desc,\n", name); + printf("\t&%s_desc,\n", desc_name); } '"$awk_parser" # End stuff Index: sys/kern/vnode_if.src =================================================================== RCS file: /cvsroot/src/sys/kern/vnode_if.src,v retrieving revision 1.63 diff -p -u -4 -r1.63 vnode_if.src --- sys/kern/vnode_if.src 14 Oct 2011 09:23:31 -0000 1.63 +++ sys/kern/vnode_if.src 4 Jan 2014 09:32:28 -0000 @@ -88,26 +88,28 @@ vop_lookup { }; # #% create dvp L U U -#% create vpp - L - +#% create vpp - U - # #! create cnp CREATE, LOCKPARENT # vop_create { + VERSION 1 IN LOCKED=YES WILLPUT struct vnode *dvp; OUT WILLMAKE struct vnode **vpp; IN struct componentname *cnp; IN struct vattr *vap; }; # #% mknod dvp L U U -#% mknod vpp - L - +#% mknod vpp - U - # #! mknod cnp CREATE, LOCKPARENT # vop_mknod { + VERSION 1 IN LOCKED=YES WILLPUT struct vnode *dvp; OUT WILLMAKE struct vnode **vpp; IN struct componentname *cnp; IN struct vattr *vap; @@ -298,13 +300,14 @@ vop_rename { }; # #% mkdir dvp L U U -#% mkdir vpp - L - +#% mkdir vpp - U - # #! mkdir cnp CREATE, LOCKPARENT # vop_mkdir { + VERSION 1 IN LOCKED=YES WILLPUT struct vnode *dvp; OUT WILLMAKE struct vnode **vpp; IN struct componentname *cnp; IN struct vattr *vap; @@ -323,13 +326,14 @@ vop_rmdir { }; # #% symlink dvp L U U -#% symlink vpp - L - +#% symlink vpp - U - # #! symlink cnp CREATE, LOCKPARENT # vop_symlink { + VERSION 1 IN LOCKED=YES WILLPUT struct vnode *dvp; OUT WILLMAKE struct vnode **vpp; IN struct componentname *cnp; IN struct vattr *vap; Index: sys/miscfs/deadfs/dead_vnops.c =================================================================== RCS file: /cvsroot/src/sys/miscfs/deadfs/dead_vnops.c,v retrieving revision 1.52 diff -p -u -4 -r1.52 dead_vnops.c --- sys/miscfs/deadfs/dead_vnops.c 7 Nov 2013 09:45:53 -0000 1.52 +++ sys/miscfs/deadfs/dead_vnops.c 4 Jan 2014 09:32:28 -0000 @@ -86,10 +86,10 @@ int (**dead_vnodeop_p)(void *); const struct vnodeopv_entry_desc dead_vnodeop_entries[] = { { &vop_default_desc, dead_default_error }, { &vop_bwrite_desc, dead_bwrite }, /* bwrite */ { &vop_lookup_desc, dead_lookup }, /* lookup */ - { &vop_create_desc, dead_create }, /* create */ - { &vop_mknod_desc, dead_mknod }, /* mknod */ + { &vop_create1_desc, dead_create }, /* create */ + { &vop_mknod1_desc, dead_mknod }, /* mknod */ { &vop_open_desc, dead_open }, /* open */ { &vop_close_desc, dead_close }, /* close */ { &vop_read_desc, dead_read }, /* read */ { &vop_write_desc, dead_write }, /* write */ @@ -98,11 +98,11 @@ const struct vnodeopv_entry_desc dead_vn { &vop_poll_desc, dead_poll }, /* poll */ { &vop_remove_desc, dead_remove }, /* remove */ { &vop_link_desc, dead_link }, /* link */ { &vop_rename_desc, dead_rename }, /* rename */ - { &vop_mkdir_desc, dead_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, dead_mkdir }, /* mkdir */ { &vop_rmdir_desc, dead_rmdir }, /* rmdir */ - { &vop_symlink_desc, dead_symlink }, /* symlink */ + { &vop_symlink1_desc, dead_symlink }, /* symlink */ { &vop_fsync_desc, dead_fsync }, /* fsync */ { &vop_seek_desc, dead_seek }, /* seek */ { &vop_inactive_desc, dead_inactive }, /* inactive */ { &vop_reclaim_desc, dead_reclaim }, /* reclaim */ Index: sys/miscfs/fdesc/fdesc_vnops.c =================================================================== RCS file: /cvsroot/src/sys/miscfs/fdesc/fdesc_vnops.c,v retrieving revision 1.114 diff -p -u -4 -r1.114 fdesc_vnops.c --- sys/miscfs/fdesc/fdesc_vnops.c 16 Oct 2011 12:26:16 -0000 1.114 +++ sys/miscfs/fdesc/fdesc_vnops.c 4 Jan 2014 09:32:28 -0000 @@ -129,10 +129,10 @@ static int fdesc_attr(int, struct vattr int (**fdesc_vnodeop_p)(void *); const struct vnodeopv_entry_desc fdesc_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, fdesc_lookup }, /* lookup */ - { &vop_create_desc, fdesc_create }, /* create */ - { &vop_mknod_desc, fdesc_mknod }, /* mknod */ + { &vop_create1_desc, fdesc_create }, /* create */ + { &vop_mknod1_desc, fdesc_mknod }, /* mknod */ { &vop_open_desc, fdesc_open }, /* open */ { &vop_close_desc, fdesc_close }, /* close */ { &vop_access_desc, fdesc_access }, /* access */ { &vop_getattr_desc, fdesc_getattr }, /* getattr */ @@ -149,11 +149,11 @@ const struct vnodeopv_entry_desc fdesc_v { &vop_seek_desc, fdesc_seek }, /* seek */ { &vop_remove_desc, fdesc_remove }, /* remove */ { &vop_link_desc, fdesc_link }, /* link */ { &vop_rename_desc, fdesc_rename }, /* rename */ - { &vop_mkdir_desc, fdesc_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, fdesc_mkdir }, /* mkdir */ { &vop_rmdir_desc, fdesc_rmdir }, /* rmdir */ - { &vop_symlink_desc, fdesc_symlink }, /* symlink */ + { &vop_symlink1_desc, fdesc_symlink }, /* symlink */ { &vop_readdir_desc, fdesc_readdir }, /* readdir */ { &vop_readlink_desc, fdesc_readlink }, /* readlink */ { &vop_abortop_desc, fdesc_abortop }, /* abortop */ { &vop_inactive_desc, fdesc_inactive }, /* inactive */ Index: sys/miscfs/fifofs/fifo_vnops.c =================================================================== RCS file: /cvsroot/src/sys/miscfs/fifofs/fifo_vnops.c,v retrieving revision 1.73 diff -p -u -4 -r1.73 fifo_vnops.c --- sys/miscfs/fifofs/fifo_vnops.c 8 Apr 2013 21:12:33 -0000 1.73 +++ sys/miscfs/fifofs/fifo_vnops.c 4 Jan 2014 09:32:28 -0000 @@ -626,10 +626,10 @@ fifo_kqfilter(void *v) int (**fifo_vnodeop_p)(void *); const struct vnodeopv_entry_desc fifo_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, fifo_lookup }, /* lookup */ - { &vop_create_desc, genfs_badop }, /* create */ - { &vop_mknod_desc, genfs_badop }, /* mknod */ + { &vop_create1_desc, genfs_badop }, /* create */ + { &vop_mknod1_desc, genfs_badop }, /* mknod */ { &vop_open_desc, fifo_open }, /* open */ { &vop_close_desc, fifo_close }, /* close */ { &vop_access_desc, genfs_ebadf }, /* access */ { &vop_getattr_desc, genfs_ebadf }, /* getattr */ @@ -645,11 +645,11 @@ const struct vnodeopv_entry_desc fifo_vn { &vop_seek_desc, genfs_badop }, /* seek */ { &vop_remove_desc, genfs_badop }, /* remove */ { &vop_link_desc, genfs_badop }, /* link */ { &vop_rename_desc, genfs_badop }, /* rename */ - { &vop_mkdir_desc, genfs_badop }, /* mkdir */ + { &vop_mkdir1_desc, genfs_badop }, /* mkdir */ { &vop_rmdir_desc, genfs_badop }, /* rmdir */ - { &vop_symlink_desc, genfs_badop }, /* symlink */ + { &vop_symlink1_desc, genfs_badop }, /* symlink */ { &vop_readdir_desc, genfs_badop }, /* readdir */ { &vop_readlink_desc, genfs_badop }, /* readlink */ { &vop_abortop_desc, genfs_badop }, /* abortop */ { &vop_inactive_desc, fifo_inactive }, /* inactive */ Index: sys/miscfs/genfs/layer_vnops.c =================================================================== RCS file: /cvsroot/src/sys/miscfs/genfs/layer_vnops.c,v retrieving revision 1.51 diff -p -u -4 -r1.51 layer_vnops.c --- sys/miscfs/genfs/layer_vnops.c 10 Oct 2012 06:55:25 -0000 1.51 +++ sys/miscfs/genfs/layer_vnops.c 4 Jan 2014 09:32:28 -0000 @@ -315,18 +315,19 @@ layer_bypass(void *v) if (descp->vdesc_vpp_offset != VDESC_NO_OFFSET && !error) { vppp = VOPARG_OFFSETTO(struct vnode***, descp->vdesc_vpp_offset, ap); /* - * Only vop_lookup, vop_create, vop_makedir, vop_bmap, - * vop_mknod, and vop_symlink return vpp's. vop_bmap - * doesn't call bypass as the lower vpp is fine (we're just - * going to do i/o on it). vop_lookup doesn't call bypass + * Only vop_lookup, vop_create, vop_makedir, vop_mknod + * and vop_symlink return vpp's. vop_lookup doesn't call bypass * as a lookup on "." would generate a locking error. - * So all the calls which get us here have a locked vpp. :-) + * So all the calls which get us here have a unlocked vpp. :-) */ + /* XXX: lock node until lookup returns unlocked nodes. */ + vn_lock(**vppp, LK_EXCLUSIVE | LK_RETRY); error = layer_node_create(mp, **vppp, *vppp); + VOP_UNLOCK(**vppp); if (error) { - vput(**vppp); + vrele(**vppp); **vppp = NULL; } } return error; Index: sys/miscfs/kernfs/kernfs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/miscfs/kernfs/kernfs_vnops.c,v retrieving revision 1.147 diff -p -u -4 -r1.147 kernfs_vnops.c --- sys/miscfs/kernfs/kernfs_vnops.c 18 Mar 2013 19:35:44 -0000 1.147 +++ sys/miscfs/kernfs/kernfs_vnops.c 4 Jan 2014 09:32:28 -0000 @@ -180,10 +180,10 @@ static int kernfs_xwrite(const struct ke int (**kernfs_vnodeop_p)(void *); const struct vnodeopv_entry_desc kernfs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, kernfs_lookup }, /* lookup */ - { &vop_create_desc, kernfs_create }, /* create */ - { &vop_mknod_desc, kernfs_mknod }, /* mknod */ + { &vop_create1_desc, kernfs_create }, /* create */ + { &vop_mknod1_desc, kernfs_mknod }, /* mknod */ { &vop_open_desc, kernfs_open }, /* open */ { &vop_close_desc, kernfs_close }, /* close */ { &vop_access_desc, kernfs_access }, /* access */ { &vop_getattr_desc, kernfs_getattr }, /* getattr */ @@ -198,11 +198,11 @@ const struct vnodeopv_entry_desc kernfs_ { &vop_seek_desc, kernfs_seek }, /* seek */ { &vop_remove_desc, kernfs_remove }, /* remove */ { &vop_link_desc, kernfs_link }, /* link */ { &vop_rename_desc, kernfs_rename }, /* rename */ - { &vop_mkdir_desc, kernfs_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, kernfs_mkdir }, /* mkdir */ { &vop_rmdir_desc, kernfs_rmdir }, /* rmdir */ - { &vop_symlink_desc, kernfs_symlink }, /* symlink */ + { &vop_symlink1_desc, kernfs_symlink }, /* symlink */ { &vop_readdir_desc, kernfs_readdir }, /* readdir */ { &vop_readlink_desc, kernfs_readlink }, /* readlink */ { &vop_abortop_desc, kernfs_abortop }, /* abortop */ { &vop_inactive_desc, kernfs_inactive }, /* inactive */ Index: sys/miscfs/procfs/procfs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/miscfs/procfs/procfs_vnops.c,v retrieving revision 1.186 diff -p -u -4 -r1.186 procfs_vnops.c --- sys/miscfs/procfs/procfs_vnops.c 18 Mar 2013 19:35:44 -0000 1.186 +++ sys/miscfs/procfs/procfs_vnops.c 4 Jan 2014 09:32:28 -0000 @@ -249,10 +249,10 @@ static int atoi(const char *, size_t); int (**procfs_vnodeop_p)(void *); const struct vnodeopv_entry_desc procfs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, procfs_lookup }, /* lookup */ - { &vop_create_desc, procfs_create }, /* create */ - { &vop_mknod_desc, procfs_mknod }, /* mknod */ + { &vop_create1_desc, procfs_create }, /* create */ + { &vop_mknod1_desc, procfs_mknod }, /* mknod */ { &vop_open_desc, procfs_open }, /* open */ { &vop_close_desc, procfs_close }, /* close */ { &vop_access_desc, procfs_access }, /* access */ { &vop_getattr_desc, procfs_getattr }, /* getattr */ @@ -267,11 +267,11 @@ const struct vnodeopv_entry_desc procfs_ { &vop_seek_desc, procfs_seek }, /* seek */ { &vop_remove_desc, procfs_remove }, /* remove */ { &vop_link_desc, procfs_link }, /* link */ { &vop_rename_desc, procfs_rename }, /* rename */ - { &vop_mkdir_desc, procfs_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, procfs_mkdir }, /* mkdir */ { &vop_rmdir_desc, procfs_rmdir }, /* rmdir */ - { &vop_symlink_desc, procfs_symlink }, /* symlink */ + { &vop_symlink1_desc, procfs_symlink }, /* symlink */ { &vop_readdir_desc, procfs_readdir }, /* readdir */ { &vop_readlink_desc, procfs_readlink }, /* readlink */ { &vop_abortop_desc, procfs_abortop }, /* abortop */ { &vop_inactive_desc, procfs_inactive }, /* inactive */ Index: sys/miscfs/specfs/spec_vnops.c =================================================================== RCS file: /cvsroot/src/sys/miscfs/specfs/spec_vnops.c,v retrieving revision 1.141 diff -p -u -4 -r1.141 spec_vnops.c --- sys/miscfs/specfs/spec_vnops.c 30 Sep 2013 18:58:00 -0000 1.141 +++ sys/miscfs/specfs/spec_vnops.c 4 Jan 2014 09:32:28 -0000 @@ -113,10 +113,10 @@ static vnode_t *specfs_hash[SPECHSZ]; int (**spec_vnodeop_p)(void *); const struct vnodeopv_entry_desc spec_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, spec_lookup }, /* lookup */ - { &vop_create_desc, spec_create }, /* create */ - { &vop_mknod_desc, spec_mknod }, /* mknod */ + { &vop_create1_desc, spec_create }, /* create */ + { &vop_mknod1_desc, spec_mknod }, /* mknod */ { &vop_open_desc, spec_open }, /* open */ { &vop_close_desc, spec_close }, /* close */ { &vop_access_desc, spec_access }, /* access */ { &vop_getattr_desc, spec_getattr }, /* getattr */ @@ -133,11 +133,11 @@ const struct vnodeopv_entry_desc spec_vn { &vop_seek_desc, spec_seek }, /* seek */ { &vop_remove_desc, spec_remove }, /* remove */ { &vop_link_desc, spec_link }, /* link */ { &vop_rename_desc, spec_rename }, /* rename */ - { &vop_mkdir_desc, spec_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, spec_mkdir }, /* mkdir */ { &vop_rmdir_desc, spec_rmdir }, /* rmdir */ - { &vop_symlink_desc, spec_symlink }, /* symlink */ + { &vop_symlink1_desc, spec_symlink }, /* symlink */ { &vop_readdir_desc, spec_readdir }, /* readdir */ { &vop_readlink_desc, spec_readlink }, /* readlink */ { &vop_abortop_desc, spec_abortop }, /* abortop */ { &vop_inactive_desc, spec_inactive }, /* inactive */ Index: sys/nfs/nfs_serv.c =================================================================== RCS file: /cvsroot/src/sys/nfs/nfs_serv.c,v retrieving revision 1.168 diff -p -u -4 -r1.168 nfs_serv.c --- sys/nfs/nfs_serv.c 14 Dec 2013 22:04:03 -0000 1.168 +++ sys/nfs/nfs_serv.c 4 Jan 2014 09:32:29 -0000 @@ -1505,8 +1505,9 @@ nfsrv_create(struct nfsrv_descript *nfsd if (va.va_type == VREG || va.va_type == VSOCK) { nqsrv_getl(nd.ni_dvp, ND_WRITE); error = VOP_CREATE(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &va); if (!error) { + vn_lock(nd.ni_vp, LK_EXCLUSIVE | LK_RETRY); if (exclusive_flag) { exclusive_flag = 0; vattr_null(&va); /* @@ -1539,9 +1540,11 @@ nfsrv_create(struct nfsrv_descript *nfsd va.va_rdev = (dev_t)rdev; nqsrv_getl(nd.ni_dvp, ND_WRITE); error = VOP_MKNOD(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &va); - if (error) { + if (!error) { + vn_lock(nd.ni_vp, LK_EXCLUSIVE | LK_RETRY); + } else { nfsm_reply(0); } } else { VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); @@ -1749,8 +1752,11 @@ abort: error = VOP_MKNOD(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &va); if (error) goto out; } + if (!error) { + vn_lock(nd.ni_vp, LK_EXCLUSIVE | LK_RETRY); + } out: vp = nd.ni_vp; if (!error) { error = nfsrv_composefh(vp, &nsfh, true); @@ -2341,14 +2347,15 @@ abortop: nqsrv_getl(nd.ni_dvp, ND_WRITE); error = VOP_SYMLINK(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &va, pathcp); if (!error) { if (v3) { + vn_lock(nd.ni_vp, LK_SHARED | LK_RETRY); error = nfsrv_composefh(nd.ni_vp, &nsfh, v3); if (!error) error = VOP_GETATTR(nd.ni_vp, &va, cred); vput(nd.ni_vp); } else { - vput(nd.ni_vp); + vrele(nd.ni_vp); } } out: if (pathcp) @@ -2469,8 +2476,9 @@ nfsrv_mkdir(struct nfsrv_descript *nfsd, nqsrv_getl(nd.ni_dvp, ND_WRITE); error = VOP_MKDIR(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &va); if (!error) { vp = nd.ni_vp; + vn_lock(vp, LK_SHARED | LK_RETRY); error = nfsrv_composefh(vp, &nsfh, v3); if (!error) error = VOP_GETATTR(vp, &va, cred); vput(vp); Index: sys/nfs/nfs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/nfs/nfs_vnops.c,v retrieving revision 1.301 diff -p -u -4 -r1.301 nfs_vnops.c --- sys/nfs/nfs_vnops.c 15 Nov 2013 14:39:53 -0000 1.301 +++ sys/nfs/nfs_vnops.c 4 Jan 2014 09:32:29 -0000 @@ -97,10 +97,10 @@ __KERNEL_RCSID(0, "$NetBSD: nfs_vnops.c, int (**nfsv2_vnodeop_p)(void *); const struct vnodeopv_entry_desc nfsv2_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, nfs_lookup }, /* lookup */ - { &vop_create_desc, nfs_create }, /* create */ - { &vop_mknod_desc, nfs_mknod }, /* mknod */ + { &vop_create1_desc, nfs_create }, /* create */ + { &vop_mknod1_desc, nfs_mknod }, /* mknod */ { &vop_open_desc, nfs_open }, /* open */ { &vop_close_desc, nfs_close }, /* close */ { &vop_access_desc, nfs_access }, /* access */ { &vop_getattr_desc, nfs_getattr }, /* getattr */ @@ -117,11 +117,11 @@ const struct vnodeopv_entry_desc nfsv2_v { &vop_seek_desc, nfs_seek }, /* seek */ { &vop_remove_desc, nfs_remove }, /* remove */ { &vop_link_desc, nfs_link }, /* link */ { &vop_rename_desc, nfs_rename }, /* rename */ - { &vop_mkdir_desc, nfs_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, nfs_mkdir }, /* mkdir */ { &vop_rmdir_desc, nfs_rmdir }, /* rmdir */ - { &vop_symlink_desc, nfs_symlink }, /* symlink */ + { &vop_symlink1_desc, nfs_symlink }, /* symlink */ { &vop_readdir_desc, nfs_readdir }, /* readdir */ { &vop_readlink_desc, nfs_readlink }, /* readlink */ { &vop_abortop_desc, nfs_abortop }, /* abortop */ { &vop_inactive_desc, nfs_inactive }, /* inactive */ @@ -148,10 +148,10 @@ const struct vnodeopv_desc nfsv2_vnodeop int (**spec_nfsv2nodeop_p)(void *); const struct vnodeopv_entry_desc spec_nfsv2nodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, spec_lookup }, /* lookup */ - { &vop_create_desc, spec_create }, /* create */ - { &vop_mknod_desc, spec_mknod }, /* mknod */ + { &vop_create1_desc, spec_create }, /* create */ + { &vop_mknod1_desc, spec_mknod }, /* mknod */ { &vop_open_desc, spec_open }, /* open */ { &vop_close_desc, nfsspec_close }, /* close */ { &vop_access_desc, nfsspec_access }, /* access */ { &vop_getattr_desc, nfs_getattr }, /* getattr */ @@ -168,11 +168,11 @@ const struct vnodeopv_entry_desc spec_nf { &vop_seek_desc, spec_seek }, /* seek */ { &vop_remove_desc, spec_remove }, /* remove */ { &vop_link_desc, spec_link }, /* link */ { &vop_rename_desc, spec_rename }, /* rename */ - { &vop_mkdir_desc, spec_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, spec_mkdir }, /* mkdir */ { &vop_rmdir_desc, spec_rmdir }, /* rmdir */ - { &vop_symlink_desc, spec_symlink }, /* symlink */ + { &vop_symlink1_desc, spec_symlink }, /* symlink */ { &vop_readdir_desc, spec_readdir }, /* readdir */ { &vop_readlink_desc, spec_readlink }, /* readlink */ { &vop_abortop_desc, spec_abortop }, /* abortop */ { &vop_inactive_desc, nfs_inactive }, /* inactive */ @@ -196,10 +196,10 @@ const struct vnodeopv_desc spec_nfsv2nod int (**fifo_nfsv2nodeop_p)(void *); const struct vnodeopv_entry_desc fifo_nfsv2nodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, vn_fifo_bypass }, /* lookup */ - { &vop_create_desc, vn_fifo_bypass }, /* create */ - { &vop_mknod_desc, vn_fifo_bypass }, /* mknod */ + { &vop_create1_desc, vn_fifo_bypass }, /* create */ + { &vop_mknod1_desc, vn_fifo_bypass }, /* mknod */ { &vop_open_desc, vn_fifo_bypass }, /* open */ { &vop_close_desc, nfsfifo_close }, /* close */ { &vop_access_desc, nfsspec_access }, /* access */ { &vop_getattr_desc, nfs_getattr }, /* getattr */ @@ -216,11 +216,11 @@ const struct vnodeopv_entry_desc fifo_nf { &vop_seek_desc, vn_fifo_bypass }, /* seek */ { &vop_remove_desc, vn_fifo_bypass }, /* remove */ { &vop_link_desc, vn_fifo_bypass }, /* link */ { &vop_rename_desc, vn_fifo_bypass }, /* rename */ - { &vop_mkdir_desc, vn_fifo_bypass }, /* mkdir */ + { &vop_mkdir1_desc, vn_fifo_bypass }, /* mkdir */ { &vop_rmdir_desc, vn_fifo_bypass }, /* rmdir */ - { &vop_symlink_desc, vn_fifo_bypass }, /* symlink */ + { &vop_symlink1_desc, vn_fifo_bypass }, /* symlink */ { &vop_readdir_desc, vn_fifo_bypass }, /* readdir */ { &vop_readlink_desc, vn_fifo_bypass }, /* readlink */ { &vop_abortop_desc, vn_fifo_bypass }, /* abortop */ { &vop_inactive_desc, nfs_inactive }, /* inactive */ @@ -1549,8 +1549,9 @@ nfs_mknodrpc(struct vnode *dvp, struct v vput(newvp); } else { nfs_cache_enter(dvp, newvp, cnp); *vpp = newvp; + VOP_UNLOCK(newvp); } VTONFS(dvp)->n_flag |= NMODIFIED; if (!wccflag) NFS_INVALIDATE_ATTRCACHE(VTONFS(dvp)); @@ -1707,8 +1708,9 @@ again: nfs_cache_enter(dvp, newvp, cnp); else cache_purge1(dvp, cnp->cn_nameptr, cnp->cn_namelen, 0); *ap->a_vpp = newvp; + VOP_UNLOCK(newvp); } else { if (newvp) vput(newvp); if (error == EEXIST) @@ -2158,8 +2160,9 @@ nfs_symlink(void *v) if (newvp != NULL) vput(newvp); } else { *ap->a_vpp = newvp; + VOP_UNLOCK(newvp); } VTONFS(dvp)->n_flag |= NMODIFIED; if (!wccflag) NFS_INVALIDATE_ATTRCACHE(VTONFS(dvp)); @@ -2253,8 +2256,9 @@ nfs_mkdir(void *v) } else { VN_KNOTE(dvp, NOTE_WRITE | NOTE_LINK); nfs_cache_enter(dvp, newvp, cnp); *ap->a_vpp = newvp; + VOP_UNLOCK(newvp); } vput(dvp); return (error); } Index: sys/rump/include/rump/rumpvnode_if.h =================================================================== RCS file: /cvsroot/src/sys/rump/include/rump/rumpvnode_if.h,v retrieving revision 1.13 diff -p -u -4 -r1.13 rumpvnode_if.h --- sys/rump/include/rump/rumpvnode_if.h 17 Jul 2013 21:21:34 -0000 1.13 +++ sys/rump/include/rump/rumpvnode_if.h 4 Jan 2014 09:32:29 -0000 @@ -1,5 +1,5 @@ -/* $NetBSD: rumpvnode_if.h,v 1.13 2013/07/17 21:21:34 pooka Exp $ */ +/* $NetBSD$ */ /* * Warning: DO NOT EDIT! This file is automatically generated! * (Modifications made here may easily be lost!) Index: sys/rump/librump/rumpvfs/rumpfs.c =================================================================== RCS file: /cvsroot/src/sys/rump/librump/rumpvfs/rumpfs.c,v retrieving revision 1.121 diff -p -u -4 -r1.121 rumpfs.c --- sys/rump/librump/rumpvfs/rumpfs.c 23 Nov 2013 13:35:36 -0000 1.121 +++ sys/rump/librump/rumpvfs/rumpfs.c 4 Jan 2014 09:32:29 -0000 @@ -99,14 +99,14 @@ const struct vnodeopv_entry_desc rump_vn { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, rump_vop_lookup }, { &vop_getattr_desc, rump_vop_getattr }, { &vop_setattr_desc, rump_vop_setattr }, - { &vop_mkdir_desc, rump_vop_mkdir }, + { &vop_mkdir1_desc, rump_vop_mkdir }, { &vop_rmdir_desc, rump_vop_rmdir }, { &vop_remove_desc, rump_vop_remove }, - { &vop_mknod_desc, rump_vop_mknod }, - { &vop_create_desc, rump_vop_create }, - { &vop_symlink_desc, rump_vop_symlink }, + { &vop_mknod1_desc, rump_vop_mknod }, + { &vop_create1_desc, rump_vop_create }, + { &vop_symlink1_desc, rump_vop_symlink }, { &vop_readlink_desc, rump_vop_readlink }, { &vop_access_desc, rump_vop_access }, { &vop_readdir_desc, rump_vop_readdir }, { &vop_read_desc, rump_vop_read }, @@ -564,9 +564,10 @@ makeprivate(enum vtype vt, mode_t mode, return rn; } static int -makevnode(struct mount *mp, struct rumpfs_node *rn, struct vnode **vpp) +makevnode(struct mount *mp, struct rumpfs_node *rn, struct vnode **vpp, + bool lock_result) { struct vnode *vp; int (**vpops)(void *); struct vattr *va = &rn->rn_va; @@ -592,9 +593,10 @@ makevnode(struct mount *mp, struct rumpf } vp->v_data = rn; genfs_node_init(vp, &rumpfs_genfsops); - vn_lock(vp, LK_RETRY | LK_EXCLUSIVE); + if (lock_result) + vn_lock(vp, LK_RETRY | LK_EXCLUSIVE); mutex_enter(&reclock); rn->rn_vp = vp; mutex_exit(&reclock); @@ -810,9 +812,9 @@ rump_vop_lookup(void *v) } *vpp = vp; } else { mutex_exit(&reclock); - rv = makevnode(dvp->v_mount, rn, vpp); + rv = makevnode(dvp->v_mount, rn, vpp, true); } if (dotdot) vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY); @@ -1009,9 +1011,9 @@ rump_vop_mkdir(void *v) rn = makeprivate(VDIR, va->va_mode & ALLPERMS, NODEV, DEV_BSIZE, false); if ((cnp->cn_flags & ISWHITEOUT) != 0) rn->rn_va.va_flags |= UF_OPAQUE; rn->rn_parent = rnd; - rv = makevnode(dvp->v_mount, rn, vpp); + rv = makevnode(dvp->v_mount, rn, vpp, false); if (rv) goto out; makedir(rnd, cnp, rn); @@ -1107,9 +1109,9 @@ rump_vop_mknod(void *v) rn = makeprivate(va->va_type, va->va_mode & ALLPERMS, va->va_rdev, DEV_BSIZE, false); if ((cnp->cn_flags & ISWHITEOUT) != 0) rn->rn_va.va_flags |= UF_OPAQUE; - rv = makevnode(dvp->v_mount, rn, vpp); + rv = makevnode(dvp->v_mount, rn, vpp, false); if (rv) goto out; makedir(rnd, cnp, rn); @@ -1140,9 +1142,9 @@ rump_vop_create(void *v) rn = makeprivate(va->va_type, va->va_mode & ALLPERMS, NODEV, newsize, false); if ((cnp->cn_flags & ISWHITEOUT) != 0) rn->rn_va.va_flags |= UF_OPAQUE; - rv = makevnode(dvp->v_mount, rn, vpp); + rv = makevnode(dvp->v_mount, rn, vpp, false); if (rv) goto out; makedir(rnd, cnp, rn); @@ -1175,9 +1177,9 @@ rump_vop_symlink(void *v) KASSERT(linklen < MAXPATHLEN); rn = makeprivate(VLNK, va->va_mode & ALLPERMS, NODEV, linklen, false); if ((cnp->cn_flags & ISWHITEOUT) != 0) rn->rn_va.va_flags |= UF_OPAQUE; - rv = makevnode(dvp->v_mount, rn, vpp); + rv = makevnode(dvp->v_mount, rn, vpp, false); if (rv) goto out; makedir(rnd, cnp, rn); @@ -1764,9 +1766,9 @@ rumpfs_mountfs(struct mount *mp) rfsmp = kmem_alloc(sizeof(*rfsmp), KM_SLEEP); rn = makeprivate(VDIR, RUMPFS_DEFAULTMODE, NODEV, DEV_BSIZE, false); rn->rn_parent = rn; - if ((error = makevnode(mp, rn, &rfsmp->rfsmp_rvp)) != 0) + if ((error = makevnode(mp, rn, &rfsmp->rfsmp_rvp, true)) != 0) return error; rfsmp->rfsmp_rvp->v_vflag |= VV_ROOT; VOP_UNLOCK(rfsmp->rfsmp_rvp); Index: sys/rump/librump/rumpvfs/rumpvnode_if.c =================================================================== RCS file: /cvsroot/src/sys/rump/librump/rumpvfs/rumpvnode_if.c,v retrieving revision 1.12 diff -p -u -4 -r1.12 rumpvnode_if.c --- sys/rump/librump/rumpvfs/rumpvnode_if.c 17 Jul 2013 21:21:34 -0000 1.12 +++ sys/rump/librump/rumpvfs/rumpvnode_if.c 4 Jan 2014 09:32:29 -0000 @@ -1,5 +1,5 @@ -/* $NetBSD: rumpvnode_if.c,v 1.12 2013/07/17 21:21:34 pooka Exp $ */ +/* $NetBSD$ */ /* * Warning: DO NOT EDIT! This file is automatically generated! * (Modifications made here may easily be lost!) @@ -39,9 +39,9 @@ * SUCH DAMAGE. */ #include -__KERNEL_RCSID(0, "$NetBSD: rumpvnode_if.c,v 1.12 2013/07/17 21:21:34 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD$"); #include #include #include Index: sys/sys/vnode_if.h =================================================================== RCS file: /cvsroot/src/sys/sys/vnode_if.h,v retrieving revision 1.84 diff -p -u -4 -r1.84 vnode_if.h --- sys/sys/vnode_if.h 17 Jul 2013 21:21:34 -0000 1.84 +++ sys/sys/vnode_if.h 4 Jan 2014 09:32:29 -0000 @@ -1,5 +1,5 @@ -/* $NetBSD: vnode_if.h,v 1.84 2013/07/17 21:21:34 pooka Exp $ */ +/* $NetBSD$ */ /* * Warning: DO NOT EDIT! This file is automatically generated! * (Modifications made here may easily be lost!) @@ -76,9 +76,9 @@ struct vop_create_args { struct vnode **a_vpp; struct componentname *a_cnp; struct vattr *a_vap; }; -extern const struct vnodeop_desc vop_create_desc; +extern const struct vnodeop_desc vop_create1_desc; int VOP_CREATE(struct vnode *, struct vnode **, struct componentname *, struct vattr *); #define VOP_MKNOD_DESCOFFSET 4 @@ -88,9 +88,9 @@ struct vop_mknod_args { struct vnode **a_vpp; struct componentname *a_cnp; struct vattr *a_vap; }; -extern const struct vnodeop_desc vop_mknod_desc; +extern const struct vnodeop_desc vop_mknod1_desc; int VOP_MKNOD(struct vnode *, struct vnode **, struct componentname *, struct vattr *); #define VOP_OPEN_DESCOFFSET 5 @@ -290,9 +290,9 @@ struct vop_mkdir_args { struct vnode **a_vpp; struct componentname *a_cnp; struct vattr *a_vap; }; -extern const struct vnodeop_desc vop_mkdir_desc; +extern const struct vnodeop_desc vop_mkdir1_desc; int VOP_MKDIR(struct vnode *, struct vnode **, struct componentname *, struct vattr *); #define VOP_RMDIR_DESCOFFSET 24 @@ -313,9 +313,9 @@ struct vop_symlink_args { struct componentname *a_cnp; struct vattr *a_vap; char *a_target; }; -extern const struct vnodeop_desc vop_symlink_desc; +extern const struct vnodeop_desc vop_symlink1_desc; int VOP_SYMLINK(struct vnode *, struct vnode **, struct componentname *, struct vattr *, char *); #define VOP_READDIR_DESCOFFSET 26 Index: sys/ufs/chfs/chfs_vnode.c =================================================================== RCS file: /cvsroot/src/sys/ufs/chfs/chfs_vnode.c,v retrieving revision 1.8 diff -p -u -4 -r1.8 chfs_vnode.c --- sys/ufs/chfs/chfs_vnode.c 19 Oct 2012 12:44:39 -0000 1.8 +++ sys/ufs/chfs/chfs_vnode.c 4 Jan 2014 09:32:29 -0000 @@ -300,8 +300,9 @@ chfs_makeinode(int mode, struct vnode *d pdir->chvc->nlink++; mutex_exit(&chmp->chm_lock_mountfields); + VOP_UNLOCK(vp); *vpp = vp; return (0); } Index: sys/ufs/chfs/chfs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/ufs/chfs/chfs_vnops.c,v retrieving revision 1.18 diff -p -u -4 -r1.18 chfs_vnops.c --- sys/ufs/chfs/chfs_vnops.c 20 Oct 2013 17:18:38 -0000 1.18 +++ sys/ufs/chfs/chfs_vnops.c 4 Jan 2014 09:32:29 -0000 @@ -1314,9 +1314,9 @@ chfs_symlink(void *v) } out: if (err) - vput(vp); + vrele(vp); return (err); } @@ -1603,10 +1603,10 @@ int const struct vnodeopv_entry_desc chfs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, chfs_lookup }, - { &vop_create_desc, chfs_create }, - { &vop_mknod_desc, chfs_mknod }, + { &vop_create1_desc, chfs_create }, + { &vop_mknod1_desc, chfs_mknod }, { &vop_open_desc, chfs_open }, { &vop_close_desc, chfs_close }, { &vop_access_desc, chfs_access }, { &vop_getattr_desc, chfs_getattr }, @@ -1623,11 +1623,11 @@ const struct vnodeopv_entry_desc chfs_vn { &vop_seek_desc, genfs_seek }, { &vop_remove_desc, chfs_remove }, { &vop_link_desc, chfs_link }, { &vop_rename_desc, chfs_rename }, - { &vop_mkdir_desc, chfs_mkdir }, + { &vop_mkdir1_desc, chfs_mkdir }, { &vop_rmdir_desc, chfs_rmdir }, - { &vop_symlink_desc, chfs_symlink }, + { &vop_symlink1_desc, chfs_symlink }, { &vop_readdir_desc, chfs_readdir }, { &vop_readlink_desc, chfs_readlink }, { &vop_abortop_desc, genfs_abortop }, { &vop_inactive_desc, chfs_inactive }, @@ -1659,10 +1659,10 @@ int const struct vnodeopv_entry_desc chfs_specop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, spec_lookup }, - { &vop_create_desc, spec_create }, - { &vop_mknod_desc, spec_mknod }, + { &vop_create1_desc, spec_create }, + { &vop_mknod1_desc, spec_mknod }, { &vop_open_desc, spec_open }, { &vop_close_desc, ufsspec_close }, { &vop_access_desc, chfs_access }, { &vop_getattr_desc, chfs_getattr }, @@ -1679,11 +1679,11 @@ const struct vnodeopv_entry_desc chfs_sp { &vop_seek_desc, spec_seek }, { &vop_remove_desc, spec_remove }, { &vop_link_desc, spec_link }, { &vop_rename_desc, spec_rename }, - { &vop_mkdir_desc, spec_mkdir }, + { &vop_mkdir1_desc, spec_mkdir }, { &vop_rmdir_desc, spec_rmdir }, - { &vop_symlink_desc, spec_symlink }, + { &vop_symlink1_desc, spec_symlink }, { &vop_readdir_desc, spec_readdir }, { &vop_readlink_desc, spec_readlink }, { &vop_abortop_desc, spec_abortop }, { &vop_inactive_desc, chfs_inactive }, @@ -1713,10 +1713,10 @@ int const struct vnodeopv_entry_desc chfs_fifoop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, vn_fifo_bypass }, - { &vop_create_desc, vn_fifo_bypass }, - { &vop_mknod_desc, vn_fifo_bypass }, + { &vop_create1_desc, vn_fifo_bypass }, + { &vop_mknod1_desc, vn_fifo_bypass }, { &vop_open_desc, vn_fifo_bypass }, { &vop_close_desc, ufsfifo_close }, { &vop_access_desc, chfs_access }, { &vop_getattr_desc, chfs_getattr }, @@ -1733,11 +1733,11 @@ const struct vnodeopv_entry_desc chfs_fi { &vop_seek_desc, vn_fifo_bypass }, { &vop_remove_desc, vn_fifo_bypass }, { &vop_link_desc, vn_fifo_bypass }, { &vop_rename_desc, vn_fifo_bypass }, - { &vop_mkdir_desc, vn_fifo_bypass }, + { &vop_mkdir1_desc, vn_fifo_bypass }, { &vop_rmdir_desc, vn_fifo_bypass }, - { &vop_symlink_desc, vn_fifo_bypass }, + { &vop_symlink1_desc, vn_fifo_bypass }, { &vop_readdir_desc, vn_fifo_bypass }, { &vop_readlink_desc, vn_fifo_bypass }, { &vop_abortop_desc, vn_fifo_bypass }, { &vop_inactive_desc, chfs_inactive }, Index: sys/ufs/ext2fs/ext2fs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/ufs/ext2fs/ext2fs_vnops.c,v retrieving revision 1.107 diff -p -u -4 -r1.107 ext2fs_vnops.c --- sys/ufs/ext2fs/ext2fs_vnops.c 18 Mar 2013 19:35:47 -0000 1.107 +++ sys/ufs/ext2fs/ext2fs_vnops.c 4 Jan 2014 09:32:29 -0000 @@ -140,8 +140,9 @@ ext2fs_create(void *v) if (error) return (error); VN_KNOTE(ap->a_dvp, NOTE_WRITE); + VOP_UNLOCK(*ap->a_vpp); return (0); } /* @@ -183,16 +184,17 @@ ext2fs_mknod(void *v) * Remove inode so that it will be reloaded by VFS_VGET and * checked to see if it is an alias of an existing entry in * the inode cache. */ - VOP_UNLOCK(*vpp); (*vpp)->v_type = VNON; + VOP_UNLOCK(*vpp); vgone(*vpp); error = VFS_VGET(mp, ino, vpp); if (error != 0) { *vpp = NULL; return (error); } + VOP_UNLOCK(*vpp); return (0); } /* @@ -764,8 +766,9 @@ bad: ip->i_flag |= IN_CHANGE; vput(tvp); } else { VN_KNOTE(dvp, NOTE_WRITE | NOTE_LINK); + VOP_UNLOCK(tvp); *ap->a_vpp = tvp; } out: vput(dvp); @@ -898,10 +901,11 @@ ext2fs_symlink(void *v) error = vn_rdwr(UIO_WRITE, vp, ap->a_target, len, (off_t)0, UIO_SYSSPACE, IO_NODELOCKED, ap->a_cnp->cn_cred, (size_t *)0, NULL); bad: + VOP_UNLOCK(vp); if (error) - vput(vp); + vrele(vp); return (error); } /* @@ -1134,10 +1138,10 @@ ext2fs_reclaim(void *v) int (**ext2fs_vnodeop_p)(void *); const struct vnodeopv_entry_desc ext2fs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, ext2fs_lookup }, /* lookup */ - { &vop_create_desc, ext2fs_create }, /* create */ - { &vop_mknod_desc, ext2fs_mknod }, /* mknod */ + { &vop_create1_desc, ext2fs_create }, /* create */ + { &vop_mknod1_desc, ext2fs_mknod }, /* mknod */ { &vop_open_desc, ext2fs_open }, /* open */ { &vop_close_desc, ufs_close }, /* close */ { &vop_access_desc, ext2fs_access }, /* access */ { &vop_getattr_desc, ext2fs_getattr }, /* getattr */ @@ -1154,11 +1158,11 @@ const struct vnodeopv_entry_desc ext2fs_ { &vop_seek_desc, ufs_seek }, /* seek */ { &vop_remove_desc, ext2fs_remove }, /* remove */ { &vop_link_desc, ext2fs_link }, /* link */ { &vop_rename_desc, ext2fs_rename }, /* rename */ - { &vop_mkdir_desc, ext2fs_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, ext2fs_mkdir }, /* mkdir */ { &vop_rmdir_desc, ext2fs_rmdir }, /* rmdir */ - { &vop_symlink_desc, ext2fs_symlink }, /* symlink */ + { &vop_symlink1_desc, ext2fs_symlink }, /* symlink */ { &vop_readdir_desc, ext2fs_readdir }, /* readdir */ { &vop_readlink_desc, ext2fs_readlink }, /* readlink */ { &vop_abortop_desc, ufs_abortop }, /* abortop */ { &vop_inactive_desc, ext2fs_inactive }, /* inactive */ @@ -1182,10 +1186,10 @@ const struct vnodeopv_desc ext2fs_vnodeo int (**ext2fs_specop_p)(void *); const struct vnodeopv_entry_desc ext2fs_specop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, spec_lookup }, /* lookup */ - { &vop_create_desc, spec_create }, /* create */ - { &vop_mknod_desc, spec_mknod }, /* mknod */ + { &vop_create1_desc, spec_create }, /* create */ + { &vop_mknod1_desc, spec_mknod }, /* mknod */ { &vop_open_desc, spec_open }, /* open */ { &vop_close_desc, ufsspec_close }, /* close */ { &vop_access_desc, ext2fs_access }, /* access */ { &vop_getattr_desc, ext2fs_getattr }, /* getattr */ @@ -1202,11 +1206,11 @@ const struct vnodeopv_entry_desc ext2fs_ { &vop_seek_desc, spec_seek }, /* seek */ { &vop_remove_desc, spec_remove }, /* remove */ { &vop_link_desc, spec_link }, /* link */ { &vop_rename_desc, spec_rename }, /* rename */ - { &vop_mkdir_desc, spec_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, spec_mkdir }, /* mkdir */ { &vop_rmdir_desc, spec_rmdir }, /* rmdir */ - { &vop_symlink_desc, spec_symlink }, /* symlink */ + { &vop_symlink1_desc, spec_symlink }, /* symlink */ { &vop_readdir_desc, spec_readdir }, /* readdir */ { &vop_readlink_desc, spec_readlink }, /* readlink */ { &vop_abortop_desc, spec_abortop }, /* abortop */ { &vop_inactive_desc, ext2fs_inactive }, /* inactive */ @@ -1230,10 +1234,10 @@ const struct vnodeopv_desc ext2fs_specop int (**ext2fs_fifoop_p)(void *); const struct vnodeopv_entry_desc ext2fs_fifoop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, vn_fifo_bypass }, /* lookup */ - { &vop_create_desc, vn_fifo_bypass }, /* create */ - { &vop_mknod_desc, vn_fifo_bypass }, /* mknod */ + { &vop_create1_desc, vn_fifo_bypass }, /* create */ + { &vop_mknod1_desc, vn_fifo_bypass }, /* mknod */ { &vop_open_desc, vn_fifo_bypass }, /* open */ { &vop_close_desc, ufsfifo_close }, /* close */ { &vop_access_desc, ext2fs_access }, /* access */ { &vop_getattr_desc, ext2fs_getattr }, /* getattr */ @@ -1250,11 +1254,11 @@ const struct vnodeopv_entry_desc ext2fs_ { &vop_seek_desc, vn_fifo_bypass }, /* seek */ { &vop_remove_desc, vn_fifo_bypass }, /* remove */ { &vop_link_desc, vn_fifo_bypass }, /* link */ { &vop_rename_desc, vn_fifo_bypass }, /* rename */ - { &vop_mkdir_desc, vn_fifo_bypass }, /* mkdir */ + { &vop_mkdir1_desc, vn_fifo_bypass }, /* mkdir */ { &vop_rmdir_desc, vn_fifo_bypass }, /* rmdir */ - { &vop_symlink_desc, vn_fifo_bypass }, /* symlink */ + { &vop_symlink1_desc, vn_fifo_bypass }, /* symlink */ { &vop_readdir_desc, vn_fifo_bypass }, /* readdir */ { &vop_readlink_desc, vn_fifo_bypass }, /* readlink */ { &vop_abortop_desc, vn_fifo_bypass }, /* abortop */ { &vop_inactive_desc, ext2fs_inactive }, /* inactive */ Index: sys/ufs/ffs/ffs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/ufs/ffs/ffs_vnops.c,v retrieving revision 1.123 diff -p -u -4 -r1.123 ffs_vnops.c --- sys/ufs/ffs/ffs_vnops.c 23 Jun 2013 07:28:37 -0000 1.123 +++ sys/ufs/ffs/ffs_vnops.c 4 Jan 2014 09:32:29 -0000 @@ -104,11 +104,11 @@ __KERNEL_RCSID(0, "$NetBSD: ffs_vnops.c, int (**ffs_vnodeop_p)(void *); const struct vnodeopv_entry_desc ffs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, ufs_lookup }, /* lookup */ - { &vop_create_desc, ufs_create }, /* create */ + { &vop_create1_desc, ufs_create }, /* create */ { &vop_whiteout_desc, ufs_whiteout }, /* whiteout */ - { &vop_mknod_desc, ufs_mknod }, /* mknod */ + { &vop_mknod1_desc, ufs_mknod }, /* mknod */ { &vop_open_desc, ufs_open }, /* open */ { &vop_close_desc, ufs_close }, /* close */ { &vop_access_desc, ufs_access }, /* access */ { &vop_getattr_desc, ufs_getattr }, /* getattr */ @@ -125,11 +125,11 @@ const struct vnodeopv_entry_desc ffs_vno { &vop_seek_desc, ufs_seek }, /* seek */ { &vop_remove_desc, ufs_remove }, /* remove */ { &vop_link_desc, ufs_link }, /* link */ { &vop_rename_desc, ufs_rename }, /* rename */ - { &vop_mkdir_desc, ufs_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, ufs_mkdir }, /* mkdir */ { &vop_rmdir_desc, ufs_rmdir }, /* rmdir */ - { &vop_symlink_desc, ufs_symlink }, /* symlink */ + { &vop_symlink1_desc, ufs_symlink }, /* symlink */ { &vop_readdir_desc, ufs_readdir }, /* readdir */ { &vop_readlink_desc, ufs_readlink }, /* readlink */ { &vop_abortop_desc, ufs_abortop }, /* abortop */ { &vop_inactive_desc, ufs_inactive }, /* inactive */ @@ -159,10 +159,10 @@ const struct vnodeopv_desc ffs_vnodeop_o int (**ffs_specop_p)(void *); const struct vnodeopv_entry_desc ffs_specop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, spec_lookup }, /* lookup */ - { &vop_create_desc, spec_create }, /* create */ - { &vop_mknod_desc, spec_mknod }, /* mknod */ + { &vop_create1_desc, spec_create }, /* create */ + { &vop_mknod1_desc, spec_mknod }, /* mknod */ { &vop_open_desc, spec_open }, /* open */ { &vop_close_desc, ufsspec_close }, /* close */ { &vop_access_desc, ufs_access }, /* access */ { &vop_getattr_desc, ufs_getattr }, /* getattr */ @@ -179,11 +179,11 @@ const struct vnodeopv_entry_desc ffs_spe { &vop_seek_desc, spec_seek }, /* seek */ { &vop_remove_desc, spec_remove }, /* remove */ { &vop_link_desc, spec_link }, /* link */ { &vop_rename_desc, spec_rename }, /* rename */ - { &vop_mkdir_desc, spec_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, spec_mkdir }, /* mkdir */ { &vop_rmdir_desc, spec_rmdir }, /* rmdir */ - { &vop_symlink_desc, spec_symlink }, /* symlink */ + { &vop_symlink1_desc, spec_symlink }, /* symlink */ { &vop_readdir_desc, spec_readdir }, /* readdir */ { &vop_readlink_desc, spec_readlink }, /* readlink */ { &vop_abortop_desc, spec_abortop }, /* abortop */ { &vop_inactive_desc, ufs_inactive }, /* inactive */ @@ -213,10 +213,10 @@ const struct vnodeopv_desc ffs_specop_op int (**ffs_fifoop_p)(void *); const struct vnodeopv_entry_desc ffs_fifoop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, vn_fifo_bypass }, /* lookup */ - { &vop_create_desc, vn_fifo_bypass }, /* create */ - { &vop_mknod_desc, vn_fifo_bypass }, /* mknod */ + { &vop_create1_desc, vn_fifo_bypass }, /* create */ + { &vop_mknod1_desc, vn_fifo_bypass }, /* mknod */ { &vop_open_desc, vn_fifo_bypass }, /* open */ { &vop_close_desc, ufsfifo_close }, /* close */ { &vop_access_desc, ufs_access }, /* access */ { &vop_getattr_desc, ufs_getattr }, /* getattr */ @@ -233,11 +233,11 @@ const struct vnodeopv_entry_desc ffs_fif { &vop_seek_desc, vn_fifo_bypass }, /* seek */ { &vop_remove_desc, vn_fifo_bypass }, /* remove */ { &vop_link_desc, vn_fifo_bypass }, /* link */ { &vop_rename_desc, vn_fifo_bypass }, /* rename */ - { &vop_mkdir_desc, vn_fifo_bypass }, /* mkdir */ + { &vop_mkdir1_desc, vn_fifo_bypass }, /* mkdir */ { &vop_rmdir_desc, vn_fifo_bypass }, /* rmdir */ - { &vop_symlink_desc, vn_fifo_bypass }, /* symlink */ + { &vop_symlink1_desc, vn_fifo_bypass }, /* symlink */ { &vop_readdir_desc, vn_fifo_bypass }, /* readdir */ { &vop_readlink_desc, vn_fifo_bypass }, /* readlink */ { &vop_abortop_desc, vn_fifo_bypass }, /* abortop */ { &vop_inactive_desc, ufs_inactive }, /* inactive */ Index: sys/ufs/lfs/lfs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/ufs/lfs/lfs_vnops.c,v retrieving revision 1.259 diff -p -u -4 -r1.259 lfs_vnops.c --- sys/ufs/lfs/lfs_vnops.c 18 Oct 2013 15:15:22 -0000 1.259 +++ sys/ufs/lfs/lfs_vnops.c 4 Jan 2014 09:32:30 -0000 @@ -116,11 +116,11 @@ static int lfs_deleteextattr(void *v); int (**lfs_vnodeop_p)(void *); const struct vnodeopv_entry_desc lfs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, ulfs_lookup }, /* lookup */ - { &vop_create_desc, lfs_create }, /* create */ + { &vop_create1_desc, lfs_create }, /* create */ { &vop_whiteout_desc, ulfs_whiteout }, /* whiteout */ - { &vop_mknod_desc, lfs_mknod }, /* mknod */ + { &vop_mknod1_desc, lfs_mknod }, /* mknod */ { &vop_open_desc, ulfs_open }, /* open */ { &vop_close_desc, lfs_close }, /* close */ { &vop_access_desc, ulfs_access }, /* access */ { &vop_getattr_desc, lfs_getattr }, /* getattr */ @@ -137,11 +137,11 @@ const struct vnodeopv_entry_desc lfs_vno { &vop_seek_desc, ulfs_seek }, /* seek */ { &vop_remove_desc, lfs_remove }, /* remove */ { &vop_link_desc, lfs_link }, /* link */ { &vop_rename_desc, lfs_rename }, /* rename */ - { &vop_mkdir_desc, lfs_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, lfs_mkdir }, /* mkdir */ { &vop_rmdir_desc, lfs_rmdir }, /* rmdir */ - { &vop_symlink_desc, lfs_symlink }, /* symlink */ + { &vop_symlink1_desc, lfs_symlink }, /* symlink */ { &vop_readdir_desc, ulfs_readdir }, /* readdir */ { &vop_readlink_desc, ulfs_readlink }, /* readlink */ { &vop_abortop_desc, ulfs_abortop }, /* abortop */ { &vop_inactive_desc, lfs_inactive }, /* inactive */ @@ -171,10 +171,10 @@ const struct vnodeopv_desc lfs_vnodeop_o int (**lfs_specop_p)(void *); const struct vnodeopv_entry_desc lfs_specop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, spec_lookup }, /* lookup */ - { &vop_create_desc, spec_create }, /* create */ - { &vop_mknod_desc, spec_mknod }, /* mknod */ + { &vop_create1_desc, spec_create }, /* create */ + { &vop_mknod1_desc, spec_mknod }, /* mknod */ { &vop_open_desc, spec_open }, /* open */ { &vop_close_desc, lfsspec_close }, /* close */ { &vop_access_desc, ulfs_access }, /* access */ { &vop_getattr_desc, lfs_getattr }, /* getattr */ @@ -191,11 +191,11 @@ const struct vnodeopv_entry_desc lfs_spe { &vop_seek_desc, spec_seek }, /* seek */ { &vop_remove_desc, spec_remove }, /* remove */ { &vop_link_desc, spec_link }, /* link */ { &vop_rename_desc, spec_rename }, /* rename */ - { &vop_mkdir_desc, spec_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, spec_mkdir }, /* mkdir */ { &vop_rmdir_desc, spec_rmdir }, /* rmdir */ - { &vop_symlink_desc, spec_symlink }, /* symlink */ + { &vop_symlink1_desc, spec_symlink }, /* symlink */ { &vop_readdir_desc, spec_readdir }, /* readdir */ { &vop_readlink_desc, spec_readlink }, /* readlink */ { &vop_abortop_desc, spec_abortop }, /* abortop */ { &vop_inactive_desc, lfs_inactive }, /* inactive */ @@ -225,10 +225,10 @@ const struct vnodeopv_desc lfs_specop_op int (**lfs_fifoop_p)(void *); const struct vnodeopv_entry_desc lfs_fifoop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, vn_fifo_bypass }, /* lookup */ - { &vop_create_desc, vn_fifo_bypass }, /* create */ - { &vop_mknod_desc, vn_fifo_bypass }, /* mknod */ + { &vop_create1_desc, vn_fifo_bypass }, /* create */ + { &vop_mknod1_desc, vn_fifo_bypass }, /* mknod */ { &vop_open_desc, vn_fifo_bypass }, /* open */ { &vop_close_desc, lfsfifo_close }, /* close */ { &vop_access_desc, ulfs_access }, /* access */ { &vop_getattr_desc, lfs_getattr }, /* getattr */ @@ -245,11 +245,11 @@ const struct vnodeopv_entry_desc lfs_fif { &vop_seek_desc, vn_fifo_bypass }, /* seek */ { &vop_remove_desc, vn_fifo_bypass }, /* remove */ { &vop_link_desc, vn_fifo_bypass }, /* link */ { &vop_rename_desc, vn_fifo_bypass }, /* rename */ - { &vop_mkdir_desc, vn_fifo_bypass }, /* mkdir */ + { &vop_mkdir1_desc, vn_fifo_bypass }, /* mkdir */ { &vop_rmdir_desc, vn_fifo_bypass }, /* rmdir */ - { &vop_symlink_desc, vn_fifo_bypass }, /* symlink */ + { &vop_symlink1_desc, vn_fifo_bypass }, /* symlink */ { &vop_readdir_desc, vn_fifo_bypass }, /* readdir */ { &vop_readlink_desc, vn_fifo_bypass }, /* readlink */ { &vop_abortop_desc, vn_fifo_bypass }, /* abortop */ { &vop_inactive_desc, lfs_inactive }, /* inactive */ @@ -662,8 +662,9 @@ lfs_mknod(void *v) if (error != 0) { *vpp = NULL; return (error); } + VOP_UNLOCK(*vpp); return (0); } int Index: sys/ufs/lfs/ulfs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/ufs/lfs/ulfs_vnops.c,v retrieving revision 1.18 diff -p -u -4 -r1.18 ulfs_vnops.c --- sys/ufs/lfs/ulfs_vnops.c 28 Jul 2013 01:10:49 -0000 1.18 +++ sys/ufs/lfs/ulfs_vnops.c 4 Jan 2014 09:32:30 -0000 @@ -150,8 +150,9 @@ ulfs_create(void *v) return (error); } fstrans_done(dvp->v_mount); VN_KNOTE(dvp, NOTE_WRITE); + VOP_UNLOCK(*ap->a_vpp); return (0); } /* @@ -840,8 +841,9 @@ ulfs_mkdir(void *v) pool_cache_put(ulfs_direct_cache, newdir); bad: if (error == 0) { VN_KNOTE(dvp, NOTE_WRITE | NOTE_LINK); + VOP_UNLOCK(tvp); } else { dp->i_nlink--; DIP_ASSIGN(dp, nlink, dp->i_nlink); dp->i_flag |= IN_CHANGE; @@ -997,10 +999,11 @@ ulfs_symlink(void *v) } else error = vn_rdwr(UIO_WRITE, vp, ap->a_target, len, (off_t)0, UIO_SYSSPACE, IO_NODELOCKED | IO_JOURNALLOCKED, ap->a_cnp->cn_cred, NULL, NULL); + VOP_UNLOCK(vp); if (error) - vput(vp); + vrele(vp); out: fstrans_done(ap->a_dvp->v_mount); return (error); } Index: sys/ufs/mfs/mfs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/ufs/mfs/mfs_vnops.c,v retrieving revision 1.54 diff -p -u -4 -r1.54 mfs_vnops.c --- sys/ufs/mfs/mfs_vnops.c 24 Jun 2010 13:03:19 -0000 1.54 +++ sys/ufs/mfs/mfs_vnops.c 4 Jan 2014 09:32:30 -0000 @@ -58,10 +58,10 @@ __KERNEL_RCSID(0, "$NetBSD: mfs_vnops.c, int (**mfs_vnodeop_p)(void *); const struct vnodeopv_entry_desc mfs_vnodeop_entries[] = { { &vop_default_desc, vn_default_error }, { &vop_lookup_desc, mfs_lookup }, /* lookup */ - { &vop_create_desc, mfs_create }, /* create */ - { &vop_mknod_desc, mfs_mknod }, /* mknod */ + { &vop_create1_desc, mfs_create }, /* create */ + { &vop_mknod1_desc, mfs_mknod }, /* mknod */ { &vop_open_desc, mfs_open }, /* open */ { &vop_close_desc, mfs_close }, /* close */ { &vop_access_desc, mfs_access }, /* access */ { &vop_getattr_desc, mfs_getattr }, /* getattr */ @@ -76,11 +76,11 @@ const struct vnodeopv_entry_desc mfs_vno { &vop_seek_desc, mfs_seek }, /* seek */ { &vop_remove_desc, mfs_remove }, /* remove */ { &vop_link_desc, mfs_link }, /* link */ { &vop_rename_desc, mfs_rename }, /* rename */ - { &vop_mkdir_desc, mfs_mkdir }, /* mkdir */ + { &vop_mkdir1_desc, mfs_mkdir }, /* mkdir */ { &vop_rmdir_desc, mfs_rmdir }, /* rmdir */ - { &vop_symlink_desc, mfs_symlink }, /* symlink */ + { &vop_symlink1_desc, mfs_symlink }, /* symlink */ { &vop_readdir_desc, mfs_readdir }, /* readdir */ { &vop_readlink_desc, mfs_readlink }, /* readlink */ { &vop_abortop_desc, mfs_abortop }, /* abortop */ { &vop_inactive_desc, mfs_inactive }, /* inactive */ Index: sys/ufs/ufs/ufs_vnops.c =================================================================== RCS file: /cvsroot/src/sys/ufs/ufs/ufs_vnops.c,v retrieving revision 1.218 diff -p -u -4 -r1.218 ufs_vnops.c --- sys/ufs/ufs/ufs_vnops.c 15 Sep 2013 15:32:18 -0000 1.218 +++ sys/ufs/ufs/ufs_vnops.c 4 Jan 2014 09:32:30 -0000 @@ -162,8 +162,9 @@ ufs_create(void *v) } UFS_WAPBL_END1(dvp->v_mount, dvp); fstrans_done(dvp->v_mount); VN_KNOTE(dvp, NOTE_WRITE); + VOP_UNLOCK(*ap->a_vpp); return (0); } /* @@ -237,8 +238,9 @@ out: if (error != 0) { *vpp = NULL; return (error); } + VOP_UNLOCK(*vpp); return (0); } /* @@ -1101,8 +1103,9 @@ ufs_mkdir(void *v) pool_cache_put(ufs_direct_cache, newdir); bad: if (error == 0) { VN_KNOTE(dvp, NOTE_WRITE | NOTE_LINK); + VOP_UNLOCK(tvp); UFS_WAPBL_END(dvp->v_mount); } else { dp->i_nlink--; DIP_ASSIGN(dp, nlink, dp->i_nlink); @@ -1283,10 +1286,11 @@ ufs_symlink(void *v) error = vn_rdwr(UIO_WRITE, vp, ap->a_target, len, (off_t)0, UIO_SYSSPACE, IO_NODELOCKED | IO_JOURNALLOCKED, ap->a_cnp->cn_cred, NULL, NULL); UFS_WAPBL_END1(ap->a_dvp->v_mount, ap->a_dvp); + VOP_UNLOCK(vp); if (error) - vput(vp); + vrele(vp); out: fstrans_done(ap->a_dvp->v_mount); return (error); }