From patchwork Sun Aug 27 13:28:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hao Xu X-Patchwork-Id: 13367141 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 7FAA3C83F11 for ; Sun, 27 Aug 2023 13:30:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0AD30280001; Sun, 27 Aug 2023 09:30:36 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 05D8B8E0001; Sun, 27 Aug 2023 09:30:36 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E6781280001; Sun, 27 Aug 2023 09:30:35 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id D37FD8E0001 for ; Sun, 27 Aug 2023 09:30:35 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id A99D51201DC for ; Sun, 27 Aug 2023 13:30:35 +0000 (UTC) X-FDA: 81169969230.05.75DA089 Received: from out-246.mta1.migadu.com (out-246.mta1.migadu.com [95.215.58.246]) by imf05.hostedemail.com (Postfix) with ESMTP id E203410001A for ; Sun, 27 Aug 2023 13:30:33 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=khOm1xqj; spf=pass (imf05.hostedemail.com: domain of hao.xu@linux.dev designates 95.215.58.246 as permitted sender) smtp.mailfrom=hao.xu@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1693143034; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=M7eywqhb1fMAXTeyjh6BJsPONBLehGvo8wJ7nQSmBJs=; b=JtB7ESSytnIW08I4ojxUvIwkIW1J2vfvzlagx576jvtdpHf9KnKHMiXY5T0E4OBxVT6ZDb 7SRKQyoXMSKwQ9eRWbTwVaETPZfFb57tzdHSsFDvDr4g2jz0Ct6zNshtpysQs0qlgFqldF Eovw8k8TtO4fA+bb3BWaY1Tcmn9nH+o= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1693143034; a=rsa-sha256; cv=none; b=GNyoFonm+T4gtdfUDs0psRCyIKSXBebXyy8i9W0mlt/7wcVUauXpCwOo44h8gkYn1tlP7E viZEx4CSURAGmkGCxPkJbzXN8FzKpgFmRmzY7fOZpr4P+ZKVbUxCkHgeMTuLXAQiOma9D9 io2taCHEvkq7PkxBK9b2VpxL4un5qSw= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=khOm1xqj; spf=pass (imf05.hostedemail.com: domain of hao.xu@linux.dev designates 95.215.58.246 as permitted sender) smtp.mailfrom=hao.xu@linux.dev; dmarc=pass (policy=none) header.from=linux.dev X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1693143032; 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: in-reply-to:in-reply-to:references:references; bh=M7eywqhb1fMAXTeyjh6BJsPONBLehGvo8wJ7nQSmBJs=; b=khOm1xqjzQOlsKc47XQ2wnLOjuLxGwc+XfDxixj6hJjWBxivRVL9fw6eYA8IJoeNHelD6C SUgrSKu6uB34cMFyQmJmkAayvfASH0HpKYFjusAGKkd85NiwXc4z0BEmZwpbN0iGNr9iqa ll1Q4czDD51HD91ihhmFa2NNXU3DhMY= From: Hao Xu To: io-uring@vger.kernel.org, Jens Axboe Cc: Dominique Martinet , Pavel Begunkov , Christian Brauner , Alexander Viro , Stefan Roesch , Clay Harris , Dave Chinner , "Darrick J . Wong" , linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-cachefs@redhat.com, ecryptfs@vger.kernel.org, linux-nfs@vger.kernel.org, linux-unionfs@vger.kernel.org, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, linux-btrfs@vger.kernel.org, codalist@coda.cs.cmu.edu, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-mm@kvack.org, linux-nilfs@vger.kernel.org, devel@lists.orangefs.org, linux-cifs@vger.kernel.org, samba-technical@lists.samba.org, linux-mtd@lists.infradead.org, Wanpeng Li Subject: [PATCH 01/11] fs: split off vfs_getdents function of getdents64 syscall Date: Sun, 27 Aug 2023 21:28:25 +0800 Message-Id: <20230827132835.1373581-2-hao.xu@linux.dev> In-Reply-To: <20230827132835.1373581-1-hao.xu@linux.dev> References: <20230827132835.1373581-1-hao.xu@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Stat-Signature: cr3au5qe3nk9h3u7jg583otegqztnw56 X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: E203410001A X-Rspam-User: X-HE-Tag: 1693143033-277504 X-HE-Meta: U2FsdGVkX19FusWKxyVlI1LRqkQBAHJ28bI1Xy4B6n26Cm+QAVBlTWZVwCWyWbagy+pz4/PzaMoJgFA+Xa13FlJCKK/zgs2D7zWGXf3+iWwdUYzU7DJMX8FqX4Ee0OZTdhR1/bxzB0s03IDqosjgqBixpnEsUfhSZ+d9CYwpYeFhgxWx/3N9wYBDA9bB1z+oDJ/L3p9UTQj01ypsC4jTYWqBCP7Yt74YAMKfLn53YfgTxpBqBQ/5WgpD7FdfPowWZDzf0f0fdsyzxECKTpxvYFjLAF+X2fkg7k2UKpeC7fGj4AjjRXOBHhPGDzuut/fd9brgO/02QoS9qXxyfoQlZbKeB30vlf0eo7o2zvxX5SNT2ZuBBNshbjpYDG/vAtmuRblGk1Yh1l2Wb+PqqEXmffTC0Ijswll2mqHjTjrq0TN5dCxSkhInfIRwkfPzaq/y98/Dy667f22U04i3oUfY/CF7yl6ww5GrTiiuHsOgTni7uzlmrYam+vZMS3KEmnZTrQt8psBX/f9krDKS3ni408GT+inwg9CRKj6xFLEBm5L22JjBsrPahTHTJB7DK6Z0T5W4im074WiQDyb26+4GVSI7tJp+POttUTPgxZRP9mZYGWTuwydVQqyFGh+WIiqLkj45UYc15z4NSyApyXt/ns3xasSlN0t0YzEpeQcQ6/dQYvdSpllwfEWEcwD3rF9s/U7cNvnfFAOu5UkN39TdQRZor+kopWO/P7MPEnnBBwNANy7NUBug8PT7JVXbfDOutgfNtw5QRakVdmWdBViurM001JleFlGwPOBVqAbS1oi9h0yEPkNQLVtceteazbXahR5bB0I/1n9tdlIT5my7VFLsZw1Ri9clWq2fXcxyhi+ndxU6AIdlDQxpn2IWcReNDQPn+W12ppJcsI7+utLwGL7r3fF9VTXtCOZ6tqB4u6fofciZh/9uTJg+pKQFU7NzRWxtPWswUE4jr3w45Zp LdkR89t4 X1Dr034Fs5sNo3GM5TWcarb/pV+2gcAIkV6UvqV6TNwCFza4DJhwDBCqpgwDYePi+pX1WyTBi4rcloIvGapRlKDsay66/EW04gYmqt2+0C/g4AX6kGM7JxTQZ1fE+RYV5k3CBj3yQYiGB2atMNYU8bFtnI8SRx+oP9KSISSsHK+Y8I+Tl3enjRc4GUMLdtWS/+oUL6s95yejM1AaNk7R9VF66s1rQagchaECiEoG2qH0BoXUF5C3fvUdxAMfHdkpKZX3UaixWBOAP1j2gaIAbWx48P2B77FPijeqouK+0/kZaaor50PNTwMC7yVXsAHBnuDMdUmMV5rte8ENIxO6Pl8jo/kEb3GqPTOEDl0am+uIGCYiTPD6NJ36t5mMcmqhzL8CINUXwxKAEZccY23cc5kBo7Dl+XqrKCdzquLSk8M0EYvh5jjXLNGcrIGD2Wgww1U12R1NtG7zoqM0= 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: From: Dominique Martinet This splits off the vfs_getdents function from the getdents64 system call. This will allow io_uring to call the vfs_getdents function. Co-developed-by: Stefan Roesch Signed-off-by: Stefan Roesch Signed-off-by: Dominique Martinet Signed-off-by: Hao Xu --- fs/internal.h | 8 ++++++++ fs/readdir.c | 34 ++++++++++++++++++++++++++-------- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/fs/internal.h b/fs/internal.h index f7a3dc111026..b1f66e52d61b 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -304,3 +304,11 @@ ssize_t __kernel_write_iter(struct file *file, struct iov_iter *from, loff_t *po struct mnt_idmap *alloc_mnt_idmap(struct user_namespace *mnt_userns); struct mnt_idmap *mnt_idmap_get(struct mnt_idmap *idmap); void mnt_idmap_put(struct mnt_idmap *idmap); + +/* + * fs/readdir.c + */ +struct linux_dirent64; + +int vfs_getdents(struct file *file, struct linux_dirent64 __user *dirent, + unsigned int count); diff --git a/fs/readdir.c b/fs/readdir.c index b264ce60114d..9592259b7e7f 100644 --- a/fs/readdir.c +++ b/fs/readdir.c @@ -21,6 +21,7 @@ #include #include #include +#include "internal.h" #include @@ -351,10 +352,16 @@ static bool filldir64(struct dir_context *ctx, const char *name, int namlen, return false; } -SYSCALL_DEFINE3(getdents64, unsigned int, fd, - struct linux_dirent64 __user *, dirent, unsigned int, count) + +/** + * vfs_getdents - getdents without fdget + * @file : pointer to file struct of directory + * @dirent : pointer to user directory structure + * @count : size of buffer + */ +int vfs_getdents(struct file *file, struct linux_dirent64 __user *dirent, + unsigned int count) { - struct fd f; struct getdents_callback64 buf = { .ctx.actor = filldir64, .count = count, @@ -362,11 +369,7 @@ SYSCALL_DEFINE3(getdents64, unsigned int, fd, }; int error; - f = fdget_pos(fd); - if (!f.file) - return -EBADF; - - error = iterate_dir(f.file, &buf.ctx); + error = iterate_dir(file, &buf.ctx); if (error >= 0) error = buf.error; if (buf.prev_reclen) { @@ -379,6 +382,21 @@ SYSCALL_DEFINE3(getdents64, unsigned int, fd, else error = count - buf.count; } + return error; +} + +SYSCALL_DEFINE3(getdents64, unsigned int, fd, + struct linux_dirent64 __user *, dirent, unsigned int, count) +{ + struct fd f; + int error; + + f = fdget_pos(fd); + if (!f.file) + return -EBADF; + + error = vfs_getdents(f.file, dirent, count); + fdput_pos(f); return error; }