From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id D3B0BC4332F for ; Tue, 14 Nov 2023 15:57:12 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5783A6B02E2; Tue, 14 Nov 2023 10:57:12 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 501A86B02E4; Tue, 14 Nov 2023 10:57:12 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3CA3C6B02E5; Tue, 14 Nov 2023 10:57:12 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 2D7556B02E2 for ; Tue, 14 Nov 2023 10:57:12 -0500 (EST) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id E5AD08047C for ; Tue, 14 Nov 2023 15:57:11 +0000 (UTC) X-FDA: 81457013862.14.3BC6D4C Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf15.hostedemail.com (Postfix) with ESMTP id 34493A001B for ; Tue, 14 Nov 2023 15:57:08 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=umn8h7gl; dmarc=none; spf=none (imf15.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1699977429; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=XQcDDRiPB4/U3WzhS/keMRc1+CiDCqiCYGWzXZFZ6Yg=; b=DQjVItqlT1kAldve/+MkE4zFndz14m5XNAZ/KS3VMLSu+vPOFjnZ4z3g+MaEP2qXUtuXFI dwS96IHk7SEHKYJA7dwJLupKMrjsTzA0nfWAR/GlA71SHRkvN1ahc3CpRqlTfOR03eaTOa C6aMvQCTKRGgZPplft09RmgH4ecgRVM= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=umn8h7gl; dmarc=none; spf=none (imf15.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1699977429; a=rsa-sha256; cv=none; b=I7pbGzW0JNx0dJWYKh9ijrHMMblZFZGXqVS62aei71LANz/3+N5jdrhR7+VHe3LeKqFdw5 PX8dwGOTXYvdYcCs5YyUEfSg5nLNXuaiQ9S/Pw2Bv2PtmA1jVHrl6wewCNXApCMRXlzmFa zFzgkPzEqqNW7RP+gWPM/USA5tU+47U= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=XQcDDRiPB4/U3WzhS/keMRc1+CiDCqiCYGWzXZFZ6Yg=; b=umn8h7glIKiD/gqAgbTCpzBKQf iht40jDhzBv98P98+YELlNjNjqDlbWgXK/y96jE1A2cghNWBEcJ7qtJUczpdbQwq8+471+NMmKbaJ EBoYEtQExXfmftHOp5AdlPJwLoURTn8oIoZ80gcLDn3LZ50H6hBawONRc1uIZsRMisa/sY9xrlyGd f+Z7nzBEXJXxtaUp9+NUGftNii0VPS5nhaW04Klqp8dXLZqrQ4syaqYMyBYRzYTi7CdtI9EZiYQLA H5qRTEJF6GzG6Ve+OltugprPEfvTfeRNPPIgIkv28K4ssoLQm46QL4VgRg4NvEVRiCXS4XV2Nt76t 5z/IxQcg==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1r2vmU-008qNx-HY; Tue, 14 Nov 2023 15:56:50 +0000 Date: Tue, 14 Nov 2023 15:56:50 +0000 From: Matthew Wilcox To: Chuck Lever Cc: akpm@linux-foundation.org, brauner@kernel.org, hughd@google.com, jlayton@redhat.com, viro@zeniv.linux.org.uk, Tavian Barnes , Chuck Lever , linux-fsdevel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH RFC] libfs: getdents() should return 0 after reaching EOD Message-ID: References: <169997697704.4588.14555611205729567800.stgit@bazille.1015granger.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <169997697704.4588.14555611205729567800.stgit@bazille.1015granger.net> X-Rspamd-Queue-Id: 34493A001B X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: yunrhurn8163huh6kethmk1ez3h91g77 X-HE-Tag: 1699977428-762041 X-HE-Meta: U2FsdGVkX1+CHpFjRvuX/lPQZTw2TcVANQj5wUfFWdwLBSZLR73YK44cQyi8pFZ12Ti7xPdAQ0/eKtbKUB1WxR9KoIkpfpgAuYkzh87BqddqtJ5OVxX9b53gftxNhQMw4lqoPf7mp0W2rfNU+FYnBYY5NrLRvGmZMLhrwuDQCZHHGNh9fGNmHgR9BldhJaZ8tJ+TjpCqZKgzQafZt9ifgfCfDXHv/rOqhDbWPnJTnOf1TXKmktynLn6MKgsPk9m5d3071YzM+o768aayBEoow/amMGYuob2N5TegU4sfcFc+stmBH7PXHhVBSkHGz2BGy4XOgNn66LEpwJ1ZtsDuc/iAJ2FhaGjcgDesyFTTV13yq2QC4dF06K0DXn8Qn2UdaLlpVjnS3MRez3uJLx54+t/XyOc3lUEjRvqPnaMDv8WYBDKM7wUI0UnWKQkIYn7s8Zd8wDy+ApypeiHCRY4hjPqMyoQADKVgdRcztfnm/RkTFmmJaIWBLKqpBhmdUbasroX5XrC0xWN+IUhHf/d2XmjReFvlAnYpb4dHOvgMYHR3787v/Lbg0Sl07qgq85sxZ9loTOmCHntAC9mn3zWPUgWWVmNe8seH/8dnaKSNi3DTfMi1L48zIJW8D4jVkJeo83hGkOzu1sZdhGqC4A4llWwkwrzV3/6R0vrLaLiNzHwK4dINlJA4fFhxJS74WIlt583wvxTbuQgOqq9yGHQgikneuJEOeXo1W7jFpvRUWRftGHaUim2n5TWpxCEsgsacz1M7eaa9aXVwWn/1XtLTIkCVEmAa0FjCcv6qzCaQ7STjYVtMAIp4n1gm9chtP8glPwTeCKSa76dYFJWrbPT8WR9niernemaHnTFS7jb/nET1NnTE7DMnGiGiVvv4vZLlFnquHe3dxbLaOlbBAok71sipn0DDbVgTblVtuLFKxdZQWuZGBY9BloaAWB4PM+m2UyV6np+Y80/GqoX+1B9 DIfmyf2X C5B/peU9PULfawu1KAm25KwzszspfK49sN+8JZnQktzVEluwExheVNVHT9SHhkXlVXqF370c42apQn/avlHk3cKE4FoN8T8orXUni8pJLGDatCtOzKf/CJUVXNMM8jp04VPMapzlVA5GGCFo= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Tue, Nov 14, 2023 at 10:49:37AM -0500, Chuck Lever wrote: > -static void offset_iterate_dir(struct inode *inode, struct dir_context *ctx) > +static void *offset_iterate_dir(struct inode *inode, struct dir_context *ctx) > { > struct offset_ctx *so_ctx = inode->i_op->get_offset_ctx(inode); > XA_STATE(xas, &so_ctx->xa, ctx->pos); > @@ -437,7 +437,8 @@ static void offset_iterate_dir(struct inode *inode, struct dir_context *ctx) > while (true) { > dentry = offset_find_next(&xas); > if (!dentry) > - break; > + /* readdir has reached the current EOD */ > + return (void *)0x10; Funny, you used the same bit pattern as ZERO_SIZE_PTR without using the macro ... > @@ -479,7 +481,12 @@ static int offset_readdir(struct file *file, struct dir_context *ctx) > if (!dir_emit_dots(file, ctx)) > return 0; > > - offset_iterate_dir(d_inode(dir), ctx); > + if (ctx->pos == 2) > + file->private_data = NULL; > + else if (file->private_data == (void *)0x10) > + return 0; > + > + file->private_data = offset_iterate_dir(d_inode(dir), ctx); > return 0; > } It might make more sense to use ERR_PTR(-ENOENT) or ERANGE or something that's a more understandable sentinel value?