From nobody Tue Dec 17 19:19:26 2024 X-Original-To: freebsd-current@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4YCRTB6DTxz5hc1n for ; Tue, 17 Dec 2024 19:19:42 +0000 (UTC) (envelope-from asomers@gmail.com) Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) (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 "WR4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4YCRT93XcMz4RTx for ; Tue, 17 Dec 2024 19:19:41 +0000 (UTC) (envelope-from asomers@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=none; spf=pass (mx1.freebsd.org: domain of asomers@gmail.com designates 209.85.208.54 as permitted sender) smtp.mailfrom=asomers@gmail.com; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=freebsd.org (policy=none) Received: by mail-ed1-f54.google.com with SMTP id 4fb4d7f45d1cf-5d27243ba8bso1120055a12.2 for ; Tue, 17 Dec 2024 11:19:41 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734463179; x=1735067979; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=9OH733AY6ZQx12b7Yfs80B25jygvB5Cm2C+B362ndwU=; b=ITH9n6wkt6/JKFoP1Xqpeo4a0VJvRQr2027GS8YKAMaLL4VeX2avwlB9pJuvX0NokZ HZAnCgikNHROjJkT26AFHp7tp+GXx+y+mLInrOI0UooI3Z81gjMwaruBvD5lT2WncvqD lc9zNhUxmkuR7RKlHm2jcKMUlUQGDmXM59T9lDmJXlFNt2LDfg6Ave9O2ok28RMAM83J SpT3EUd0ZmT2JXbhtTXyCdJ1n0rfvUlf7b/hEXB6vgxdhHW91BJ6oRPlnogBQkZeYIfR AZQX/0H5Uh6lSPO3pDQ3qpCHunDwj+g78378ZNKFFqqXCQhUoeTlaapDrwSB9OIwlgGJ c9OA== X-Gm-Message-State: AOJu0YxyWrItIc0Jc+fKd9MLZW9fhS90SVUuRTKHLCDw7pBxtN5PhYP3 qIhEjRzYzM9kzu5yLn0N2Izc+tca8r1SL8B2VW0PlkGT5U3xrSodcqtXq3YVm5xE5e3DrEhTIuJ D6/ZsRXewcs4Jg2QN7FEKO51iX/folKNp X-Gm-Gg: ASbGncuh1T2j3VfK+GuaHNdlXhA9GKLC5XM6abRYsq1Lnwd00uOF2dPgUNs1ur7ywZl Qu/mbUhyswwuVzcz9KLy02edoedEpGQ/UOvHPTA== X-Google-Smtp-Source: AGHT+IECv+mUIb/+vB8rnVVNKXo5RoQ0Ej3dnSjgHQTLB93vEIZb1Fp86qaKg/eDf0DI/R75+wWs3826YLXxLFTBNcU= X-Received: by 2002:a05:6402:5203:b0:5d0:ee52:353e with SMTP id 4fb4d7f45d1cf-5d7ee4242d0mr200184a12.29.1734463178858; Tue, 17 Dec 2024 11:19:38 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@FreeBSD.org MIME-Version: 1.0 From: Alan Somers Date: Tue, 17 Dec 2024 12:19:26 -0700 Message-ID: Subject: Why does namei return an exclusively locked vnode when LOCKSHARED is specified? To: FreeBSD CURRENT Content-Type: text/plain; charset="UTF-8" X-Spamd-Result: default: False [0.37 / 15.00]; SUBJECT_ENDS_QUESTION(1.00)[]; NEURAL_HAM_MEDIUM(-0.60)[-0.605]; FORGED_SENDER(0.30)[asomers@freebsd.org,asomers@gmail.com]; NEURAL_HAM_SHORT(-0.21)[-0.206]; R_SPF_ALLOW(-0.20)[+ip4:209.85.128.0/17]; DMARC_POLICY_SOFTFAIL(0.10)[freebsd.org : SPF not aligned (relaxed), No valid DKIM,none]; MIME_GOOD(-0.10)[text/plain]; NEURAL_SPAM_LONG(0.08)[0.080]; TO_DN_ALL(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_LAST(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; FROM_HAS_DN(0.00)[]; RCVD_COUNT_ONE(0.00)[1]; FREEMAIL_ENVFROM(0.00)[gmail.com]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; PREVIOUSLY_DELIVERED(0.00)[freebsd-current@freebsd.org]; FROM_NEQ_ENVFROM(0.00)[asomers@freebsd.org,asomers@gmail.com]; MISSING_XM_UA(0.00)[]; R_DKIM_NA(0.00)[]; RWL_MAILSPIKE_POSSIBLE(0.00)[209.85.208.54:from]; TO_DOM_EQ_FROM_DOM(0.00)[]; FREEFALL_USER(0.00)[asomers]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US]; RCVD_IN_DNSWL_NONE(0.00)[209.85.208.54:from] X-Rspamd-Queue-Id: 4YCRT93XcMz4RTx X-Spamd-Bar: / According to namei(9), namei should return a shared lock when LOCKSHARED is specified. But in my experiments, it always seems to return an exclusive lock instead. For example: $ cd /usr/tests/sys/fs/fusefs $ sudo dtrace -i 'fbt:fusefs:fuse_vnop_getattr:entry /pid==$target/ {printf("islocked=%#x", args[0]->a_vp->v_vnlock->lk_lock); stack();}' -i 'fbt:kernel:vop_stdstat:entry /pid==$target/ {printf("islocked=%#x", args[0]->a_vp->v_vnlock->lk_lock);}' -c "./getattr --gtest_filter=Getattr.attr_cache -v" [==========] Running 1 test from 1 test suite. [----------] Global test environment set-up. [----------] 1 test from Getattr [ RUN ] Getattr.attr_cache INIT ino= 0 ACCESS ino= 1 mask=0x1 LOOKUP ino= 1 some_file.txt GETATTR ino=42 [ OK ] Getattr.attr_cache (3 ms) [----------] 1 test from Getattr (3 ms total) [----------] Global test environment tear-down [==========] 1 test from 1 test suite ran. (4 ms total) [ PASSED ] 1 test. CPU ID FUNCTION:NAME 3 19743 vop_stdstat:entry islocked=0x21 3 19743 vop_stdstat:entry islocked=0xfffff80004f16740 3 68298 fuse_vnop_getattr:entry islocked=0xfffff80004f16740 kernel`VOP_GETATTR_APV+0x90 kernel`vop_stdstat+0x147 kernel`VOP_STAT_APV+0x91 kernel`kern_statat+0x183 kernel`sys_fstatat+0x27 kernel`amd64_syscall+0x1af kernel`0xffffffff8106cd5b 3 19743 vop_stdstat:entry islocked=0xfffff80004f16740 3 68298 fuse_vnop_getattr:entry islocked=0xfffff80004f16740 kernel`VOP_GETATTR_APV+0x90 kernel`vop_stdstat+0x147 kernel`VOP_STAT_APV+0x91 kernel`kern_statat+0x183 kernel`sys_fstatat+0x27 kernel`amd64_syscall+0x1af kernel`0xffffffff8106cd5b dtrace: pid 3554 has exited From that output, the first vop_stdstat is probably for the mountpoint, and isn't what I'm concerned about. But the second two are for a fusefs file. The LK_SHARE bit is not set, indicating an exclusive lock. That's even though the call to namei in kern_statat specifies LOCKSHARED | LOCKLEAF. What am I missing?