Even tmpfs can go without the interlock. The code can check if it transitioned across 0 and act accordingly and conditionally vref based on that.
I did not check if said transition is safe without the interlock vs other users, so I did not go for it. Arguably both exec and write counts could be treated the same way, would have a side effect of avoiding VI_LOCK_FLAGS(vp, MTX_DUPOK);. Maybe i'll look into it today or tomorrow. On 5/14/21, Konstantin Belousov <kostik...@gmail.com> wrote: > On Fri, May 14, 2021 at 02:23:55PM +0000, Mateusz Guzik wrote: >> The branch main has been updated by mjg: >> >> URL: >> https://cgit.FreeBSD.org/src/commit/?id=b5fb9ae6872c499f1a02bec41f48b163a73a2aaa >> >> commit b5fb9ae6872c499f1a02bec41f48b163a73a2aaa >> Author: Mateusz Guzik <m...@freebsd.org> >> AuthorDate: 2021-05-07 14:04:27 +0000 >> Commit: Mateusz Guzik <m...@freebsd.org> >> CommitDate: 2021-05-14 14:22:21 +0000 >> >> vfs: lockless writecount adjustment in set/unset text >> >> ... for cases where this is not the first/last exec. >> --- >> sys/kern/vfs_default.c | 32 ++++++++++++++++++++++++++++++-- >> 1 file changed, 30 insertions(+), 2 deletions(-) >> >> diff --git a/sys/kern/vfs_default.c b/sys/kern/vfs_default.c >> index cf224981cbe7..3518bbeaa279 100644 >> --- a/sys/kern/vfs_default.c >> +++ b/sys/kern/vfs_default.c >> @@ -1177,9 +1177,23 @@ vop_stdset_text(struct vop_set_text_args *ap) >> { >> struct vnode *vp; >> struct mount *mp; >> - int error; >> + int error, n; >> >> vp = ap->a_vp; >> + >> + /* >> + * Avoid the interlock if execs are already present. >> + */ >> + n = atomic_load_int(&vp->v_writecount); >> + for (;;) { >> + if (n > -1) { >> + break; > If you split the VOP for tmpfs/non-tmpfs implementations, then > non-tmpfs can go with the atomics only. > -- Mateusz Guzik <mjguzik gmail.com> _______________________________________________ dev-commits-src-main@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"