Received: by 2002:a05:6a10:9e8c:0:0:0:0 with SMTP id y12csp3494175pxx; Mon, 2 Nov 2020 10:18:51 -0800 (PST) X-Google-Smtp-Source: ABdhPJx9Cfx62AuMJ5Gi/t/H3jVyyf6B6SJ6dNwRYzqS7IfugxLgcpXPHCD3pZggylNY9deXyfLv X-Received: by 2002:a17:907:2677:: with SMTP id ci23mr16486234ejc.270.1604341130803; Mon, 02 Nov 2020 10:18:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604341130; cv=none; d=google.com; s=arc-20160816; b=v6+yVd2gkSwtf9vPuSfwT5thprWZlYCtMwgzbubBCJUw3A0Lrf/vzOxjx6xOhfb+Rf rxzogECNFXYGcVYzcYE9Vc6uSh6TTVmX2rZCINMq9yu7kkijzB0/O5TvGGHe7+D6c5Gj ixtdC/NaG2G7EdLgX6vTEtrTyiHqgN1k5Lm94fPn5Dj3gT5xDkGH/VTOB45HZotE20Re tGONgVsI8/bKtCfX0SLVikZ727jBdLHApCWwCvja9PGmvSUexCXFCFF9kaFWk3Ik1A08 QBgzxq0052ql/SmLEfv8qe36+80SrP7IXiaww+JhbCaIs4aObfIIyvG96u40YqkI7Tcv fnvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=uIT7c42oLJhGuQ4MC0Mb1wvuxjVAQj6q8C6vaQFmtk4=; b=XDq/RvHl19TIX4AX115JAD+IBv0eRLMTyNRFunAWN4csiEFxApj5D3bRCBEPD8WqL0 nqgulOfCOITRQo5ZdnOy+icrzjSMbcyrobw8jMrRLbQ7jjmrw9FrngqlCrK8tzriYXmb veLsU8NA1S2vaZr9pf0WIkzSW/Abx2rxBFQ+CnmWW039Tg5kliwrcWL++pDEUAmWRJdl 0NB7AsLux2IqYPiyR2NmoVEu1gwogdysIO/HAgpYPx/Bt4obSkGtsCYMc+pA7i1lvBSL hLRHJfDCB/0w9xlxLm3t06EpwAq84UKigIPUhBQ/CH6mMePVVz5zGVxYint9baA14Fdn dS1w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=y0Jp+bWL; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ga41si11422752ejc.620.2020.11.02.10.18.27; Mon, 02 Nov 2020 10:18:50 -0800 (PST) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=y0Jp+bWL; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726260AbgKBSR1 (ORCPT + 99 others); Mon, 2 Nov 2020 13:17:27 -0500 Received: from mail.kernel.org ([198.145.29.99]:40860 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726171AbgKBSRW (ORCPT ); Mon, 2 Nov 2020 13:17:22 -0500 Received: from localhost.localdomain (c-68-36-133-222.hsd1.mi.comcast.net [68.36.133.222]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 9985C22243 for ; Mon, 2 Nov 2020 18:17:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1604341041; bh=3wr7BivWD8kq0r12G3AOEQsS0qQNPXTmf8wMwj8LqFE=; h=From:To:Subject:Date:In-Reply-To:References:From; b=y0Jp+bWLULLpU5p+z+VBZ8UWp+c3tt3jdFRgykpLVYev5mK5nqmZLBVV+sxV4LNKu +Ht4cT3auxADK1NB63AMA7SFN79Suh82nNvaz++sRVB/YtGgaHW3QO4YxpY2G27QDY upk7vCwQX0cygFo+gBKHL/Oukwp8Y8o5qGb5NnBY= From: trondmy@kernel.org To: linux-nfs@vger.kernel.org Subject: [PATCH 03/12] NFS: Clean up nfs_readdir_page_filler() Date: Mon, 2 Nov 2020 13:06:49 -0500 Message-Id: <20201102180658.6218-4-trondmy@kernel.org> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201102180658.6218-3-trondmy@kernel.org> References: <20201102180658.6218-1-trondmy@kernel.org> <20201102180658.6218-2-trondmy@kernel.org> <20201102180658.6218-3-trondmy@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Trond Myklebust Clean up handling of the case where there are no entries in the readdir reply. Signed-off-by: Trond Myklebust --- fs/nfs/dir.c | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index 604ebe015387..68acbde3f914 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c @@ -601,16 +601,12 @@ int nfs_readdir_page_filler(nfs_readdir_descriptor_t *desc, struct nfs_entry *en struct xdr_stream stream; struct xdr_buf buf; struct page *scratch; - unsigned int count = 0; int status; scratch = alloc_page(GFP_KERNEL); if (scratch == NULL) return -ENOMEM; - if (buflen == 0) - goto out_nopages; - xdr_init_decode_pages(&stream, &buf, xdr_pages, buflen); xdr_set_scratch_buffer(&stream, page_address(scratch), PAGE_SIZE); @@ -619,27 +615,27 @@ int nfs_readdir_page_filler(nfs_readdir_descriptor_t *desc, struct nfs_entry *en entry->label->len = NFS4_MAXLABELLEN; status = xdr_decode(desc, entry, &stream); - if (status != 0) { - if (status == -EAGAIN) - status = 0; + if (status != 0) break; - } - - count++; if (desc->plus) nfs_prime_dcache(file_dentry(desc->file), entry, desc->dir_verifier); status = nfs_readdir_add_to_array(entry, page); - if (status != 0) - break; - } while (!entry->eof); + } while (!status && !entry->eof); -out_nopages: - if (count == 0 || (status == -EBADCOOKIE && entry->eof != 0)) { - nfs_readdir_page_set_eof(page); + switch (status) { + case -EBADCOOKIE: + if (entry->eof) { + nfs_readdir_page_set_eof(page); + status = 0; + } + break; + case -ENOSPC: + case -EAGAIN: status = 0; + break; } put_page(scratch); @@ -714,14 +710,15 @@ int nfs_readdir_xdr_to_array(nfs_readdir_descriptor_t *desc, struct page *page, if (status < 0) break; + pglen = status; - status = nfs_readdir_page_filler(desc, &entry, pages, page, pglen); - if (status < 0) { - if (status == -ENOSPC) - status = 0; + if (pglen == 0) { + nfs_readdir_page_set_eof(page); break; } - } while (!nfs_readdir_array_is_full(array)); + + status = nfs_readdir_page_filler(desc, &entry, pages, page, pglen); + } while (!status && !nfs_readdir_array_is_full(array)); nfs_readdir_free_pages(pages, array_size); out_release_array: -- 2.28.0