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 9158FC83F09 for ; Tue, 8 Jul 2025 16:06:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 00E346B009A; Tue, 8 Jul 2025 12:06:44 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id F28466B009B; Tue, 8 Jul 2025 12:06:43 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E3E3A6B009C; Tue, 8 Jul 2025 12:06:43 -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 CE1BA6B009A for ; Tue, 8 Jul 2025 12:06:43 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id A38F9140288 for ; Tue, 8 Jul 2025 16:06:43 +0000 (UTC) X-FDA: 83641575486.03.21B9049 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf03.hostedemail.com (Postfix) with ESMTP id 044D420016 for ; Tue, 8 Jul 2025 16:06:41 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=kYrMLXyk; spf=pass (imf03.hostedemail.com: domain of snitzer@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=snitzer@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751990802; 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=YIz2g1BSchlk/NsCwAQVy9wA2uAfjO/F1bBfuzJ4FMo=; b=x59mefMdPPdHlPCx9KTZfM670yqvaZwVdr6WrSi9ny3PbrNBe5pm7BNbSBc1BOb2ArMai7 xUnBFyY7hJ/8sj7rK5VXms6pXVTAfMR1y0VcSXt0Rz4xBYdcqV5JWQLmGg3DgUrG0ocrxh L2+FmI1Cs6V3kUrG6ORu05zsSyb4zfY= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751990802; a=rsa-sha256; cv=none; b=R7qU+O3HaK9+faXVI9bBj7G8Ki1QY7d+tsT2B/gmlvkOWeOztCxi85apWAq7e3PXYz+hYo 9ybNOyBBpTz6VdYZJYIEa5yQjeLQX62j6o6IiH/xIEaGGujoHZSu+pP+7gOmeWo5T1KtIu D4KWvXusIfCAbSDhQPe6tr9OuR0Eao8= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=kYrMLXyk; spf=pass (imf03.hostedemail.com: domain of snitzer@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=snitzer@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 432EC5C2C88; Tue, 8 Jul 2025 16:06:41 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B2970C4CEED; Tue, 8 Jul 2025 16:06:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1751990800; bh=xn0xvSIiBlKY6vzRNtueWH89cTh1QCzuoPEgg3rnpfk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kYrMLXyk01SN1mZ/lvhkSmjP1Fh0pmKIYFojdMk0wru02UYlEV/oCwWsZXhNgyWsC P2eLsZI5JiaptJ9oL1YmFDVLfQDJBsSp4E3hxhRdn/gs9596oN5XwORYAaFfVzoG0q aSNl1sy+SDXl8MbmdzrkdyFI47j8cgn72kBOh8U0Nnahdb9quV9wXHUkDognL9VkpJ crNHYm9zdkc65yvLyDzRSn0AgK5CMGG9Sc3WO4t0Z6f29r7Uf7iOhZ5/rrjDeu28+z rscZ11TPmbwjfQFVSZPCeQb4kFnVjH/oiGO8v+FGmKa6iteRNRjIduUNi6TCu3ZVY+ Mm4II51PNJ0Fg== From: Mike Snitzer To: Chuck Lever , Jeff Layton , NeilBrown , Olga Kornievskaia , Dai Ngo , Tom Talpey , Trond Myklebust , Anna Schumaker Cc: linux-nfs@vger.kernel.org, linus-fsdevel@vger.kernel.org, linux-mm@kvack.org, snitzer@kernel.org Subject: [RFC PATCH v2 3/8] NFSD: filecache: add STATX_DIOALIGN and STATX_DIO_READ_ALIGN support Date: Tue, 8 Jul 2025 12:06:14 -0400 Message-ID: <20250708160619.64800-4-snitzer@kernel.org> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20250708160619.64800-1-snitzer@kernel.org> References: <20250708160619.64800-1-snitzer@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 044D420016 X-Stat-Signature: fr5tre1kc9fcux368q5173ygpaqpta1z X-HE-Tag: 1751990801-756036 X-HE-Meta: U2FsdGVkX1+nLyNKYfVou7qNU+qblDo+9EnUlxL4DyuCo2wN9B0CP6L8RppJY+Hg7p/MxGcRAxqAMuaJh+SzHHDc8/RkakazLpKU9Ndl45CSI9frITJ8SA7kAXOn+vjylKu2rfELkEjcDL/bRnrVOfMynUIuHdgJYmQ2LNS6cCGkGcu12/UDuBWVK8uZaT7hPDxkvpLIizV63B/SAPXGZneRk01btYGiWJaTLfG5AaD0JkoKMTNEG87hKlcDYvGkwGMFY49hzqYB6NAaKOnqe1CWRIiePyFyJQR5OiBKvW7R2yuT4kaifaEtx/kve8pY+0uU8eJMNJP00L0FVj8PW4dmkp2zppILLSAL8TgSFP9As07gHPIbIWc6SyiKMOg9ght4axyS9frRktm3TOSS1NqQFtnB7Svr71b2C+f7WbIS3W0xM7IsxKrsTCFIzH9xuRCZCg75I3xoLW6p3F4bjRl6d9tu7S3POjR9yC472bq0HmOWfVTjoGaY3lqfud9Njf4zsxmR58QCCwCiVviCRN7zekqHjpgMxxPg+c9hSjO7HMOAvZBlHryEBnL4ORFObOOJrV5Xv2OnjCEqP+YM/Pm9B4TNaUzSxna+uPOefEggFXKxq96xH9q+Jw5DLldd/WLEuptrsZaP2PBKa35a6r2u5lroX1bwERUgLT2C0s9v/SIVFv1hWVIxwXYfTw9IteAbJdcfKICEhosLMbaBE8u0er6AIFH5h0ugsibn5E8U/qLD4FW7gOQCOZZ35Mg53YKRog3xCAcQAlIbDfRf9BLg/kBhr0S/nYXebVYkXTQYLT1H2vRuEKmNirUZjphsFMWEDnVaIOR2E1zVA+omxX8zrQkOhCdrD0nfVEh6Mo6pFhmcr+bZ2GMCHwJXkNMJr1lschS1e99tsxKpExUBfq1DbIRXm+Cq2IqkNOygTzkVz3Gb8AAoxKfPVgoIEVCEr3z/roAGD5WX18G0q5v entyxRO2 dkpiSts7POZkDXXb4VlK03vVDY5aXHZcRa4CG399DGqjst/S5u78KqBr4NiPiD0DZSnO4z/KnRf/+n76XHvX0U+dvqrxnFC2vIVq/j7LWTuBWtLb/wkcmj4kiuDTyuMMSyo/XFeNrCNcwUqBNwFzZ2gsULi7+8/y4Vv1ehAr6L/g4wGWf3AYDCsCFvpFrDhmQ7n7vsMym+gd2lFsmJDnNUiOZ/L8sI6X3IqAQu9y78gGHMEH7IkhJi6aQZNjbJls1kb290fcw7hHPwwtzCH2j7Bbm3yIVRLS8aw1Jk4+W9RcLYmH5YLxnQIxGcpLYwsZN9csG 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: Use STATX_DIOALIGN and STATX_DIO_READ_ALIGN to get and store DIO alignment attributes from underlying filesystem in associated nfsd_file. This is done when the nfsd_file is first opened for a regular file. Signed-off-by: Mike Snitzer --- fs/nfsd/filecache.c | 32 ++++++++++++++++++++++++++++++++ fs/nfsd/filecache.h | 4 ++++ fs/nfsd/nfsfh.c | 4 ++++ 3 files changed, 40 insertions(+) diff --git a/fs/nfsd/filecache.c b/fs/nfsd/filecache.c index 905034fd8c34..e8a9336b42f5 100644 --- a/fs/nfsd/filecache.c +++ b/fs/nfsd/filecache.c @@ -231,6 +231,9 @@ nfsd_file_alloc(struct net *net, struct inode *inode, unsigned char need, refcount_set(&nf->nf_ref, 1); nf->nf_may = need; nf->nf_mark = NULL; + nf->nf_dio_mem_align = 0; + nf->nf_dio_offset_align = 0; + nf->nf_dio_read_offset_align = 0; return nf; } @@ -1064,6 +1067,33 @@ nfsd_file_is_cached(struct inode *inode) return ret; } +static __be32 +nfsd_file_getattr(const struct svc_fh *fhp, struct nfsd_file *nf) +{ + struct inode *inode = file_inode(nf->nf_file); + struct kstat stat; + __be32 status; + + /* Currently only need to get DIO alignment info for regular files */ + if (!S_ISREG(inode->i_mode)) + return nfs_ok; + + status = fh_getattr(fhp, &stat); + if (status != nfs_ok) + return status; + + if (stat.result_mask & STATX_DIOALIGN) { + nf->nf_dio_mem_align = stat.dio_mem_align; + nf->nf_dio_offset_align = stat.dio_offset_align; + } + if (stat.result_mask & STATX_DIO_READ_ALIGN) + nf->nf_dio_read_offset_align = stat.dio_read_offset_align; + else + nf->nf_dio_read_offset_align = nf->nf_dio_offset_align; + + return status; +} + static __be32 nfsd_file_do_acquire(struct svc_rqst *rqstp, struct net *net, struct svc_cred *cred, @@ -1182,6 +1212,8 @@ nfsd_file_do_acquire(struct svc_rqst *rqstp, struct net *net, } status = nfserrno(ret); trace_nfsd_file_open(nf, status); + if (status == nfs_ok) + status = nfsd_file_getattr(fhp, nf); } } else status = nfserr_jukebox; diff --git a/fs/nfsd/filecache.h b/fs/nfsd/filecache.h index cd02f91aaef1..d41428ce8a11 100644 --- a/fs/nfsd/filecache.h +++ b/fs/nfsd/filecache.h @@ -54,6 +54,10 @@ struct nfsd_file { struct list_head nf_gc; struct rcu_head nf_rcu; ktime_t nf_birthtime; + + u32 nf_dio_mem_align; + u32 nf_dio_offset_align; + u32 nf_dio_read_offset_align; }; int nfsd_file_cache_init(void); diff --git a/fs/nfsd/nfsfh.c b/fs/nfsd/nfsfh.c index f4a3cc9e31e0..bdba2ba828a6 100644 --- a/fs/nfsd/nfsfh.c +++ b/fs/nfsd/nfsfh.c @@ -677,8 +677,12 @@ __be32 fh_getattr(const struct svc_fh *fhp, struct kstat *stat) .mnt = fhp->fh_export->ex_path.mnt, .dentry = fhp->fh_dentry, }; + struct inode *inode = d_inode(p.dentry); u32 request_mask = STATX_BASIC_STATS; + if (S_ISREG(inode->i_mode)) + request_mask |= (STATX_DIOALIGN | STATX_DIO_READ_ALIGN); + if (fhp->fh_maxsize == NFS4_FHSIZE) request_mask |= (STATX_BTIME | STATX_CHANGE_COOKIE); -- 2.44.0