From owner-dev-commits-src-main@freebsd.org Fri May 14 18:25:37 2021 Return-Path: Delivered-To: dev-commits-src-main@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B9E8964FC2F; Fri, 14 May 2021 18:25:37 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: from mail-lj1-x233.google.com (mail-lj1-x233.google.com [IPv6:2a00:1450:4864:20::233]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4FhcQn4ktHz4s0M; Fri, 14 May 2021 18:25:37 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: by mail-lj1-x233.google.com with SMTP id 131so13505876ljj.3; Fri, 14 May 2021 11:25:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=0rnukEjPFahhmoOV2kNSHvE/AU3FMBOCrLgsgVIVe3c=; b=MNoNNQU+CH127VgBH3mOJq/cSVOQRR5vXWtF+t6aB2xZzgaMbv0EmfH3/U+qHm+f4o jxJ0B/NIwZfGyGYOOT0lY1qNhkOU4aOjRbiy7tZKP1yStU5CQekV1IdrWS6dUkvWmB08 +2pF49vAtZS2YrrLlMrybVC2OLgSum8bB1DYp6W4qqq5bqdBBE/qNkvuJSUodUVCCs8+ b3cSiCL3meqw8eCrXndvBBHklpuZmRXmHbS39SY5vggxe7YrSEu0m/Bvi8Q34CC2/YDz UeZ53kVTlGVhRP4PRbzEdgSmwuecIqzxuO4cdqAz7vvN2N2o5M094A75MCpW8dSol93l RlzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=0rnukEjPFahhmoOV2kNSHvE/AU3FMBOCrLgsgVIVe3c=; b=YHA8HdtlRRWvISLnWu3j0CyaS6q2Q57DBkMmv4qWqtF+wzqBu44hNerSsv2fiZOxfw d4/RWnCZ/CMxl52jfBGd3oJ0do9Nh5TxFY0v5nTDip3UxZGDg7DamO1xmPB2Pw7iM3XF ihZM8JfMLKNKCmahxw2lcn7Nl3FFhxgTBrkbySR1OBwnyhNkXirIVGOzI+BmGtL2l0Qz 92ciM+bbGT3g/BojdJXdZmGDgYjNdQzTo9/6vCMgmZQrmFOhj+FQZZmLGLXPxAeQ7qvL wNH+IzgR9t7XPUmDrQPVnQnYdIy0DGHWE9fEKD0jvH+RFi7c4Ay4ZUM2dDmpFh7TlJlI uXbg== X-Gm-Message-State: AOAM531iyYQNldUv9xlzplNUlQprUWfX1qPWzHM+iCoNy8Fug4aGuYhh jCxO1ntKsYb9TANgy6mKJ+kFD65FU0F9UPD9RFs= X-Google-Smtp-Source: ABdhPJz0JG4Ry5w2zjXjR052zsl8SWva7DkfwpbBPahqbWbiw2Kw20vmBUyzOpP4YO7+pRepYI+WKRRjvOcwlv7ax/4= X-Received: by 2002:a2e:b605:: with SMTP id r5mr37633937ljn.483.1621016735854; Fri, 14 May 2021 11:25:35 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a05:651c:485:0:0:0:0 with HTTP; Fri, 14 May 2021 11:25:35 -0700 (PDT) In-Reply-To: References: <202105141423.14EENtDX058648@gitrepo.freebsd.org> From: Mateusz Guzik Date: Fri, 14 May 2021 20:25:35 +0200 Message-ID: Subject: Re: git: b5fb9ae6872c - main - vfs: lockless writecount adjustment in set/unset text To: Konstantin Belousov Cc: src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 4FhcQn4ktHz4s0M X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[] X-BeenThere: dev-commits-src-main@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for the main branch of the src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 May 2021 18:25:37 -0000 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 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 >> AuthorDate: 2021-05-07 14:04:27 +0000 >> Commit: Mateusz Guzik >> 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