Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp961490rdb; Wed, 6 Dec 2023 05:10:34 -0800 (PST) X-Google-Smtp-Source: AGHT+IGFi9mhaSL6Xpk/Gz/KTfSrWXNJz9J+H+0GHWENXpY8ym3sJd4IymMjyJrSUIp8y/itViDv X-Received: by 2002:a05:6a20:7292:b0:187:9521:92b4 with SMTP id o18-20020a056a20729200b00187952192b4mr609387pzk.19.1701868234531; Wed, 06 Dec 2023 05:10:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701868234; cv=none; d=google.com; s=arc-20160816; b=tcUHhqOFbQ9Mvajg6GJQRKsIg/gamZiKFsEnMRxUZK1tjFocqAiatRNlsYHviYL/+w +zEMt7du043kh0clbAyCJ39f6Nprw9crcSfZw5RZUwWZ1GpMZdZH6QqgqME8kdgZ7S6r xvh2lZ32id5QwpFMCg5UdauwMGriHN8w78Aq/sETWt+xACq0sKJ7oP9uN8qOypwRoF5x ituIJMwE5SE0fdlsIBm4tKxLLoToeMN69XqeTJvOed0TOFs7MtlfVMKT3Dgj5ashW4ci PAKCnPfktLe3Slr4SA8HIlhsQapFaDi5ag08GsEtkjzpdVvGVXx03Lcz/oEd/0a2lL5k oLZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:cc:to :from:dkim-signature; bh=WLuYPO7/SYyjB60zU4sK9lHjmGO43aoXlJcxfyMjQPs=; fh=dXdNtVJPr8il1/MZpeJb8SRE7n/ThvZRbh1i/txUBcw=; b=yj0sH7rpe36qIv6FDeCCDPnT/eJ8n09nVSZYmKWoA4Kv7/U/PAHJgT+fc/LyaoFTk9 wxk6L33DC5OavMA9tzBfYepwuvEdZ7OUGDdieN5xYLl8Mg8pu5RAV0tUPOGQbMKoCd++ /Ji34VfekKe/Rx3jqi8ug6Ki3TR0sTujlNItyvBEBTE8QVuPRNGTNuNMIiwbDqhfUlu7 L0WdxkJDd+/dHYiMOi63++IPFxMn/ayThbaV5LKroTcmoji7dSmhO3v5FPoZ9D4PJE6d ukRb9c4d/WtZSUZphBOThFDkCZkaEy/fnPfAkpSDa48ntiId+ho6jsl+lKmfVqiJuGoe p/mg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=ADN7A9di; spf=pass (google.com: domain of linux-nfs+bounces-358-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-nfs+bounces-358-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id y7-20020a17090a134700b00286a26df523si5746886pjf.188.2023.12.06.05.10.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Dec 2023 05:10:34 -0800 (PST) Received-SPF: pass (google.com: domain of linux-nfs+bounces-358-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=ADN7A9di; spf=pass (google.com: domain of linux-nfs+bounces-358-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-nfs+bounces-358-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id F304A281C37 for ; Wed, 6 Dec 2023 13:10:33 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id EB92C3716D; Wed, 6 Dec 2023 13:10:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="ADN7A9di" X-Original-To: linux-nfs@vger.kernel.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2A3021A5 for ; Wed, 6 Dec 2023 05:10:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1701868227; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=WLuYPO7/SYyjB60zU4sK9lHjmGO43aoXlJcxfyMjQPs=; b=ADN7A9diPSvN40h9XWh5gbpVyfFhjacFj5AN5wenMyJpPBQuMX5QG4lUXP/iSQZsyY6XWd qZ16/J+leN4fcCmuH9yiH9lfvhnGEyIAYr02SqkkZZAb+2QTHSfPDu+mQ2djSZ1J2KcPOQ knLSOrrpAAs+BO0IxuSXGntMHGZts9w= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-122-QSVCtH0ZPf6U9pLVIE7-hA-1; Wed, 06 Dec 2023 08:10:23 -0500 X-MC-Unique: QSVCtH0ZPf6U9pLVIE7-hA-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 39F6F80BEC5; Wed, 6 Dec 2023 13:10:23 +0000 (UTC) Received: from bcodding.csb.redhat.com (unknown [10.22.48.3]) by smtp.corp.redhat.com (Postfix) with ESMTP id B94D82166B35; Wed, 6 Dec 2023 13:10:22 +0000 (UTC) From: Benjamin Coddington To: trond.myklebust@hammerspace.com, anna@kernel.org Cc: linux-nfs@vger.kernel.org, Christoph Hellwig Subject: [PATCH v2] NFSv4: Always ask for type with READDIR Date: Wed, 6 Dec 2023 08:10:22 -0500 Message-ID: Precedence: bulk X-Mailing-List: linux-nfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.6 Again we have claimed regressions for walking a directory tree, this time with the "find" utility which always tries to optimize away asking for any attributes until it has a complete list of entries. This behavior makes the readdir plus heuristic do the wrong thing, which causes a storm of GETATTRs to determine each entry's type in order to continue the walk. For v4 add the type attribute to each READDIR request to include it no matter the heuristic. This allows a simple `find` command to proceed quickly through a directory tree. Suggested-by: Jeff Layton Signed-off-by: Benjamin Coddington Reviewed-by: Jeff Layton Reviewed-by: Christoph Hellwig --- fs/nfs/nfs4xdr.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index deec76cf5afe..69406e60f391 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c @@ -1602,7 +1602,8 @@ static void encode_read(struct xdr_stream *xdr, const struct nfs_pgio_args *args static void encode_readdir(struct xdr_stream *xdr, const struct nfs4_readdir_arg *readdir, struct rpc_rqst *req, struct compound_hdr *hdr) { uint32_t attrs[3] = { - FATTR4_WORD0_RDATTR_ERROR, + FATTR4_WORD0_TYPE + | FATTR4_WORD0_RDATTR_ERROR, FATTR4_WORD1_MOUNTED_ON_FILEID, }; uint32_t dircount = readdir->count; @@ -1612,12 +1613,20 @@ static void encode_readdir(struct xdr_stream *xdr, const struct nfs4_readdir_arg unsigned int i; if (readdir->plus) { - attrs[0] |= FATTR4_WORD0_TYPE|FATTR4_WORD0_CHANGE|FATTR4_WORD0_SIZE| - FATTR4_WORD0_FSID|FATTR4_WORD0_FILEHANDLE|FATTR4_WORD0_FILEID; - attrs[1] |= FATTR4_WORD1_MODE|FATTR4_WORD1_NUMLINKS|FATTR4_WORD1_OWNER| - FATTR4_WORD1_OWNER_GROUP|FATTR4_WORD1_RAWDEV| - FATTR4_WORD1_SPACE_USED|FATTR4_WORD1_TIME_ACCESS| - FATTR4_WORD1_TIME_METADATA|FATTR4_WORD1_TIME_MODIFY; + attrs[0] |= FATTR4_WORD0_CHANGE + | FATTR4_WORD0_SIZE + | FATTR4_WORD0_FSID + | FATTR4_WORD0_FILEHANDLE + | FATTR4_WORD0_FILEID; + attrs[1] |= FATTR4_WORD1_MODE + | FATTR4_WORD1_NUMLINKS + | FATTR4_WORD1_OWNER + | FATTR4_WORD1_OWNER_GROUP + | FATTR4_WORD1_RAWDEV + | FATTR4_WORD1_SPACE_USED + | FATTR4_WORD1_TIME_ACCESS + | FATTR4_WORD1_TIME_METADATA + | FATTR4_WORD1_TIME_MODIFY; attrs[2] |= FATTR4_WORD2_SECURITY_LABEL; } /* Use mounted_on_fileid only if the server supports it */ -- 2.43.0