From patchwork Mon Feb 24 18:05:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthew Wilcox (Oracle)" X-Patchwork-Id: 13988652 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 06609264FAA for ; Mon, 24 Feb 2025 18:05:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740420335; cv=none; b=WXdiYA11iIN75rvy0pTobK1caN+bjfFkgEG5MVABh+yeVna51iuCwkLzppPFlxBYlcm4jG38DtgF/xHIgFi8dLBCvywS4cO6cYR6FEhWnM8APz2IoiwWQM/nyv9HpiACUhU8tWG9Fqo/ZCYBxSJ06DNz0VCrHY8ICKRRq/VqM1Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740420335; c=relaxed/simple; bh=R0dFX8aGvD8lTsbxLG7DSgk52hOFwTkt2d4BM+KmYUQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=c+dXZNXTTJKtKIG1rVS9mWAtPNxekcnIGQcvmhysqZsz+DSWz59v6i/VunEpCMKR4QerfXIum2wRKjkNiAuqiO3QXbmS5TWmwGQ20ngWry1HF026VCYk3mEzW6CY/ar+SH9RXsJCvrVMRxbfL0IEt59NcT9w1xjgf9pWkfeBOaU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=DOsV9C8I; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="DOsV9C8I" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=fGdlyVYDMumMq+9YIKbJRDyOw8g/4g49JLP3XmkSAaw=; b=DOsV9C8Iy/c4iIhe2XyAUytMLv vPy4Y57Rj2BYkPguXaMAb2hIwnyqLCtkjFwtalk4yRr87ff1A9JDBYcHnq2heb4wi3/Io5jFUxju+ ERW8DDgYdPeWP9nSJgj/DNjngWlNos/hrSQ1FX+osREQrLLViheSF4sRmvHFX/anYkLbeOBhhIczW i6H6Dx/Wr52cINjogZlArooeuChzzrkQIni9Tv5O1kUQgjbBn6PN5yUnWFoslWeKVcqmsYkU4ctsw vWDo4zlVtAMK7YN0xInRXzvzSmi6EyGJu7eZmoR/gq8iSF61tOKwszBCnQKDVwPtw0gG89X63gG5B t7UTfeZw==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tmcpg-000000082fi-0R53; Mon, 24 Feb 2025 18:05:32 +0000 From: "Matthew Wilcox (Oracle)" To: Mike Marshall Cc: "Matthew Wilcox (Oracle)" , Martin Brandenburg , devel@lists.orangefs.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 1/9] orangefs: Do not truncate file size Date: Mon, 24 Feb 2025 18:05:19 +0000 Message-ID: <20250224180529.1916812-2-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224180529.1916812-1-willy@infradead.org> References: <20250224180529.1916812-1-willy@infradead.org> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 'len' is used to store the result of i_size_read(), so making 'len' a size_t results in truncation to 4GiB on 32-bit systems. Signed-off-by: Matthew Wilcox (Oracle) --- fs/orangefs/inode.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c index aae6d2b8767d..63d7c1ca0dfd 100644 --- a/fs/orangefs/inode.c +++ b/fs/orangefs/inode.c @@ -23,9 +23,9 @@ static int orangefs_writepage_locked(struct page *page, struct orangefs_write_range *wr = NULL; struct iov_iter iter; struct bio_vec bv; - size_t len, wlen; + size_t wlen; ssize_t ret; - loff_t off; + loff_t len, off; set_page_writeback(page); @@ -91,8 +91,7 @@ static int orangefs_writepages_work(struct orangefs_writepages *ow, struct orangefs_write_range *wrp, wr; struct iov_iter iter; ssize_t ret; - size_t len; - loff_t off; + loff_t len, off; int i; len = i_size_read(inode); From patchwork Mon Feb 24 18:05:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Matthew Wilcox (Oracle)" X-Patchwork-Id: 13988669 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 23D94264FAA for ; Mon, 24 Feb 2025 18:05:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740420341; cv=none; b=YzsLym6jc4wAMLM81BufKeBMsOMOdON7PsZhhC3LTYSgrT0P3BnjuC6uxJ6NQ42EftkBuXMmP2IRtJo0ZVcZIFR3Vjz/w4X7i/PcZ1K159GW8QXV8ZX/AAIBVKWWlNpQq8RjWTV0C2giDGj8XOjQdrnnbXMnyLCnAvr5HrV1gPs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740420341; c=relaxed/simple; bh=TieKIXDw2Qv9I+HwGJ6auwMXGgJiU+Po1efih52t/rA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=jyVMDaTiivQvFtCazi/pCFkZlPAsrSA+5m+YeZUQscNOIJDtGEdWcRQ0hl5ysZ+1JZD53i6gWKYLrzwSHHA6AOlVJm9bSh1W/0CIFF8iRLnJ+s8h4rWKiWiCsF7p3IGGB8QM6uv9MYyBA6U8lUxEows89TCaA9XXqaeQslnsgMg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=Nej1ZHYI; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="Nej1ZHYI" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:Content-Type: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender :Reply-To:Content-ID:Content-Description; bh=2aBo+OgrQ7gQuzyYOviO+wQ5u2zMGRzhyX0+c/T085I=; b=Nej1ZHYIxs9e6JrnOE0sA9gX1D /KpL7++E8TBAMzIvpk+Rg0wIvMxvcLZpzNqeU4gqLqpNrRANIFu0brQwx3Xbw557mMmTeylHk8w8I cJEwm767JsDm/+WimAfN9xfr/R5nL3ukw3ZpVsNxizrgosMoYrRUZ6OJlgZ1sdmw0s9KaqDfRObHV EiufFBdtIBbIfAFfockHH20hFkcCZEbue9PvuVfaoBty9Q93dDKB30bFxu/RJih0XLQaCjddjRfzz u9PFEE2wU2NaBRR4wiB6fiASWDEDrRr6uFkU78m9SjAZV+aVggU3chiObFmtbj1PzEPYHFiU4tcfq dqChkmSQ==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tmcpg-000000082fk-0wGC; Mon, 24 Feb 2025 18:05:32 +0000 From: "Matthew Wilcox (Oracle)" To: Mike Marshall Cc: "Matthew Wilcox (Oracle)" , Martin Brandenburg , devel@lists.orangefs.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 2/9] orangefs: Move s_kmod_keyword_mask_map to orangefs-debugfs.c Date: Mon, 24 Feb 2025 18:05:20 +0000 Message-ID: <20250224180529.1916812-3-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224180529.1916812-1-willy@infradead.org> References: <20250224180529.1916812-1-willy@infradead.org> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Attempting to build orangefs with W=1 currently reports errors like: In file included from ../fs/orangefs/protocol.h:287, from ../fs/orangefs/waitqueue.c:16: ../fs/orangefs/orangefs-debug.h:86:18: error: ‘num_kmod_keyword_mask_map’ defined but not used [-Werror=unused-const-variable=] Move num_kmod_keyword_mask_map, s_kmod_keyword_mask_map and struct __keyword_mask_s to orangefs-debugfs.c which is the only file they're used in. Signed-off-by: Matthew Wilcox (Oracle) --- fs/orangefs/orangefs-debug.h | 43 ---------------------------------- fs/orangefs/orangefs-debugfs.c | 43 ++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/fs/orangefs/orangefs-debug.h b/fs/orangefs/orangefs-debug.h index 6e079d4230d0..d4463534cec6 100644 --- a/fs/orangefs/orangefs-debug.h +++ b/fs/orangefs/orangefs-debug.h @@ -43,47 +43,4 @@ #define GOSSIP_MAX_NR 16 #define GOSSIP_MAX_DEBUG (((__u64)1 << GOSSIP_MAX_NR) - 1) -/* a private internal type */ -struct __keyword_mask_s { - const char *keyword; - __u64 mask_val; -}; - -/* - * Map all kmod keywords to kmod debug masks here. Keep this - * structure "packed": - * - * "all" is always last... - * - * keyword mask_val index - * foo 1 0 - * bar 2 1 - * baz 4 2 - * qux 8 3 - * . . . - */ -static struct __keyword_mask_s s_kmod_keyword_mask_map[] = { - {"super", GOSSIP_SUPER_DEBUG}, - {"inode", GOSSIP_INODE_DEBUG}, - {"file", GOSSIP_FILE_DEBUG}, - {"dir", GOSSIP_DIR_DEBUG}, - {"utils", GOSSIP_UTILS_DEBUG}, - {"wait", GOSSIP_WAIT_DEBUG}, - {"acl", GOSSIP_ACL_DEBUG}, - {"dcache", GOSSIP_DCACHE_DEBUG}, - {"dev", GOSSIP_DEV_DEBUG}, - {"name", GOSSIP_NAME_DEBUG}, - {"bufmap", GOSSIP_BUFMAP_DEBUG}, - {"cache", GOSSIP_CACHE_DEBUG}, - {"debugfs", GOSSIP_DEBUGFS_DEBUG}, - {"xattr", GOSSIP_XATTR_DEBUG}, - {"init", GOSSIP_INIT_DEBUG}, - {"sysfs", GOSSIP_SYSFS_DEBUG}, - {"none", GOSSIP_NO_DEBUG}, - {"all", GOSSIP_MAX_DEBUG} -}; - -static const int num_kmod_keyword_mask_map = (int) - (ARRAY_SIZE(s_kmod_keyword_mask_map)); - #endif /* __ORANGEFS_DEBUG_H */ diff --git a/fs/orangefs/orangefs-debugfs.c b/fs/orangefs/orangefs-debugfs.c index f52073022fae..f7095c91660c 100644 --- a/fs/orangefs/orangefs-debugfs.c +++ b/fs/orangefs/orangefs-debugfs.c @@ -44,6 +44,49 @@ #include "protocol.h" #include "orangefs-kernel.h" +/* a private internal type */ +struct __keyword_mask_s { + const char *keyword; + __u64 mask_val; +}; + +/* + * Map all kmod keywords to kmod debug masks here. Keep this + * structure "packed": + * + * "all" is always last... + * + * keyword mask_val index + * foo 1 0 + * bar 2 1 + * baz 4 2 + * qux 8 3 + * . . . + */ +static struct __keyword_mask_s s_kmod_keyword_mask_map[] = { + {"super", GOSSIP_SUPER_DEBUG}, + {"inode", GOSSIP_INODE_DEBUG}, + {"file", GOSSIP_FILE_DEBUG}, + {"dir", GOSSIP_DIR_DEBUG}, + {"utils", GOSSIP_UTILS_DEBUG}, + {"wait", GOSSIP_WAIT_DEBUG}, + {"acl", GOSSIP_ACL_DEBUG}, + {"dcache", GOSSIP_DCACHE_DEBUG}, + {"dev", GOSSIP_DEV_DEBUG}, + {"name", GOSSIP_NAME_DEBUG}, + {"bufmap", GOSSIP_BUFMAP_DEBUG}, + {"cache", GOSSIP_CACHE_DEBUG}, + {"debugfs", GOSSIP_DEBUGFS_DEBUG}, + {"xattr", GOSSIP_XATTR_DEBUG}, + {"init", GOSSIP_INIT_DEBUG}, + {"sysfs", GOSSIP_SYSFS_DEBUG}, + {"none", GOSSIP_NO_DEBUG}, + {"all", GOSSIP_MAX_DEBUG} +}; + +static const int num_kmod_keyword_mask_map = (int) + (ARRAY_SIZE(s_kmod_keyword_mask_map)); + #define DEBUG_HELP_STRING_SIZE 4096 #define HELP_STRING_UNINITIALIZED \ "Client Debug Keywords are unknown until the first time\n" \ From patchwork Mon Feb 24 18:05:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthew Wilcox (Oracle)" X-Patchwork-Id: 13988658 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 06592264FA6 for ; Mon, 24 Feb 2025 18:05:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740420336; cv=none; b=MyO78nwqz1cGSWxuzPKSL41rwSONMU9cgmcFwzLaisO/NBGWtGP5Zzhh+fCQq6E4jHqiSyeeABZkKKb32/xn/mpwwYbEA740j5csKBZsE0zOvo9Tb5oASlIZqZsAfKAk3Ug3uz0lCxS85KGm36BNqksoxb0S8IxvNgivc6OJq/w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740420336; c=relaxed/simple; bh=ruHcDVes/VWwDH6/sZK9rpjnUq4bDCDy2oTA1aknZ7U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rphS5+EU89WClYr2hUaFHLaMRpgyzdv4mku18J98hGSIbafKejNAh2AeEiQVJ+kZavUeEYPEwL4PnBMjGsyFAN2uGnCXgbVhhQuD+f5PgeoGOhoe9zlJPn3LfVl4iZWF0uyDBmTmh5mDVOrDGPP9uC3MUhCu9v8WGyDB8x4UFNI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=oEtAXBzN; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="oEtAXBzN" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=ZT1e+z5j7g0Y8+JV1Am2asZ537kvpyymY4pnooXr2r4=; b=oEtAXBzNmzKPf8R87Ay5eCTEhW fiBWaeVXvahcDwcLPlAICivAglJjb05VS7o2nOKRmN/a6cdE5VXHsE+vpnNTRozGy555qiRLt6gwQ X4xpg4Gq5yUIHyDEXGRZYwYjTZWzLZ3NJ3abCJmlqoCDfzKc5Cw4014ovGms2rXPSv8uB6yXwdbOr 8JyNB8Ry6MsS23nlHVknQGNcOrxhYbhJnM0kPUVJmkstbVby4IWdr3gt5CCwVpv9xU3quT2aOd0el kILIQJmk4RFxVrS+qec0kkqq8r1WFB7dCS4YAwwfAqz1TthYphINtPb8nJkH7/FWi1yqM+fS39tTQ iu6EMOwQ==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tmcpg-000000082fm-1I7U; Mon, 24 Feb 2025 18:05:32 +0000 From: "Matthew Wilcox (Oracle)" To: Mike Marshall Cc: "Matthew Wilcox (Oracle)" , Martin Brandenburg , devel@lists.orangefs.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 3/9] orangefs: make open_for_read and open_for_write boolean Date: Mon, 24 Feb 2025 18:05:21 +0000 Message-ID: <20250224180529.1916812-4-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224180529.1916812-1-willy@infradead.org> References: <20250224180529.1916812-1-willy@infradead.org> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 sparse currently warns: fs/orangefs/file.c:119:32: warning: incorrect type in assignment (different base types) fs/orangefs/file.c:119:32: expected int open_for_write fs/orangefs/file.c:119:32: got restricted fmode_t Turning open_for_write and open_for_read into booleans (which is how they're used) removes this warning. Signed-off-by: Matthew Wilcox (Oracle) --- fs/orangefs/file.c | 4 ++-- include/linux/mm_types.h | 6 +++--- include/linux/nfs_page.h | 2 +- include/linux/page-flags.h | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/fs/orangefs/file.c b/fs/orangefs/file.c index d68372241b30..90c49c0de243 100644 --- a/fs/orangefs/file.c +++ b/fs/orangefs/file.c @@ -57,8 +57,8 @@ ssize_t wait_for_direct_io(enum ORANGEFS_io_type type, struct inode *inode, int buffer_index; ssize_t ret; size_t copy_amount; - int open_for_read; - int open_for_write; + bool open_for_read; + bool open_for_write; new_op = op_alloc(ORANGEFS_VFS_OP_FILE_IO); if (!new_op) diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index e1f23c3429c9..0ca9feec67b8 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h @@ -101,7 +101,7 @@ struct page { struct list_head pcp_list; }; /* See page-flags.h for PAGE_MAPPING_FLAGS */ - struct address_space *mapping; + struct address_space *__folio_mapping; union { pgoff_t __folio_index; /* Our offset within mapping. */ unsigned long share; /* share count for fsdax */ @@ -403,7 +403,7 @@ struct folio { static_assert(offsetof(struct page, pg) == offsetof(struct folio, fl)) FOLIO_MATCH(flags, flags); FOLIO_MATCH(lru, lru); -FOLIO_MATCH(mapping, mapping); +FOLIO_MATCH(__folio_mapping, mapping); FOLIO_MATCH(compound_head, lru); FOLIO_MATCH(__folio_index, index); FOLIO_MATCH(private, private); @@ -499,7 +499,7 @@ struct ptdesc { TABLE_MATCH(flags, __page_flags); TABLE_MATCH(compound_head, pt_list); TABLE_MATCH(compound_head, _pt_pad_1); -TABLE_MATCH(mapping, __page_mapping); +TABLE_MATCH(__folio_mapping, __page_mapping); TABLE_MATCH(__folio_index, pt_index); TABLE_MATCH(rcu_head, pt_rcu_head); TABLE_MATCH(page_type, __page_type); diff --git a/include/linux/nfs_page.h b/include/linux/nfs_page.h index 169b4ae30ff4..0db50ce065cb 100644 --- a/include/linux/nfs_page.h +++ b/include/linux/nfs_page.h @@ -205,7 +205,7 @@ static inline struct inode *nfs_page_to_inode(const struct nfs_page *req) struct folio *folio = nfs_page_to_folio(req); if (folio == NULL) - return req->wb_page->mapping->host; + return req->wb_folio->mapping->host; return folio->mapping->host; } diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 36d283552f80..796fabeae46f 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -675,7 +675,7 @@ PAGEFLAG_FALSE(VmemmapSelfHosted, vmemmap_self_hosted) /* * Different with flags above, this flag is used only for fsdax mode. It - * indicates that this page->mapping is now under reflink case. + * indicates that this folio->mapping is now under reflink case. */ #define PAGE_MAPPING_DAX_SHARED ((void *)0x1) @@ -686,7 +686,7 @@ static __always_inline bool folio_mapping_flags(const struct folio *folio) static __always_inline bool PageMappingFlags(const struct page *page) { - return ((unsigned long)page->mapping & PAGE_MAPPING_FLAGS) != 0; + return ((unsigned long)page->__folio_mapping & PAGE_MAPPING_FLAGS) != 0; } static __always_inline bool folio_test_anon(const struct folio *folio) @@ -714,7 +714,7 @@ static __always_inline bool __folio_test_movable(const struct folio *folio) static __always_inline bool __PageMovable(const struct page *page) { - return ((unsigned long)page->mapping & PAGE_MAPPING_FLAGS) == + return ((unsigned long)page->__folio_mapping & PAGE_MAPPING_FLAGS) == PAGE_MAPPING_MOVABLE; } From patchwork Mon Feb 24 18:05:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthew Wilcox (Oracle)" X-Patchwork-Id: 13988653 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 616E2264FBE for ; Mon, 24 Feb 2025 18:05:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740420336; cv=none; b=HbT6uuAJsWjljleN15+dzt24n11FoaMnVXIt8DYfc/6Iw58J1X0jXQUPIDnTWQqnGiE2o++tRm/gPwzo9Xe1gEGe+I9iiefhW5dz1nwqPyYC5IauLj9vkaAHmYoVvQimLbaDFhoZFZqD0c4pb4+EZydHbODuRY+sjneEV8VsV6s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740420336; c=relaxed/simple; bh=Kt36AfpSBSErJTz9PYgVWAhUX3v1FgFO2qlt8NauuV8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qDyeDzfSgZbwKVDNCSvFuWtwP5tWG5/ZJGRJXny3j3GAA2TLRq9F4D4lFTPhWoA2CYxTd/MpyViPSOeqNRYAbxGHSvfTARCSVpbOxKLRlKL9Qjejh945d0BcJTlEnzjBxrg+159WBoijvzCuj9M6DBUJcQWinDM4EUMg21lkAqE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=NECBZsk+; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="NECBZsk+" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=q9xbRWIYIPyGmMxpLr8R+u3sAtPTzGkSqEgQ21nEOZc=; b=NECBZsk+BOEjtYalZbphgp+h0x NiKTeDjhlCwJsXaxS2CA0Spwo1LMUwxr//IBJakCm3qifHwv7f0mZ0MJ4r/XwnNu46JQ1Yv4WAcMl iUAjRqX5EnJXQJwwRHRXmToDTcGDZgrVDXoCTeV7gWHROb1cJoKZjHYVBdwIclWEUGGUKDtBel8L1 aEkzXDxlnUK+X6zfg9mNClO3IaZJrfmH88rVtj5YkLIHjBdn1SUvwHPh7BClzZq+wx3SLPubc/G11 nWcCakbmzh8+b1gbG55yMyITseeEMIlUYRzAdpf6+874MWDsd7TfGh9fMu8KOGTFgcIJ4m8Pb6YAx z9TtYajQ==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tmcpg-000000082fv-1vEp; Mon, 24 Feb 2025 18:05:32 +0000 From: "Matthew Wilcox (Oracle)" To: Mike Marshall Cc: "Matthew Wilcox (Oracle)" , Martin Brandenburg , devel@lists.orangefs.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 4/9] orangefs: Remove orangefs_writepage() Date: Mon, 24 Feb 2025 18:05:22 +0000 Message-ID: <20250224180529.1916812-5-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224180529.1916812-1-willy@infradead.org> References: <20250224180529.1916812-1-willy@infradead.org> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 If we add a migrate_folio operation, we can remove orangefs_writepage (as there is already a writepages operation). filemap_migrate_folio() will do fine as struct orangefs_write_range does not need to be adjusted when the folio is migrated. Signed-off-by: Matthew Wilcox (Oracle) --- fs/orangefs/inode.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c index 63d7c1ca0dfd..4ad049d5cc9c 100644 --- a/fs/orangefs/inode.c +++ b/fs/orangefs/inode.c @@ -64,15 +64,6 @@ static int orangefs_writepage_locked(struct page *page, return ret; } -static int orangefs_writepage(struct page *page, struct writeback_control *wbc) -{ - int ret; - ret = orangefs_writepage_locked(page, wbc); - unlock_page(page); - end_page_writeback(page); - return ret; -} - struct orangefs_writepages { loff_t off; size_t len; @@ -605,7 +596,6 @@ static ssize_t orangefs_direct_IO(struct kiocb *iocb, /** ORANGEFS2 implementation of address space operations */ static const struct address_space_operations orangefs_address_operations = { - .writepage = orangefs_writepage, .readahead = orangefs_readahead, .read_folio = orangefs_read_folio, .writepages = orangefs_writepages, @@ -615,6 +605,7 @@ static const struct address_space_operations orangefs_address_operations = { .invalidate_folio = orangefs_invalidate_folio, .release_folio = orangefs_release_folio, .free_folio = orangefs_free_folio, + .migrate_folio = filemap_migrate_folio, .launder_folio = orangefs_launder_folio, .direct_IO = orangefs_direct_IO, }; From patchwork Mon Feb 24 18:05:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthew Wilcox (Oracle)" X-Patchwork-Id: 13988654 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6174E265603 for ; Mon, 24 Feb 2025 18:05:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740420336; cv=none; b=eSCvQ1oEYKwm17ymffO89wEVgBdeYfDjG0MvX823aMKxgdrKOGgLt+Md3nljkW1rY0gL3bcLJBiROvVH+nx3B1NijdsiVwQrVHkECcasts04bLSUm8rpjgjn5ZURl1yrpUZ6RcQPSzm7Nh/RcdR61elP3gVraj2j5Adg+LCznjA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740420336; c=relaxed/simple; bh=yGGjdX9HvJRAEkjkwLPdlp7qlZfB667cDjZxQg9TTlQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nF057WXoOXXkB2xP2Q5k2Oh2SjGFCAKIFgu7WjpQ4WYjRixlShMBgd/YFTGMvKIziV3I5R63z190rDVDGHtBnZIqLmXw1/prqj4C2S5v6buRZpLWkBd3vRl59NiWM/OabJ486iP4yfEgEMIzJqXdNPLTDIIM7PvcHudAG0f7zbM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=F1QHePDH; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="F1QHePDH" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=i8KrJFZirtzTPYZjDNis+V3O7zfYTDu7Pud1q33pqiE=; b=F1QHePDH9Uh1jti3wA0FRNovJB stzlyOw1vSbgDdhCU+EV3XuT6XTTudxa8zVBRda7Pr8j3xkXGV6wLIp7Wp42uce7A8BFPqvX5xiyX lgHdHWGhwHfdJoCyqOSIsyl2po1wZiMW3iijTqkiKJ7uEo0jcGErqiECluBVTXa1wb3nuocLS0UsB LNMW6yaydyoTW/r+dZydNjSEdz1A6IYwrNC2F8PPjyNtJzR4EEcU1KuL8/6cl3kgK+b1Bn/vToPlp 3UX5m9bxKKpV/X5qBEmIitx90o35W/K9ceBstW0Cic52SVyxB5k7hxaQaBMP6NN12PsGTKMM/2VSH +jAu8GCA==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tmcpg-000000082g2-2W3M; Mon, 24 Feb 2025 18:05:32 +0000 From: "Matthew Wilcox (Oracle)" To: Mike Marshall Cc: "Matthew Wilcox (Oracle)" , Martin Brandenburg , devel@lists.orangefs.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 5/9] orangefs: Convert orangefs_writepage_locked() to take a folio Date: Mon, 24 Feb 2025 18:05:23 +0000 Message-ID: <20250224180529.1916812-6-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224180529.1916812-1-willy@infradead.org> References: <20250224180529.1916812-1-willy@infradead.org> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Both callers have a folio, pass it in and use it inside orangefs_writepage_locked(). Removes a few hidden calls to compound_head() and accesses to page->mapping. Signed-off-by: Matthew Wilcox (Oracle) --- fs/orangefs/inode.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c index 4ad049d5cc9c..90db1d705fe8 100644 --- a/fs/orangefs/inode.c +++ b/fs/orangefs/inode.c @@ -16,10 +16,10 @@ #include "orangefs-kernel.h" #include "orangefs-bufmap.h" -static int orangefs_writepage_locked(struct page *page, - struct writeback_control *wbc) +static int orangefs_writepage_locked(struct folio *folio, + struct writeback_control *wbc) { - struct inode *inode = page->mapping->host; + struct inode *inode = folio->mapping->host; struct orangefs_write_range *wr = NULL; struct iov_iter iter; struct bio_vec bv; @@ -27,11 +27,11 @@ static int orangefs_writepage_locked(struct page *page, ssize_t ret; loff_t len, off; - set_page_writeback(page); + folio_start_writeback(folio); len = i_size_read(inode); - if (PagePrivate(page)) { - wr = (struct orangefs_write_range *)page_private(page); + if (folio->private) { + wr = folio->private; WARN_ON(wr->pos >= len); off = wr->pos; if (off + wr->len > len) @@ -40,27 +40,27 @@ static int orangefs_writepage_locked(struct page *page, wlen = wr->len; } else { WARN_ON(1); - off = page_offset(page); - if (off + PAGE_SIZE > len) + off = folio_pos(folio); + wlen = folio_size(folio); + + if (wlen > len - off) wlen = len - off; - else - wlen = PAGE_SIZE; } /* Should've been handled in orangefs_invalidate_folio. */ WARN_ON(off == len || off + wlen > len); WARN_ON(wlen == 0); - bvec_set_page(&bv, page, wlen, off % PAGE_SIZE); + bvec_set_folio(&bv, folio, wlen, offset_in_folio(folio, off)); iov_iter_bvec(&iter, ITER_SOURCE, &bv, 1, wlen); ret = wait_for_direct_io(ORANGEFS_IO_WRITE, inode, &off, &iter, wlen, len, wr, NULL, NULL); if (ret < 0) { - mapping_set_error(page->mapping, ret); + mapping_set_error(folio->mapping, ret); } else { ret = 0; } - kfree(detach_page_private(page)); + kfree(folio_detach_private(folio)); return ret; } @@ -179,7 +179,7 @@ static int orangefs_writepages_callback(struct folio *folio, orangefs_writepages_work(ow, wbc); ow->npages = 0; } - ret = orangefs_writepage_locked(&folio->page, wbc); + ret = orangefs_writepage_locked(folio, wbc); mapping_set_error(folio->mapping, ret); folio_unlock(folio); folio_end_writeback(folio); @@ -474,7 +474,7 @@ static int orangefs_launder_folio(struct folio *folio) }; folio_wait_writeback(folio); if (folio_clear_dirty_for_io(folio)) { - r = orangefs_writepage_locked(&folio->page, &wbc); + r = orangefs_writepage_locked(folio, &wbc); folio_end_writeback(folio); } return r; From patchwork Mon Feb 24 18:05:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthew Wilcox (Oracle)" X-Patchwork-Id: 13988655 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7195626560B for ; Mon, 24 Feb 2025 18:05:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740420336; cv=none; b=sJCh/weh6OlHO1kND4tLnPpQyE0i0sEiFNiKtqaEZ8IawXDSP/Yvvn+DetF/ju3Vzg22KsvQWzZLdJ1g512ybu5vbeLex50bGCsipLfrjKENNobFr2eXdrCsFvtgbNbIc1BwQ8k5iQiu1m6dZT8xZrvcFhHi9fS0Lexg/HOAm2A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740420336; c=relaxed/simple; bh=wkPJJz2Eq0JVFigjREG8F8y1EDv72QSexGcRtcczOqE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iG7XFGSz9C6aLePox/aw0KHTIv5zk08FRna7Dya1/TRaptJHv2FggIcrJzFQwK7OxDkKJUknjWGUjQpxDLMa4rC6Bw4jS+g4vFxJjoxwqnLbkksvKxtuhcDx6MoxuolyQsTaxtIW1rPYj4jKShSOId3qzR2k64hgsL85Y55rEys= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=X34duR8Z; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="X34duR8Z" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=hDHGnJYeP0II7jdkeYZwvzVglFmHPemsfc+e8TBo4GM=; b=X34duR8ZoWxg0D1Xqq6uSWD3F3 VXUI3wMczZELHcn7ipYMLK7iO+pTbKCT3DzqraQHsL5+QBJm6wujDPvOKtpMOrzUYhOW9H9Ugu67b Cols+0H3aH8nkwvpSgHxUKcJ9q3dEra+omT2DWY0bFV0JnSj5Kr7oKLSu2cdBhcesMenQGfI6xlsY 8NezaCEqEsr3q+fG9OKq+w9XWXXLgfQ3vR19hrPB0IX0zrffCv7X3jCClML7khwQ1Sbj5c0fNR/j0 PNwRsD4YfcVG+9irCQ2iKWMABK6LXCuBUVeqNhhYdIhPoRSzNxXSxUeAuYdd7AW2d0+KiE4/WwPey vHsohjdQ==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tmcpg-000000082g9-33Ea; Mon, 24 Feb 2025 18:05:32 +0000 From: "Matthew Wilcox (Oracle)" To: Mike Marshall Cc: "Matthew Wilcox (Oracle)" , Martin Brandenburg , devel@lists.orangefs.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 6/9] orangefs: Pass mapping to orangefs_writepages_work() Date: Mon, 24 Feb 2025 18:05:24 +0000 Message-ID: <20250224180529.1916812-7-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224180529.1916812-1-willy@infradead.org> References: <20250224180529.1916812-1-willy@infradead.org> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Remove two accesses to page->mapping by passing the mapping from orangefs_writepages() to orangefs_writepages_callback() and then orangefs_writepages_work(). That makes it obvious that all folios come from the same mapping, so we can hoist the call to mapping_set_error() outside the loop. While I'm here, switch from write_cache_pages() to writeback_iter() which removes an indirect function call. Signed-off-by: Matthew Wilcox (Oracle) --- fs/orangefs/inode.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c index 90db1d705fe8..879d96c11b1c 100644 --- a/fs/orangefs/inode.c +++ b/fs/orangefs/inode.c @@ -71,14 +71,15 @@ struct orangefs_writepages { kgid_t gid; int maxpages; int npages; + struct address_space *mapping; struct page **pages; struct bio_vec *bv; }; static int orangefs_writepages_work(struct orangefs_writepages *ow, - struct writeback_control *wbc) + struct writeback_control *wbc) { - struct inode *inode = ow->pages[0]->mapping->host; + struct inode *inode = ow->mapping->host; struct orangefs_write_range *wrp, wr; struct iov_iter iter; ssize_t ret; @@ -107,8 +108,8 @@ static int orangefs_writepages_work(struct orangefs_writepages *ow, ret = wait_for_direct_io(ORANGEFS_IO_WRITE, inode, &off, &iter, ow->len, 0, &wr, NULL, NULL); if (ret < 0) { + mapping_set_error(ow->mapping, ret); for (i = 0; i < ow->npages; i++) { - mapping_set_error(ow->pages[i]->mapping, ret); if (PagePrivate(ow->pages[i])) { wrp = (struct orangefs_write_range *) page_private(ow->pages[i]); @@ -137,9 +138,8 @@ static int orangefs_writepages_work(struct orangefs_writepages *ow, } static int orangefs_writepages_callback(struct folio *folio, - struct writeback_control *wbc, void *data) + struct writeback_control *wbc, struct orangefs_writepages *ow) { - struct orangefs_writepages *ow = data; struct orangefs_write_range *wr = folio->private; int ret; @@ -197,7 +197,9 @@ static int orangefs_writepages(struct address_space *mapping, { struct orangefs_writepages *ow; struct blk_plug plug; - int ret; + int error; + struct folio *folio = NULL; + ow = kzalloc(sizeof(struct orangefs_writepages), GFP_KERNEL); if (!ow) return -ENOMEM; @@ -213,15 +215,17 @@ static int orangefs_writepages(struct address_space *mapping, kfree(ow); return -ENOMEM; } + ow->mapping = mapping; blk_start_plug(&plug); - ret = write_cache_pages(mapping, wbc, orangefs_writepages_callback, ow); + while ((folio = writeback_iter(mapping, wbc, folio, &error))) + error = orangefs_writepages_callback(folio, wbc, ow); if (ow->npages) - ret = orangefs_writepages_work(ow, wbc); + error = orangefs_writepages_work(ow, wbc); blk_finish_plug(&plug); kfree(ow->pages); kfree(ow->bv); kfree(ow); - return ret; + return error; } static int orangefs_launder_folio(struct folio *); From patchwork Mon Feb 24 18:05:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthew Wilcox (Oracle)" X-Patchwork-Id: 13988659 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 718EE265608 for ; Mon, 24 Feb 2025 18:05:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740420336; cv=none; b=iCYo6iiExDupiNSp4nmGk4ljUA0nnGoND7KHdowKJibTkXdsb+sSu/UwhbEXB6Q/E/aZo3TiiovHSvjE/5PJ8ft/usJGzsRJJajfN9yrUBQtEctkevg3R+ZweP4LHhB2MBGLC5Qg7XxW9GEwkkWQrcYHNnTwgOTTrrUM5TzKtAI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740420336; c=relaxed/simple; bh=aFN1D9DsZIKDWRf0fKPoQl80xDfsv31OlP1bEEDxzGM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eUby+H38qjZCGQa5TSaTiCXAPiBy4ksqJD0Uvi0tfgAFZxpiM/PAjv2hlLSjwo0/93YbrO0R1hPwpTGlOy68Xz/nOTNVAm0yv5mRlqJzdw0wJRlOlv1Tej6pcqor4SIe/iqLylOYL8CaIVKeT5RI4HO+xAVQYHvq5+TNXbQpFEM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=e/JiBide; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="e/JiBide" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=CU0/jsigZoGStt97taLiW/kmH6Lymi4XESfbgEuwDuA=; b=e/JiBide+57L6w2ZAULZwO23ct K/U/HfUDxx2qqxn739c/lTAtHvd7zXLv43dTQI+we/IkvvgGciP+tXaLznns0l7XFC/LoFXu/c0Wk cUmt/2GNbrnUNA6E5/YWhFPpvssg376BbTe38tGS3zJtTh+N294gjUy2SuzAzri9kJaSO0O0yVEHu gKBihTgysaTLeQzd0tmM4rz4OTerv1NM2rWT7XtkHaJF5GPBG0qZMrJtNQ6qnsgoh+xZqpj01WQIX XovYE7VEaVBRX61ssjYShpeP/A4imLmxJfZ5yhY3fYZH3qDw72aXyjlUgauq/zwHTvdOxefuwSN/b maVWQPaA==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tmcpg-000000082gG-3gB0; Mon, 24 Feb 2025 18:05:32 +0000 From: "Matthew Wilcox (Oracle)" To: Mike Marshall Cc: "Matthew Wilcox (Oracle)" , Martin Brandenburg , devel@lists.orangefs.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 7/9] orangefs: Unify error & success paths in orangefs_writepages_work() Date: Mon, 24 Feb 2025 18:05:25 +0000 Message-ID: <20250224180529.1916812-8-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224180529.1916812-1-willy@infradead.org> References: <20250224180529.1916812-1-willy@infradead.org> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Both arms of this conditional now have the same loop, so sink it out of the conditional. Signed-off-by: Matthew Wilcox (Oracle) --- fs/orangefs/inode.c | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c index 879d96c11b1c..927c2829976c 100644 --- a/fs/orangefs/inode.c +++ b/fs/orangefs/inode.c @@ -107,33 +107,23 @@ static int orangefs_writepages_work(struct orangefs_writepages *ow, wr.gid = ow->gid; ret = wait_for_direct_io(ORANGEFS_IO_WRITE, inode, &off, &iter, ow->len, 0, &wr, NULL, NULL); - if (ret < 0) { + if (ret < 0) mapping_set_error(ow->mapping, ret); - for (i = 0; i < ow->npages; i++) { - if (PagePrivate(ow->pages[i])) { - wrp = (struct orangefs_write_range *) - page_private(ow->pages[i]); - ClearPagePrivate(ow->pages[i]); - put_page(ow->pages[i]); - kfree(wrp); - } - end_page_writeback(ow->pages[i]); - unlock_page(ow->pages[i]); - } - } else { + else ret = 0; - for (i = 0; i < ow->npages; i++) { - if (PagePrivate(ow->pages[i])) { - wrp = (struct orangefs_write_range *) - page_private(ow->pages[i]); - ClearPagePrivate(ow->pages[i]); - put_page(ow->pages[i]); - kfree(wrp); - } - end_page_writeback(ow->pages[i]); - unlock_page(ow->pages[i]); + + for (i = 0; i < ow->npages; i++) { + if (PagePrivate(ow->pages[i])) { + wrp = (struct orangefs_write_range *) + page_private(ow->pages[i]); + ClearPagePrivate(ow->pages[i]); + put_page(ow->pages[i]); + kfree(wrp); } + end_page_writeback(ow->pages[i]); + unlock_page(ow->pages[i]); } + return ret; } From patchwork Mon Feb 24 18:05:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthew Wilcox (Oracle)" X-Patchwork-Id: 13988656 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C6B4E1A9B3E for ; Mon, 24 Feb 2025 18:05:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740420336; cv=none; b=uN+cZCCk6TPS8DaEYZYczNZUIU/H0KeZbUcbrsDauKRyUBJ/5zRZDAPTPr/km7Ab5QNmDzsoRvaeLZibr2pqfdmkyy9gAcZibjqnNyfIMrwEaqB4uqUNC8q7ssxsw6hlx/MfiYLEc0EoEz1Qb/IBb1qSODYOXNF9vlTVrePZ/TY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740420336; c=relaxed/simple; bh=m/TXcZ1V9wYUyjZBf3CXJr6nC+rAS+lRsSc7xWKjBII=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=olppA3ud8eJnUCQHJk0KXJo47kMkiH/CEoHL0WK87eF0GxhV5UybivdQ1AEq9C6hjKdELSigWsEPfxLphb8OEWBhryYaGd/rJWkZj7YlBUnD43zRPZuOzNdn3EdJxC4NhbeSvQUek9UAa2nnLXOajaiRVAVzTKxyAQHWvMGPEEs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=jdlvvFO1; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="jdlvvFO1" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=QymmzXHWBBhY2HLBjynD7lTm4KzCL4NRO6RJcLeQ2VU=; b=jdlvvFO1AhS6sIDuPlqgCJCv8G SYChc+fKVmV+1FroKqpIiSl5ZJVTARmPbrvDPCOp7WFlnKJZtQn0b7816okIXPcntPJruraboNd+k uOSYRYs7HXhkbqhaUz1BSd4xkExQi+bRkOAJI+ZgTOR7rCdos/wPtIYGdMRmZpZaJn5paDwJkHouC m6AeHYf8vLHZ6fosfKtuccBBNv1qeFJV5FdhNxoEs77x+Y9m+bGe9DAspnStILEaFo2g/gbpBAw0a n3eZHDaq+pFe1IWzBDuuaYyxJgkMsjuUztQSYtKtDZV5/zkQalvstHAOwxGMwhGNosk8fbyza/8Vw R+L3xkug==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tmcph-000000082gN-0MDY; Mon, 24 Feb 2025 18:05:33 +0000 From: "Matthew Wilcox (Oracle)" To: Mike Marshall Cc: "Matthew Wilcox (Oracle)" , Martin Brandenburg , devel@lists.orangefs.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 8/9] orangefs: Simplify bvec setup in orangefs_writepages_work() Date: Mon, 24 Feb 2025 18:05:26 +0000 Message-ID: <20250224180529.1916812-9-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224180529.1916812-1-willy@infradead.org> References: <20250224180529.1916812-1-willy@infradead.org> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 This produces a bvec which is slightly different as the last page is added in its entirety rather than only the portion which is being written back. However we don't use this information anywhere; the iovec has its own length parameter. Signed-off-by: Matthew Wilcox (Oracle) --- fs/orangefs/inode.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c index 927c2829976c..7b5272931e3b 100644 --- a/fs/orangefs/inode.c +++ b/fs/orangefs/inode.c @@ -83,18 +83,18 @@ static int orangefs_writepages_work(struct orangefs_writepages *ow, struct orangefs_write_range *wrp, wr; struct iov_iter iter; ssize_t ret; + size_t start; loff_t len, off; int i; len = i_size_read(inode); + start = offset_in_page(ow->off); for (i = 0; i < ow->npages; i++) { set_page_writeback(ow->pages[i]); - bvec_set_page(&ow->bv[i], ow->pages[i], - min(page_offset(ow->pages[i]) + PAGE_SIZE, - ow->off + ow->len) - - max(ow->off, page_offset(ow->pages[i])), - i == 0 ? ow->off - page_offset(ow->pages[i]) : 0); + bvec_set_page(&ow->bv[i], ow->pages[i], PAGE_SIZE - start, + start); + start = 0; } iov_iter_bvec(&iter, ITER_SOURCE, ow->bv, ow->npages, ow->len); From patchwork Mon Feb 24 18:05:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthew Wilcox (Oracle)" X-Patchwork-Id: 13988657 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EBD7B26560F for ; Mon, 24 Feb 2025 18:05:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740420336; cv=none; b=RUff9rEcsNyCwg6VqZu0yOW34OVFUx8MiOj+SrmZHZb8GlhExyFdMqpd4a+GBwTWXTexXsv/O7L9W/Q/xX6gvqfwNxuS1QFExtjAYF3OyUs6cs9TASKD+PA8SzoL8vulrQVAUKaer6PAMOBnIalyt5GJC/pAb6aDtAGOlMwIl0A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740420336; c=relaxed/simple; bh=lRGm6pIo5r4BMXs3sbPin41zQghVM4t8oYXPhAHMHmQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uhHW23FjLKcpCaacktugMksuvIHRpzdCHAEzhIySYnZoOyepmmKonYoc+dU9E9GrPJ6V2wqf0Bo1PjOqHh91PNPmS/HlQUFROPDUIaM26h2oyJaRBhkZ1C5JxJmeEqqifrkFH9L3vX9IMsrlQymxfqZnw4mqK78p+gZDODRI7aE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=ZqxxjRaZ; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="ZqxxjRaZ" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=VX6SiPQXZ6HO71HIsGr/vLC/OaqSG/bV0oaX30HN6Vc=; b=ZqxxjRaZwaxoJ8A7wHOTb9qcQS CidWiO0vT94arSRxrvRALnp89ny/ODNxmw8f2c/Sf8NAVCF7mxjQVKm4WEOqW8gtMg74WnJDBBQyo Et2Qy412keCmLFQEBDGpdJILtdopVqltRuQ7Y9B7nslXgL4xNrqJVnIF1xyqYbDPjE795mWy4aBMR Xz1Y1sjyrLAQOHT5zppDkhHP723TBsAx0kmUAfhJAahTwarRq5t+JusMLUHlRMY6aMdkeBmn6Ieoz s19k9Qru2Szd46NXb6TioW/IWci5QoS4AzaB+/qY3OjvqUhJcqpGvGdaAoWrj4E3X+OUbFz06ZVFo wWmGf+gA==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tmcph-000000082gX-0w6Y; Mon, 24 Feb 2025 18:05:33 +0000 From: "Matthew Wilcox (Oracle)" To: Mike Marshall Cc: "Matthew Wilcox (Oracle)" , Martin Brandenburg , devel@lists.orangefs.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 9/9] orangefs: Convert orangefs_writepages to contain an array of folios Date: Mon, 24 Feb 2025 18:05:27 +0000 Message-ID: <20250224180529.1916812-10-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224180529.1916812-1-willy@infradead.org> References: <20250224180529.1916812-1-willy@infradead.org> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The pages being passed in are always folios (since they come from the page cache). This eliminates several hidden calls to compound_head(), and uses of legacy APIs. Signed-off-by: Matthew Wilcox (Oracle) --- fs/orangefs/inode.c | 57 +++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 31 deletions(-) diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c index 7b5272931e3b..5ac743c6bc2e 100644 --- a/fs/orangefs/inode.c +++ b/fs/orangefs/inode.c @@ -70,9 +70,9 @@ struct orangefs_writepages { kuid_t uid; kgid_t gid; int maxpages; - int npages; + int nfolios; struct address_space *mapping; - struct page **pages; + struct folio **folios; struct bio_vec *bv; }; @@ -89,14 +89,14 @@ static int orangefs_writepages_work(struct orangefs_writepages *ow, len = i_size_read(inode); - start = offset_in_page(ow->off); - for (i = 0; i < ow->npages; i++) { - set_page_writeback(ow->pages[i]); - bvec_set_page(&ow->bv[i], ow->pages[i], PAGE_SIZE - start, - start); + start = offset_in_folio(ow->folios[0], ow->off); + for (i = 0; i < ow->nfolios; i++) { + folio_start_writeback(ow->folios[i]); + bvec_set_folio(&ow->bv[i], ow->folios[i], + folio_size(ow->folios[i]) - start, start); start = 0; } - iov_iter_bvec(&iter, ITER_SOURCE, ow->bv, ow->npages, ow->len); + iov_iter_bvec(&iter, ITER_SOURCE, ow->bv, ow->nfolios, ow->len); WARN_ON(ow->off >= len); if (ow->off + ow->len > len) @@ -112,16 +112,11 @@ static int orangefs_writepages_work(struct orangefs_writepages *ow, else ret = 0; - for (i = 0; i < ow->npages; i++) { - if (PagePrivate(ow->pages[i])) { - wrp = (struct orangefs_write_range *) - page_private(ow->pages[i]); - ClearPagePrivate(ow->pages[i]); - put_page(ow->pages[i]); - kfree(wrp); - } - end_page_writeback(ow->pages[i]); - unlock_page(ow->pages[i]); + for (i = 0; i < ow->nfolios; i++) { + wrp = folio_detach_private(ow->folios[i]); + kfree(wrp); + folio_end_writeback(ow->folios[i]); + folio_unlock(ow->folios[i]); } return ret; @@ -142,41 +137,41 @@ static int orangefs_writepages_callback(struct folio *folio, } ret = -1; - if (ow->npages == 0) { + if (ow->nfolios == 0) { ow->off = wr->pos; ow->len = wr->len; ow->uid = wr->uid; ow->gid = wr->gid; - ow->pages[ow->npages++] = &folio->page; + ow->folios[ow->nfolios++] = folio; ret = 0; goto done; } if (!uid_eq(ow->uid, wr->uid) || !gid_eq(ow->gid, wr->gid)) { orangefs_writepages_work(ow, wbc); - ow->npages = 0; + ow->nfolios = 0; ret = -1; goto done; } if (ow->off + ow->len == wr->pos) { ow->len += wr->len; - ow->pages[ow->npages++] = &folio->page; + ow->folios[ow->nfolios++] = folio; ret = 0; goto done; } done: if (ret == -1) { - if (ow->npages) { + if (ow->nfolios) { orangefs_writepages_work(ow, wbc); - ow->npages = 0; + ow->nfolios = 0; } ret = orangefs_writepage_locked(folio, wbc); mapping_set_error(folio->mapping, ret); folio_unlock(folio); folio_end_writeback(folio); } else { - if (ow->npages == ow->maxpages) { + if (ow->nfolios == ow->maxpages) { orangefs_writepages_work(ow, wbc); - ow->npages = 0; + ow->nfolios = 0; } } return ret; @@ -194,14 +189,14 @@ static int orangefs_writepages(struct address_space *mapping, if (!ow) return -ENOMEM; ow->maxpages = orangefs_bufmap_size_query()/PAGE_SIZE; - ow->pages = kcalloc(ow->maxpages, sizeof(struct page *), GFP_KERNEL); - if (!ow->pages) { + ow->folios = kcalloc(ow->maxpages, sizeof(struct folio *), GFP_KERNEL); + if (!ow->folios) { kfree(ow); return -ENOMEM; } ow->bv = kcalloc(ow->maxpages, sizeof(struct bio_vec), GFP_KERNEL); if (!ow->bv) { - kfree(ow->pages); + kfree(ow->folios); kfree(ow); return -ENOMEM; } @@ -209,10 +204,10 @@ static int orangefs_writepages(struct address_space *mapping, blk_start_plug(&plug); while ((folio = writeback_iter(mapping, wbc, folio, &error))) error = orangefs_writepages_callback(folio, wbc, ow); - if (ow->npages) + if (ow->nfolios) error = orangefs_writepages_work(ow, wbc); blk_finish_plug(&plug); - kfree(ow->pages); + kfree(ow->folios); kfree(ow->bv); kfree(ow); return error;