From patchwork Tue Jan 24 12:06:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kara X-Patchwork-Id: 13113887 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 16CF4C25B50 for ; Tue, 24 Jan 2023 12:06:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233438AbjAXMGq (ORCPT ); Tue, 24 Jan 2023 07:06:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51006 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233364AbjAXMGf (ORCPT ); Tue, 24 Jan 2023 07:06:35 -0500 Received: from smtp-out2.suse.de (smtp-out2.suse.de [IPv6:2001:67c:2178:6::1d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9D36F43459 for ; Tue, 24 Jan 2023 04:06:33 -0800 (PST) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 804E01F45B; Tue, 24 Jan 2023 12:06:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1674561991; h=from:from:reply-to: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=hy4VOZBmtEU89Bx7353BUzINIoSVHvCrzaZkcayD8yc=; b=X4DOTgDX20MQVDVj/V1L6j1+pWAV3pJbo47sV43LxiDF4kBif3PTQLuZmRQxymSTj4Ko6M lwVu3Zq6cj1vi8oos9Mq2fdGCWExekmKb5OGTp++Wh1fCkBHCLUszme+bm5q1/xuKbdNaK PBeAsfIcYtec8PM9aEhHYoiM6q0LumA= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1674561991; h=from:from:reply-to: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=hy4VOZBmtEU89Bx7353BUzINIoSVHvCrzaZkcayD8yc=; b=j6QTeR9zfBybJA65I6fJ2+BMnXaYhAc/1wuozvBl3f0Z/srX4rUOgjYJeE00Zq4Oe9xqqv zIaYq0ZCcmai7rDA== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 731C7139FB; Tue, 24 Jan 2023 12:06:31 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id 4KYWHMfJz2P9MAAAMHmgww (envelope-from ); Tue, 24 Jan 2023 12:06:31 +0000 Received: by quack3.suse.cz (Postfix, from userid 1000) id 21937A06B5; Tue, 24 Jan 2023 13:06:31 +0100 (CET) From: Jan Kara To: Cc: Christoph Hellwig , Jan Kara Subject: [PATCH 01/10] udf: Unify .read_folio for normal and in-ICB files Date: Tue, 24 Jan 2023 13:06:12 +0100 Message-Id: <20230124120628.24449-1-jack@suse.cz> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20230124120221.31585-1-jack@suse.cz> References: <20230124120221.31585-1-jack@suse.cz> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3528; i=jack@suse.cz; h=from:subject; bh=+Aw3Zp3tgnBCgNL73bIVEpE5qYNcKCVPpG6msw1G5z8=; b=owEBbQGS/pANAwAIAZydqgc/ZEDZAcsmYgBjz8m0xL3HZyvI1qrDKH48UkmT+DTxcU+tdvXmeLRW oS3z0SqJATMEAAEIAB0WIQSrWdEr1p4yirVVKBycnaoHP2RA2QUCY8/JtAAKCRCcnaoHP2RA2fcfB/ 44C0k9WRWXb2fZpfsL/IkGclzWeJh8FNDiUqBQEStM0g9cVhLY6XyI5PA72SHlGJJECc60dQprdh9n PEZqGS3vHC+k9DzAF+FwTcxiploRHVRQV26Lfs3SYj8LkQjoqGyARTd24QhwPQT3bE/1Dt4ozSNp9C L7i9K6Ssf7Mex6asqrT+Z+o204uS60xmGOIC0O8Ae4AJhHx2sZNNfAXx8fh0m3IneoWikpi9MgsgFt X+Mba69n34MflzeLH8TKnHC735tuHpnf+OzlDbcuXd11mPEU9qDf6CLSUDha9Sv7fDiQmP6E/i4OXq XVhLzI9UdpOw9ld77oUKkjO3Uux3ZI X-Developer-Key: i=jack@suse.cz; a=openpgp; fpr=93C6099A142276A28BBE35D815BC833443038D8C Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Switching address_space_operations while a file is used is difficult to do in a race-free way. To be able to use single address_space_operations in UDF, make udf_read_folio() handle both normal and in-ICB files. Signed-off-by: Jan Kara Reviewed-by: Christoph Hellwig --- fs/udf/file.c | 15 +++------------ fs/udf/inode.c | 9 ++++++++- fs/udf/udfdecl.h | 2 ++ 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/fs/udf/file.c b/fs/udf/file.c index 322115c8369d..2666234a5204 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c @@ -38,7 +38,7 @@ #include "udf_i.h" #include "udf_sb.h" -static void __udf_adinicb_readpage(struct page *page) +void udf_adinicb_readpage(struct page *page) { struct inode *inode = page->mapping->host; char *kaddr; @@ -57,15 +57,6 @@ static void __udf_adinicb_readpage(struct page *page) kunmap_atomic(kaddr); } -static int udf_adinicb_read_folio(struct file *file, struct folio *folio) -{ - BUG_ON(!folio_test_locked(folio)); - __udf_adinicb_readpage(&folio->page); - folio_unlock(folio); - - return 0; -} - static int udf_adinicb_writepage(struct page *page, struct writeback_control *wbc) { @@ -100,7 +91,7 @@ static int udf_adinicb_write_begin(struct file *file, *pagep = page; if (!PageUptodate(page)) - __udf_adinicb_readpage(page); + udf_adinicb_readpage(page); return 0; } @@ -127,7 +118,7 @@ static int udf_adinicb_write_end(struct file *file, struct address_space *mappin const struct address_space_operations udf_adinicb_aops = { .dirty_folio = block_dirty_folio, .invalidate_folio = block_invalidate_folio, - .read_folio = udf_adinicb_read_folio, + .read_folio = udf_read_folio, .writepage = udf_adinicb_writepage, .write_begin = udf_adinicb_write_begin, .write_end = udf_adinicb_write_end, diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 15e0d9f23c06..9ef56574e452 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -191,8 +191,15 @@ static int udf_writepages(struct address_space *mapping, return mpage_writepages(mapping, wbc, udf_get_block_wb); } -static int udf_read_folio(struct file *file, struct folio *folio) +int udf_read_folio(struct file *file, struct folio *folio) { + struct udf_inode_info *iinfo = UDF_I(file_inode(file)); + + if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) { + udf_adinicb_readpage(&folio->page); + folio_unlock(folio); + return 0; + } return mpage_read_folio(folio, udf_get_block); } diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h index 5ba59ab90d48..6b93b393cb46 100644 --- a/fs/udf/udfdecl.h +++ b/fs/udf/udfdecl.h @@ -138,6 +138,7 @@ static inline unsigned int udf_dir_entry_len(struct fileIdentDesc *cfi) /* file.c */ extern long udf_ioctl(struct file *, unsigned int, unsigned long); +void udf_adinicb_readpage(struct page *page); /* inode.c */ extern struct inode *__udf_iget(struct super_block *, struct kernel_lb_addr *, @@ -158,6 +159,7 @@ extern struct buffer_head *udf_bread(struct inode *inode, udf_pblk_t block, extern int udf_setsize(struct inode *, loff_t); extern void udf_evict_inode(struct inode *); extern int udf_write_inode(struct inode *, struct writeback_control *wbc); +int udf_read_folio(struct file *file, struct folio *folio); extern int8_t inode_bmap(struct inode *, sector_t, struct extent_position *, struct kernel_lb_addr *, uint32_t *, sector_t *); int udf_get_block(struct inode *, sector_t, struct buffer_head *, int); From patchwork Tue Jan 24 12:06:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kara X-Patchwork-Id: 13113881 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6404AC25B4E for ; Tue, 24 Jan 2023 12:06:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233330AbjAXMGk (ORCPT ); Tue, 24 Jan 2023 07:06:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50982 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229935AbjAXMGe (ORCPT ); Tue, 24 Jan 2023 07:06:34 -0500 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CFE3D2330C for ; Tue, 24 Jan 2023 04:06:32 -0800 (PST) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 8E7C82186E; Tue, 24 Jan 2023 12:06:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1674561991; h=from:from:reply-to: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=ty2kukv5CA/sDrV7h7EMy8mqPfLF2jDWPEmcN+kLzCs=; b=3DqDROsRgyVjdFXsWohp4GFnEvZJ3wSaVM2qywsYTkhRIQzdSVhRxv6766/da5yT5Kr65c yQqzFHsVOyD0AkVna5gX5shPdzPY5YtaVyRNM1lRYi6yVbVWE7oHzFCN2FNdBvabdLDMND bbvA+JRZBJw5Nv05DJsM1B3k5kQ7FFs= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1674561991; h=from:from:reply-to: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=ty2kukv5CA/sDrV7h7EMy8mqPfLF2jDWPEmcN+kLzCs=; b=4yTi8BOlFZ+ssvnWf73mnzDliS3km0ANjvHKoT1fKhyZv5EjPicklui0jlVuKtl3VOIj5Y neZqEdg0FwYEiXDg== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 8227A139FF; Tue, 24 Jan 2023 12:06:31 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id IgPJH8fJz2P/MAAAMHmgww (envelope-from ); Tue, 24 Jan 2023 12:06:31 +0000 Received: by quack3.suse.cz (Postfix, from userid 1000) id 27ADAA06B6; Tue, 24 Jan 2023 13:06:31 +0100 (CET) From: Jan Kara To: Cc: Christoph Hellwig , Jan Kara , syzbot+c27475eb921c46bbdc62@syzkaller.appspotmail.com, Christoph Hellwig Subject: [PATCH 02/10] udf: Convert in-ICB files to use udf_writepages() Date: Tue, 24 Jan 2023 13:06:13 +0100 Message-Id: <20230124120628.24449-2-jack@suse.cz> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20230124120221.31585-1-jack@suse.cz> References: <20230124120221.31585-1-jack@suse.cz> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3769; i=jack@suse.cz; h=from:subject; bh=2Z4cAOOiB13cyQgSOEL1SkmEftf7+sJCV2/2EOyYTKk=; b=owEBbQGS/pANAwAIAZydqgc/ZEDZAcsmYgBjz8m1vhS5QeerQ3cvpkVz/Thgcbj7TA7oI+aeybcf t/V2j8iJATMEAAEIAB0WIQSrWdEr1p4yirVVKBycnaoHP2RA2QUCY8/JtQAKCRCcnaoHP2RA2az3B/ 98bAwhMyONWA+O4GXVrkDDLl66gCN7G0pO4iHgxH6txbEwAgQXfqN6jPiQT4IOy1dCMOLmgKmqiLgs 6h35WtVYHZ7qGFwwPD+8HQWfkkQEgqO6uTPeKgsMEby7l50lXRVi0dvyNuRJ+XBO84+/qgJ2QmUKKV Ki9NjQQV278fU6V+jA6lW95K9QB7k5kA1iaIlZ8ulEJLIDWYAEp+XglnrQS8z//XBGKUj7+JFLmI5f jjHquVjNLork+4tZvRJv9dq5HWo4sAbGGhRBn1/GfQ/7tWC4xTwaohRQlH7p3zgFngdzZ5mPcsbExS 0kuljquYLIj1XLgqojhO4ycyURYnkR X-Developer-Key: i=jack@suse.cz; a=openpgp; fpr=93C6099A142276A28BBE35D815BC833443038D8C Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Switching address_space_operations while a file is used is difficult to do in a race-free way. To be able to use single address_space_operations in UDF, make in-ICB files use udf_writepages(). Reported-by: syzbot+c27475eb921c46bbdc62@syzkaller.appspotmail.com Reported-by: Christoph Hellwig Signed-off-by: Jan Kara Reviewed-by: Christoph Hellwig --- fs/udf/file.c | 21 +-------------------- fs/udf/inode.c | 29 ++++++++++++++++++++++++++--- fs/udf/udfdecl.h | 1 + 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/fs/udf/file.c b/fs/udf/file.c index 2666234a5204..7a8dbad86e41 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c @@ -57,25 +57,6 @@ void udf_adinicb_readpage(struct page *page) kunmap_atomic(kaddr); } -static int udf_adinicb_writepage(struct page *page, - struct writeback_control *wbc) -{ - struct inode *inode = page->mapping->host; - char *kaddr; - struct udf_inode_info *iinfo = UDF_I(inode); - - BUG_ON(!PageLocked(page)); - - kaddr = kmap_atomic(page); - memcpy(iinfo->i_data + iinfo->i_lenEAttr, kaddr, i_size_read(inode)); - SetPageUptodate(page); - kunmap_atomic(kaddr); - mark_inode_dirty(inode); - unlock_page(page); - - return 0; -} - static int udf_adinicb_write_begin(struct file *file, struct address_space *mapping, loff_t pos, unsigned len, struct page **pagep, @@ -119,7 +100,7 @@ const struct address_space_operations udf_adinicb_aops = { .dirty_folio = block_dirty_folio, .invalidate_folio = block_invalidate_folio, .read_folio = udf_read_folio, - .writepage = udf_adinicb_writepage, + .writepages = udf_writepages, .write_begin = udf_adinicb_write_begin, .write_end = udf_adinicb_write_end, .direct_IO = udf_adinicb_direct_IO, diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 9ef56574e452..54e6127ebf55 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -185,10 +185,33 @@ static void udf_write_failed(struct address_space *mapping, loff_t to) } } -static int udf_writepages(struct address_space *mapping, - struct writeback_control *wbc) +static int udf_adinicb_writepage(struct page *page, + struct writeback_control *wbc, void *data) { - return mpage_writepages(mapping, wbc, udf_get_block_wb); + struct inode *inode = page->mapping->host; + char *kaddr; + struct udf_inode_info *iinfo = UDF_I(inode); + + BUG_ON(!PageLocked(page)); + + kaddr = kmap_atomic(page); + memcpy(iinfo->i_data + iinfo->i_lenEAttr, kaddr, i_size_read(inode)); + SetPageUptodate(page); + kunmap_atomic(kaddr); + unlock_page(page); + mark_inode_dirty(inode); + + return 0; +} + +int udf_writepages(struct address_space *mapping, struct writeback_control *wbc) +{ + struct inode *inode = mapping->host; + struct udf_inode_info *iinfo = UDF_I(inode); + + if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB) + return mpage_writepages(mapping, wbc, udf_get_block_wb); + return write_cache_pages(mapping, wbc, udf_adinicb_writepage, NULL); } int udf_read_folio(struct file *file, struct folio *folio) diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h index 6b93b393cb46..48647eab26a6 100644 --- a/fs/udf/udfdecl.h +++ b/fs/udf/udfdecl.h @@ -160,6 +160,7 @@ extern int udf_setsize(struct inode *, loff_t); extern void udf_evict_inode(struct inode *); extern int udf_write_inode(struct inode *, struct writeback_control *wbc); int udf_read_folio(struct file *file, struct folio *folio); +int udf_writepages(struct address_space *mapping, struct writeback_control *wbc); extern int8_t inode_bmap(struct inode *, sector_t, struct extent_position *, struct kernel_lb_addr *, uint32_t *, sector_t *); int udf_get_block(struct inode *, sector_t, struct buffer_head *, int); From patchwork Tue Jan 24 12:06:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kara X-Patchwork-Id: 13113878 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6C2A7C25B4E for ; Tue, 24 Jan 2023 12:06:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233356AbjAXMGf (ORCPT ); Tue, 24 Jan 2023 07:06:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50984 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233118AbjAXMGe (ORCPT ); Tue, 24 Jan 2023 07:06:34 -0500 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D95242333A for ; Tue, 24 Jan 2023 04:06:32 -0800 (PST) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 999B62186F; Tue, 24 Jan 2023 12:06:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1674561991; h=from:from:reply-to: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=RAHsfO1gYoBTfHFesFHiNYZ3kre+lrECI+1qGMOWBHM=; b=e68FUPzYnb+AxA2dL0clX/nnuVAp+MCiPqiIeuOB+g5ENH05H92VOaW11pPWglb8gWs3iM Jr3iSsOB8ycyg98eVF28dZlEU9df3huxzPA8OAp1cAO7VyNa6mr2WjXzWozCDRsjhshJ4x UJaDCMM1Kp1A6b+TVtoSmAv6Iej8JIc= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1674561991; h=from:from:reply-to: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=RAHsfO1gYoBTfHFesFHiNYZ3kre+lrECI+1qGMOWBHM=; b=e9z6tJkNgkgt7dOfq2Ob0HeJxcS9hpgCA0Rz0b4vaAsZLGKiqwpPhiW5snx7SiiSP3+65e wByxx+tjv4hWjxCA== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 8A819139FB; Tue, 24 Jan 2023 12:06:31 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id gjCEIcfJz2MBMQAAMHmgww (envelope-from ); Tue, 24 Jan 2023 12:06:31 +0000 Received: by quack3.suse.cz (Postfix, from userid 1000) id 2D693A06B9; Tue, 24 Jan 2023 13:06:31 +0100 (CET) From: Jan Kara To: Cc: Christoph Hellwig , Jan Kara Subject: [PATCH 03/10] udf: Convert in-ICB files to use udf_direct_IO() Date: Tue, 24 Jan 2023 13:06:14 +0100 Message-Id: <20230124120628.24449-3-jack@suse.cz> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20230124120221.31585-1-jack@suse.cz> References: <20230124120221.31585-1-jack@suse.cz> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2901; i=jack@suse.cz; h=from:subject; bh=/f6STiVQgXZ4Dt84TDbNEkU4dxgsNG3+TkjM5fQLNso=; b=owEBbQGS/pANAwAIAZydqgc/ZEDZAcsmYgBjz8m2rqrcEMQTobRuwAM64+dQk7GN2KNp2KUApZDg zam3h/mJATMEAAEIAB0WIQSrWdEr1p4yirVVKBycnaoHP2RA2QUCY8/JtgAKCRCcnaoHP2RA2QX5CA Ccyxb5bFpCn87BlFCTDpzT6sz30DQx2CSI188uHtf6oXfOKrix36k6hoyS0BgByMrlhedKo8l4LYfu 7yk/XIiW3vi4XfdbWG/XhalOVrrfu5pwNfXhIhxxIczpJPvxrVsS05gbVpWSI7ADV7dX6wRfYBKZ9n LRIEcLB7nAuofE7STvzXf3I4Fa+9e0Csj0yXf9yvh9ufcg0RV7N+d3/DAVSABLztAk/qYAZ11p3sw4 UsSD6juc1ZcVjq7uaxE6rXWvJV+QndEnPvkqQceXbueS9w8L9oF0TM57GZiNWwqkH6DxMN3uDju+kd 56goDGmy4fYvJIK9JYjgKX6wJUmZPU X-Developer-Key: i=jack@suse.cz; a=openpgp; fpr=93C6099A142276A28BBE35D815BC833443038D8C Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Switching address_space_operations while a file is used is difficult to do in a race-free way. To be able to use single address_space_operations in UDF, make in-ICB files use udf_direct_IO(). Signed-off-by: Jan Kara Reviewed-by: Christoph Hellwig --- fs/udf/file.c | 8 +------- fs/udf/inode.c | 5 ++++- fs/udf/udfdecl.h | 1 + 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/fs/udf/file.c b/fs/udf/file.c index 7a8dbad86e41..6bab6aa7770a 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c @@ -76,12 +76,6 @@ static int udf_adinicb_write_begin(struct file *file, return 0; } -static ssize_t udf_adinicb_direct_IO(struct kiocb *iocb, struct iov_iter *iter) -{ - /* Fallback to buffered I/O. */ - return 0; -} - static int udf_adinicb_write_end(struct file *file, struct address_space *mapping, loff_t pos, unsigned len, unsigned copied, struct page *page, void *fsdata) @@ -103,7 +97,7 @@ const struct address_space_operations udf_adinicb_aops = { .writepages = udf_writepages, .write_begin = udf_adinicb_write_begin, .write_end = udf_adinicb_write_end, - .direct_IO = udf_adinicb_direct_IO, + .direct_IO = udf_direct_IO, }; static vm_fault_t udf_page_mkwrite(struct vm_fault *vmf) diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 54e6127ebf55..52016c942f68 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -243,7 +243,7 @@ static int udf_write_begin(struct file *file, struct address_space *mapping, return ret; } -static ssize_t udf_direct_IO(struct kiocb *iocb, struct iov_iter *iter) +ssize_t udf_direct_IO(struct kiocb *iocb, struct iov_iter *iter) { struct file *file = iocb->ki_filp; struct address_space *mapping = file->f_mapping; @@ -251,6 +251,9 @@ static ssize_t udf_direct_IO(struct kiocb *iocb, struct iov_iter *iter) size_t count = iov_iter_count(iter); ssize_t ret; + /* Fallback to buffered IO for in-ICB files */ + if (UDF_I(inode)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) + return 0; ret = blockdev_direct_IO(iocb, inode, iter, udf_get_block); if (unlikely(ret < 0 && iov_iter_rw(iter) == WRITE)) udf_write_failed(mapping, iocb->ki_pos + count); diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h index 48647eab26a6..a851613465c6 100644 --- a/fs/udf/udfdecl.h +++ b/fs/udf/udfdecl.h @@ -161,6 +161,7 @@ extern void udf_evict_inode(struct inode *); extern int udf_write_inode(struct inode *, struct writeback_control *wbc); int udf_read_folio(struct file *file, struct folio *folio); int udf_writepages(struct address_space *mapping, struct writeback_control *wbc); +ssize_t udf_direct_IO(struct kiocb *iocb, struct iov_iter *iter); extern int8_t inode_bmap(struct inode *, sector_t, struct extent_position *, struct kernel_lb_addr *, uint32_t *, sector_t *); int udf_get_block(struct inode *, sector_t, struct buffer_head *, int); From patchwork Tue Jan 24 12:06:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kara X-Patchwork-Id: 13113884 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C2B73C25B50 for ; Tue, 24 Jan 2023 12:06:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233405AbjAXMGn (ORCPT ); Tue, 24 Jan 2023 07:06:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51008 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233346AbjAXMGe (ORCPT ); Tue, 24 Jan 2023 07:06:34 -0500 Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2001:67c:2178:6::1c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EF1A12BEDE for ; Tue, 24 Jan 2023 04:06:32 -0800 (PST) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 9DE4221870; Tue, 24 Jan 2023 12:06:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1674561991; h=from:from:reply-to: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=3W/Z5L/rQVvH2+Vp+tqcQyTsa4B2jPJQp7bkamGySvk=; b=BxPr9FAHqDKHCwzKo6OwKy2poh4V+g+Pu4pLSTc4z303QDtalE0eSkUhx05kfNBEQetjsQ AVHPYEUzVIhUxMV9AhbQVI3LorWeNLfNyxuZL3/H1aznxeRBu44hfvP53lmqrb8BWzv6GJ 3ZIjsQ7E+QZ9mscEIMyVuO3I6dhVD5o= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1674561991; h=from:from:reply-to: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=3W/Z5L/rQVvH2+Vp+tqcQyTsa4B2jPJQp7bkamGySvk=; b=AHQ4ukclDoJvealudDe9yYgqmlTKjj9igOMqR6HvHb2eoI4BfCIYzoRvOGtSxsOjb/tKVl 95XRUwDTgIBCnOBw== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 9139613A04; Tue, 24 Jan 2023 12:06:31 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id YipsI8fJz2MEMQAAMHmgww (envelope-from ); Tue, 24 Jan 2023 12:06:31 +0000 Received: by quack3.suse.cz (Postfix, from userid 1000) id 33605A06C5; Tue, 24 Jan 2023 13:06:31 +0100 (CET) From: Jan Kara To: Cc: Christoph Hellwig , Jan Kara Subject: [PATCH 04/10] udf: Convert in-ICB files to use udf_write_begin() Date: Tue, 24 Jan 2023 13:06:15 +0100 Message-Id: <20230124120628.24449-4-jack@suse.cz> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20230124120221.31585-1-jack@suse.cz> References: <20230124120221.31585-1-jack@suse.cz> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3643; i=jack@suse.cz; h=from:subject; bh=wEf6/4UzZKr4921ATwS9G7K/Mt18TbUw8aarYllmkmw=; b=owEBbQGS/pANAwAIAZydqgc/ZEDZAcsmYgBjz8m3M3pRF3ypuZZRl/HXudol4qFCgL6gN6nzXdkV 01rxa9eJATMEAAEIAB0WIQSrWdEr1p4yirVVKBycnaoHP2RA2QUCY8/JtwAKCRCcnaoHP2RA2UEICA CQuKjV4zmyW+HUH6oqBP9r40ei7Bxewirfs8XvXN8H3LX9BEFP03v6Qld4IrLwM2HUam8TifVCwOvp zRtYgfKLMvo5WK3DNERoZ67Ewars6vC3tDIvl1CiP5M+zJ+wsBQgflb9ISVljdcFj/rbW7gtv1Gry+ m/w4/15BsCERMaguh+ev0XRgFTaiy+FaxvXWsKHpPLfx8GWeR3dwSDTL6rGAHV+oJ2qzDKBDxhliOg uQnHJ/HMcjJCy957lf3LqeJnqfbeUdn6HWG0SyeC5WMUuQ/W7k9FkGCIF0mcNVIWwmL8j1fvPTzFoI /3oYMZhnLNSEehWrhD1eQESWzBEJEA X-Developer-Key: i=jack@suse.cz; a=openpgp; fpr=93C6099A142276A28BBE35D815BC833443038D8C Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Switching address_space_operations while a file is used is difficult to do in a race-free way. To be able to use single address_space_operations in UDF, make in-ICB files use udf_write_begin(). Signed-off-by: Jan Kara Reviewed-by: Christoph Hellwig --- fs/udf/file.c | 21 +-------------------- fs/udf/inode.c | 24 +++++++++++++++++++----- fs/udf/udfdecl.h | 3 +++ 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/fs/udf/file.c b/fs/udf/file.c index 6bab6aa7770a..16aecf4b2387 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c @@ -57,25 +57,6 @@ void udf_adinicb_readpage(struct page *page) kunmap_atomic(kaddr); } -static int udf_adinicb_write_begin(struct file *file, - struct address_space *mapping, loff_t pos, - unsigned len, struct page **pagep, - void **fsdata) -{ - struct page *page; - - if (WARN_ON_ONCE(pos >= PAGE_SIZE)) - return -EIO; - page = grab_cache_page_write_begin(mapping, 0); - if (!page) - return -ENOMEM; - *pagep = page; - - if (!PageUptodate(page)) - udf_adinicb_readpage(page); - return 0; -} - static int udf_adinicb_write_end(struct file *file, struct address_space *mapping, loff_t pos, unsigned len, unsigned copied, struct page *page, void *fsdata) @@ -95,7 +76,7 @@ const struct address_space_operations udf_adinicb_aops = { .invalidate_folio = block_invalidate_folio, .read_folio = udf_read_folio, .writepages = udf_writepages, - .write_begin = udf_adinicb_write_begin, + .write_begin = udf_write_begin, .write_end = udf_adinicb_write_end, .direct_IO = udf_direct_IO, }; diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 52016c942f68..7f5b2b1f9847 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -231,16 +231,30 @@ static void udf_readahead(struct readahead_control *rac) mpage_readahead(rac, udf_get_block); } -static int udf_write_begin(struct file *file, struct address_space *mapping, +int udf_write_begin(struct file *file, struct address_space *mapping, loff_t pos, unsigned len, struct page **pagep, void **fsdata) { + struct udf_inode_info *iinfo = UDF_I(file_inode(file)); + struct page *page; int ret; - ret = block_write_begin(mapping, pos, len, pagep, udf_get_block); - if (unlikely(ret)) - udf_write_failed(mapping, pos + len); - return ret; + if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB) { + ret = block_write_begin(mapping, pos, len, pagep, + udf_get_block); + if (unlikely(ret)) + udf_write_failed(mapping, pos + len); + return ret; + } + if (WARN_ON_ONCE(pos >= PAGE_SIZE)) + return -EIO; + page = grab_cache_page_write_begin(mapping, 0); + if (!page) + return -ENOMEM; + *pagep = page; + if (!PageUptodate(page)) + udf_adinicb_readpage(page); + return 0; } ssize_t udf_direct_IO(struct kiocb *iocb, struct iov_iter *iter) diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h index a851613465c6..32decf6b6a21 100644 --- a/fs/udf/udfdecl.h +++ b/fs/udf/udfdecl.h @@ -161,6 +161,9 @@ extern void udf_evict_inode(struct inode *); extern int udf_write_inode(struct inode *, struct writeback_control *wbc); int udf_read_folio(struct file *file, struct folio *folio); int udf_writepages(struct address_space *mapping, struct writeback_control *wbc); +int udf_write_begin(struct file *file, struct address_space *mapping, + loff_t pos, unsigned len, + struct page **pagep, void **fsdata); ssize_t udf_direct_IO(struct kiocb *iocb, struct iov_iter *iter); extern int8_t inode_bmap(struct inode *, sector_t, struct extent_position *, struct kernel_lb_addr *, uint32_t *, sector_t *); From patchwork Tue Jan 24 12:06:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kara X-Patchwork-Id: 13113879 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3F06CC25B50 for ; Tue, 24 Jan 2023 12:06:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233371AbjAXMGg (ORCPT ); Tue, 24 Jan 2023 07:06:36 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50996 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233279AbjAXMGe (ORCPT ); Tue, 24 Jan 2023 07:06:34 -0500 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E074C2A142 for ; Tue, 24 Jan 2023 04:06:32 -0800 (PST) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id A20D021871; Tue, 24 Jan 2023 12:06:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1674561991; h=from:from:reply-to: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=OUIgpUoILBkxxrNX4TYpwRPxjlAl4KhtPM5NNincH1U=; b=G9h6HiZFQwjcaJ05GgJePCGIarGhhFAZGQbXoQtw5DQdaUq6k8Ezp8VF5XheDuYDK3drmk nUbvg5BZtnKeR3b4stM5pqhkJYxE7/MAHSJGkxc+xalZrJ8cfy8YtRcqCT3/O/fJb3Saml TnHxyYGd+R/J7HtYY3Pbek8d8Wmw7Fw= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1674561991; h=from:from:reply-to: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=OUIgpUoILBkxxrNX4TYpwRPxjlAl4KhtPM5NNincH1U=; b=Q3w9B8LjSFet+ngAPr61B9H7QLuncfwVOe6g9jWdz5IggEDvxhPi4M3OOn9vibb8wxbAuC CeKngWj/yT4jevBw== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 954AF139FF; Tue, 24 Jan 2023 12:06:31 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id QCxuJMfJz2MFMQAAMHmgww (envelope-from ); Tue, 24 Jan 2023 12:06:31 +0000 Received: by quack3.suse.cz (Postfix, from userid 1000) id 395F5A06C6; Tue, 24 Jan 2023 13:06:31 +0100 (CET) From: Jan Kara To: Cc: Christoph Hellwig , Jan Kara Subject: [PATCH 05/10] udf: Convert all file types to use udf_write_end() Date: Tue, 24 Jan 2023 13:06:16 +0100 Message-Id: <20230124120628.24449-5-jack@suse.cz> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20230124120221.31585-1-jack@suse.cz> References: <20230124120221.31585-1-jack@suse.cz> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3467; i=jack@suse.cz; h=from:subject; bh=hzRIKA29NwS4YIjo2R5FmWKQBDYsGUn89kb2rsG48FM=; b=owEBbQGS/pANAwAIAZydqgc/ZEDZAcsmYgBjz8m3nYGeYBEIa69N6k+RBUDDl4UvXhSDzU94uHgb sZpkfReJATMEAAEIAB0WIQSrWdEr1p4yirVVKBycnaoHP2RA2QUCY8/JtwAKCRCcnaoHP2RA2RtYB/ 4y1ZOeFWG3pOG/J94zUgqWZuWg8UoggijSbK5CuTIPHfYeYh9QwwvJWERI/X2pkZDd8+N403TUIwyv 6HjzjSMro0hvYDLcqNuYYJMO+WnDmeN44dKp5DtTB3GErhBo1F4LzUIuYh00yXOMr/N2PNvEEo1diz lfFf8DTU5/C0ljjggqV5u1KRPclU/R+tBJxc8hGHJLHkv/X6ZQF34qXzJdk9WOClzeWcDk6qUnrHFx x2FKO6reafXWGSFvfxTWnj+YFJ6ppADpxiYYSychxKJQhtLFXUedsDMx1V5ulG5zeEJvf5Uku6XOUO IEth8T+qOGqxh51Q28jtmjyuAFFrD6 X-Developer-Key: i=jack@suse.cz; a=openpgp; fpr=93C6099A142276A28BBE35D815BC833443038D8C Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Switching address_space_operations while a file is used is difficult to do in a race-free way. To be able to use single address_space_operations in UDF, create udf_write_end() function that is able to handle both normal and in-ICB files. Signed-off-by: Jan Kara Reviewed-by: Christoph Hellwig --- fs/udf/file.c | 16 +--------------- fs/udf/inode.c | 22 +++++++++++++++++++++- fs/udf/udfdecl.h | 3 +++ 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/fs/udf/file.c b/fs/udf/file.c index 16aecf4b2387..8a37cd593883 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c @@ -57,27 +57,13 @@ void udf_adinicb_readpage(struct page *page) kunmap_atomic(kaddr); } -static int udf_adinicb_write_end(struct file *file, struct address_space *mapping, - loff_t pos, unsigned len, unsigned copied, - struct page *page, void *fsdata) -{ - struct inode *inode = page->mapping->host; - loff_t last_pos = pos + copied; - if (last_pos > inode->i_size) - i_size_write(inode, last_pos); - set_page_dirty(page); - unlock_page(page); - put_page(page); - return copied; -} - const struct address_space_operations udf_adinicb_aops = { .dirty_folio = block_dirty_folio, .invalidate_folio = block_invalidate_folio, .read_folio = udf_read_folio, .writepages = udf_writepages, .write_begin = udf_write_begin, - .write_end = udf_adinicb_write_end, + .write_end = udf_write_end, .direct_IO = udf_direct_IO, }; diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 7f5b2b1f9847..91758c8d77e5 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -257,6 +257,26 @@ int udf_write_begin(struct file *file, struct address_space *mapping, return 0; } +int udf_write_end(struct file *file, struct address_space *mapping, + loff_t pos, unsigned len, unsigned copied, + struct page *page, void *fsdata) +{ + struct inode *inode = file_inode(file); + loff_t last_pos; + + if (UDF_I(inode)->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB) + return generic_write_end(file, mapping, pos, len, copied, page, + fsdata); + last_pos = pos + copied; + if (last_pos > inode->i_size) + i_size_write(inode, last_pos); + set_page_dirty(page); + unlock_page(page); + put_page(page); + + return copied; +} + ssize_t udf_direct_IO(struct kiocb *iocb, struct iov_iter *iter) { struct file *file = iocb->ki_filp; @@ -286,7 +306,7 @@ const struct address_space_operations udf_aops = { .readahead = udf_readahead, .writepages = udf_writepages, .write_begin = udf_write_begin, - .write_end = generic_write_end, + .write_end = udf_write_end, .direct_IO = udf_direct_IO, .bmap = udf_bmap, .migrate_folio = buffer_migrate_folio, diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h index 32decf6b6a21..304c2ec81589 100644 --- a/fs/udf/udfdecl.h +++ b/fs/udf/udfdecl.h @@ -164,6 +164,9 @@ int udf_writepages(struct address_space *mapping, struct writeback_control *wbc) int udf_write_begin(struct file *file, struct address_space *mapping, loff_t pos, unsigned len, struct page **pagep, void **fsdata); +int udf_write_end(struct file *file, struct address_space *mapping, + loff_t pos, unsigned len, unsigned copied, + struct page *page, void *fsdata); ssize_t udf_direct_IO(struct kiocb *iocb, struct iov_iter *iter); extern int8_t inode_bmap(struct inode *, sector_t, struct extent_position *, struct kernel_lb_addr *, uint32_t *, sector_t *); From patchwork Tue Jan 24 12:06:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kara X-Patchwork-Id: 13113882 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5373AC54EAA for ; Tue, 24 Jan 2023 12:06:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233390AbjAXMGl (ORCPT ); Tue, 24 Jan 2023 07:06:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51002 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233318AbjAXMGe (ORCPT ); Tue, 24 Jan 2023 07:06:34 -0500 Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2001:67c:2178:6::1c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5172542DE5 for ; Tue, 24 Jan 2023 04:06:33 -0800 (PST) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id E0E4D21872; Tue, 24 Jan 2023 12:06:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1674561991; h=from:from:reply-to: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=cUNsigO42UKlZzM/npKTxr/a+9VF26HvLakw/u/66XM=; b=sqRAN5I58aWJJrOJ3mfiTtA0Eox3sWPcMDzo3yBIcHoAmcQtsqx7iQ8+89OdEo3GGLmQTq BWsxSH4JBR37Q8AwHma1++ARQpdd+ZY5h0+syBd6r6UDZcci+6BC2ycV2Idazk4WBTxUId exmEViqsNmy3Thc5Z8/TP1lupYtIMYg= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1674561991; h=from:from:reply-to: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=cUNsigO42UKlZzM/npKTxr/a+9VF26HvLakw/u/66XM=; b=bl6kB+sDgclbJ647Y36sDJSMOzE10l72W4Wl+ZUiorWtQ8XsEW/wc1SJEKhxhcFnVjV0Ic 96qFtB0LHt0fCzDw== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id D38EF139FB; Tue, 24 Jan 2023 12:06:31 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id BFOoM8fJz2MLMQAAMHmgww (envelope-from ); Tue, 24 Jan 2023 12:06:31 +0000 Received: by quack3.suse.cz (Postfix, from userid 1000) id 3F236A06D0; Tue, 24 Jan 2023 13:06:31 +0100 (CET) From: Jan Kara To: Cc: Christoph Hellwig , Jan Kara Subject: [PATCH 06/10] udf: Add handling of in-ICB files to udf_bmap() Date: Tue, 24 Jan 2023 13:06:17 +0100 Message-Id: <20230124120628.24449-6-jack@suse.cz> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20230124120221.31585-1-jack@suse.cz> References: <20230124120221.31585-1-jack@suse.cz> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=763; i=jack@suse.cz; h=from:subject; bh=MCO/4rTn0U00y2bP1Aw7PWrhPbOM8v+P/OKYeSTHORM=; b=owEBbQGS/pANAwAIAZydqgc/ZEDZAcsmYgBjz8m4Ljet75Ff18+3Ce26zp7Ix0Hav2IPKfjY5l8F Kwx0kqGJATMEAAEIAB0WIQSrWdEr1p4yirVVKBycnaoHP2RA2QUCY8/JuAAKCRCcnaoHP2RA2aVnB/ 9x6X38J9m6OJ9YPIMeXTk7lQg4HUSStyXSzAz7RTEom6eYa7CTck8re79rustZVKyoR+y268RFXnN4 mqrHJXcdc0+MriiCV6dmlbV9CdJyHlwY+h/YXjCwcHHD5OinRcdw2YUdMrMITWUEcMiBS1Fws9Ggep t7xrReOcBeSc+UDTlfOSYq9bXtgvJnSNrxX1/PkCQN0scLAhbWn5flS2YlW+NgNBVJnloxnq82UETw /09xIYKvfIfywdBThcxiHfa9UlTYE4idK1ttEaa+LFK67TaqxDYNmns4J7x2fS4bHjRBRlAu+6hYIf KFRn5Rv7p4K1p5agi+ty/HBQtTFma3 X-Developer-Key: i=jack@suse.cz; a=openpgp; fpr=93C6099A142276A28BBE35D815BC833443038D8C Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Add detection of in-ICB files to udf_bmap() and return error in that case. This will allow us o use single address_space_operations in UDF. Signed-off-by: Jan Kara Reviewed-by: Christoph Hellwig --- fs/udf/inode.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 91758c8d77e5..703db2a4516b 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -296,6 +296,10 @@ ssize_t udf_direct_IO(struct kiocb *iocb, struct iov_iter *iter) static sector_t udf_bmap(struct address_space *mapping, sector_t block) { + struct udf_inode_info *iinfo = UDF_I(mapping->host); + + if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) + return -EINVAL; return generic_block_bmap(mapping, block, udf_get_block); } From patchwork Tue Jan 24 12:06:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kara X-Patchwork-Id: 13113885 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 871E8C54EAA for ; Tue, 24 Jan 2023 12:06:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233425AbjAXMGo (ORCPT ); Tue, 24 Jan 2023 07:06:44 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51010 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233348AbjAXMGf (ORCPT ); Tue, 24 Jan 2023 07:06:35 -0500 Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2001:67c:2178:6::1c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 50E6E42DD9 for ; Tue, 24 Jan 2023 04:06:33 -0800 (PST) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id E5B6F21874; Tue, 24 Jan 2023 12:06:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1674561991; h=from:from:reply-to: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=CDDrDcw26phQCdbPzUDXNsvKIR+e0QO5VKmO8bijbQw=; b=ybedig2WH1ktgUowIbPoNoj3LDuH/QjNWXyhNBbEYVkgm6xCPgGPkTLBJuzc1jhVE7ooBY N0za2b+VLH8iRpyRN6FpxdX9JwZX6koQtlaQjkOPWg1ouJhMlG6p6PGf1Hh22XVzuLY2sJ suWtW0mT0Mw54Z7qyY1gATKsaCOuUPY= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1674561991; h=from:from:reply-to: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=CDDrDcw26phQCdbPzUDXNsvKIR+e0QO5VKmO8bijbQw=; b=7y5jNwYyNhwgY/248rpl/yasGUgl7brkwTVbt6IWV90BPMl54d0pLHoyK9wUJt6pdgc5HH 6M41LmLWKftR/iDg== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id D975F139FF; Tue, 24 Jan 2023 12:06:31 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id 4yMWNcfJz2MNMQAAMHmgww (envelope-from ); Tue, 24 Jan 2023 12:06:31 +0000 Received: by quack3.suse.cz (Postfix, from userid 1000) id 45BABA06D1; Tue, 24 Jan 2023 13:06:31 +0100 (CET) From: Jan Kara To: Cc: Christoph Hellwig , Jan Kara Subject: [PATCH 07/10] udf: Switch to single address_space_operations Date: Tue, 24 Jan 2023 13:06:18 +0100 Message-Id: <20230124120628.24449-7-jack@suse.cz> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20230124120221.31585-1-jack@suse.cz> References: <20230124120221.31585-1-jack@suse.cz> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3845; i=jack@suse.cz; h=from:subject; bh=4mgp3QLb6HmP1b/8ThPLU90Zl6h/3PYHYO/pxF75v/A=; b=owEBbQGS/pANAwAIAZydqgc/ZEDZAcsmYgBjz8m53DO2nlWf892szXBo+L9iUxddRdI9ygL5ktsJ l7GyStOJATMEAAEIAB0WIQSrWdEr1p4yirVVKBycnaoHP2RA2QUCY8/JuQAKCRCcnaoHP2RA2VesB/ 9gp2+6luaF0rQHNz+SfJWHGkZIKB3yvU83sUhwAA1L1GvE/F5TtUkUbuP4PGaq0UM5G0AV7giVbpQY A0TUMJfO7IhaPKf/2CpVUOWQLXZavQUWBnxAy7Ph7SAd6Zj8MKpCMrMtNla+LmoqSxJ4+UgZViTZ4I YSZCvMPA7DeCUrhKDux3KENADikCI84iqkNWXRUGo2jFPmIR/dKhsBY23K6tFC8ULS3ZGVaaZwXToS 6kJxnJR2gED+Zn64KQBnce3UvlDr2zOhqidR+YWr1fovBAYfZevNRehHape9iVSraNB7VxbbUqHLpW 8PP+T4okCZjDh7d02zspo1UrV0mI24 X-Developer-Key: i=jack@suse.cz; a=openpgp; fpr=93C6099A142276A28BBE35D815BC833443038D8C Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Now that udf_aops and udf_adiniicb_aops are functionally identical, just drop udf_adiniicb_aops. Signed-off-by: Jan Kara Reviewed-by: Christoph Hellwig --- fs/udf/file.c | 10 ---------- fs/udf/inode.c | 8 +------- fs/udf/namei.c | 10 ++-------- fs/udf/udfdecl.h | 1 - 4 files changed, 3 insertions(+), 26 deletions(-) diff --git a/fs/udf/file.c b/fs/udf/file.c index 8a37cd593883..84e0b241940d 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c @@ -57,16 +57,6 @@ void udf_adinicb_readpage(struct page *page) kunmap_atomic(kaddr); } -const struct address_space_operations udf_adinicb_aops = { - .dirty_folio = block_dirty_folio, - .invalidate_folio = block_invalidate_folio, - .read_folio = udf_read_folio, - .writepages = udf_writepages, - .write_begin = udf_write_begin, - .write_end = udf_write_end, - .direct_IO = udf_direct_IO, -}; - static vm_fault_t udf_page_mkwrite(struct vm_fault *vmf) { struct vm_area_struct *vma = vmf->vma; diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 703db2a4516b..5b0be8f281f0 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -364,8 +364,6 @@ int udf_expand_file_adinicb(struct inode *inode) iinfo->i_alloc_type = ICBTAG_FLAG_AD_SHORT; else iinfo->i_alloc_type = ICBTAG_FLAG_AD_LONG; - /* from now on we have normal address_space methods */ - inode->i_data.a_ops = &udf_aops; set_page_dirty(page); unlock_page(page); up_write(&iinfo->i_data_sem); @@ -379,7 +377,6 @@ int udf_expand_file_adinicb(struct inode *inode) kunmap_atomic(kaddr); unlock_page(page); iinfo->i_alloc_type = ICBTAG_FLAG_AD_IN_ICB; - inode->i_data.a_ops = &udf_adinicb_aops; iinfo->i_lenAlloc = inode->i_size; up_write(&iinfo->i_data_sem); } @@ -1566,10 +1563,7 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode) case ICBTAG_FILE_TYPE_REGULAR: case ICBTAG_FILE_TYPE_UNDEF: case ICBTAG_FILE_TYPE_VAT20: - if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) - inode->i_data.a_ops = &udf_adinicb_aops; - else - inode->i_data.a_ops = &udf_aops; + inode->i_data.a_ops = &udf_aops; inode->i_op = &udf_file_inode_operations; inode->i_fop = &udf_file_operations; inode->i_mode |= S_IFREG; diff --git a/fs/udf/namei.c b/fs/udf/namei.c index 1b0f4c600b63..c043584463d2 100644 --- a/fs/udf/namei.c +++ b/fs/udf/namei.c @@ -373,10 +373,7 @@ static int udf_create(struct user_namespace *mnt_userns, struct inode *dir, if (IS_ERR(inode)) return PTR_ERR(inode); - if (UDF_I(inode)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) - inode->i_data.a_ops = &udf_adinicb_aops; - else - inode->i_data.a_ops = &udf_aops; + inode->i_data.a_ops = &udf_aops; inode->i_op = &udf_file_inode_operations; inode->i_fop = &udf_file_operations; mark_inode_dirty(inode); @@ -392,10 +389,7 @@ static int udf_tmpfile(struct user_namespace *mnt_userns, struct inode *dir, if (IS_ERR(inode)) return PTR_ERR(inode); - if (UDF_I(inode)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) - inode->i_data.a_ops = &udf_adinicb_aops; - else - inode->i_data.a_ops = &udf_aops; + inode->i_data.a_ops = &udf_aops; inode->i_op = &udf_file_inode_operations; inode->i_fop = &udf_file_operations; mark_inode_dirty(inode); diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h index 304c2ec81589..d8c0de3b224e 100644 --- a/fs/udf/udfdecl.h +++ b/fs/udf/udfdecl.h @@ -80,7 +80,6 @@ extern const struct inode_operations udf_file_inode_operations; extern const struct file_operations udf_file_operations; extern const struct inode_operations udf_symlink_inode_operations; extern const struct address_space_operations udf_aops; -extern const struct address_space_operations udf_adinicb_aops; extern const struct address_space_operations udf_symlink_aops; struct udf_fileident_iter { From patchwork Tue Jan 24 12:06:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kara X-Patchwork-Id: 13113883 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 70F1CC38142 for ; Tue, 24 Jan 2023 12:06:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233386AbjAXMGm (ORCPT ); Tue, 24 Jan 2023 07:06:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51006 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233331AbjAXMGe (ORCPT ); Tue, 24 Jan 2023 07:06:34 -0500 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 43E8A42BD5 for ; Tue, 24 Jan 2023 04:06:33 -0800 (PST) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id EBDF41FDAB; Tue, 24 Jan 2023 12:06:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1674561991; h=from:from:reply-to: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=7fQiALYYxtoAS4I+mwqhI7NOvIPGNdFLZ3aDQhtCMGg=; b=BXwbMXmpPLVKBgjezqlRxETM8LGxkdl57KBcqIhRBlFlAINw0Il0uPmNWF1rpfGeDW1+pJ SrJ4CRc1LiJAARTqObGEtFNDntGFcFjCNBgaRpLgSbLmxmZ1jeIeSM5V3XifMo+Bm5iiQ6 P5wVnKKBmlBNFv00INd6fq3YMh/+jow= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1674561991; h=from:from:reply-to: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=7fQiALYYxtoAS4I+mwqhI7NOvIPGNdFLZ3aDQhtCMGg=; b=s7v+Ws7Vjzxp0Kmpv74R6Dw2lviokY4UC53+X+zVwm3CMwoXY1xhnR9+02M0jJhih6lNVB qlOqf2MhNqO9JDAg== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id DCEE813A04; Tue, 24 Jan 2023 12:06:31 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id TKjnNcfJz2MPMQAAMHmgww (envelope-from ); Tue, 24 Jan 2023 12:06:31 +0000 Received: by quack3.suse.cz (Postfix, from userid 1000) id 4C021A06D3; Tue, 24 Jan 2023 13:06:31 +0100 (CET) From: Jan Kara To: Cc: Christoph Hellwig , Jan Kara Subject: [PATCH 08/10] udf: Mark aops implementation static Date: Tue, 24 Jan 2023 13:06:19 +0100 Message-Id: <20230124120628.24449-8-jack@suse.cz> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20230124120221.31585-1-jack@suse.cz> References: <20230124120221.31585-1-jack@suse.cz> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3660; i=jack@suse.cz; h=from:subject; bh=VthrwZ5OSXAIOttzrwTcqnd/sxobYc4WDYwx6I6QdSM=; b=owEBbQGS/pANAwAIAZydqgc/ZEDZAcsmYgBjz8m6fcL3kef5SVhn0wm/eLeeity9WrE8jX8+68yf nklqY9eJATMEAAEIAB0WIQSrWdEr1p4yirVVKBycnaoHP2RA2QUCY8/JugAKCRCcnaoHP2RA2Us+B/ 9nE5MJuMLNQs+QA4o3uwOg9y+dUlDesHYMMGgwDMWaivHqaC3tfazKpbIjUtbXEVte6rpRy1OQ3SfU 60Oqb2jymw/q839+aTe2wfHBWWjcbbNl2QTAOVX7D+gM8VKBHQA2Cce9NkHo4/CCsY1Et2W7SWiPxX z5TkUYlwC5uGYOL3yjjOXDNqNJh16oF+Be7iZqk2lAc9KCvFk5wFpv5waEqvIQofXvQgxpySRfahgf MjSH7LOHXiUiH3vWl3TlNEULurKME1Y4v3SQNWFXjgmhX6Vc0jzTiNjMZ1ey2XfEDaKpFDjpT+vSn7 8vbLsVbYJZ++5PBqlADXQkjXVlt+d7 X-Developer-Key: i=jack@suse.cz; a=openpgp; fpr=93C6099A142276A28BBE35D815BC833443038D8C Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Mark functions implementing aops static since they are not needed outside of inode.c anymore. Signed-off-by: Jan Kara Reviewed-by: Christoph Hellwig --- fs/udf/inode.c | 19 ++++++++++--------- fs/udf/udfdecl.h | 9 --------- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 5b0be8f281f0..af069a05919c 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -204,7 +204,8 @@ static int udf_adinicb_writepage(struct page *page, return 0; } -int udf_writepages(struct address_space *mapping, struct writeback_control *wbc) +static int udf_writepages(struct address_space *mapping, + struct writeback_control *wbc) { struct inode *inode = mapping->host; struct udf_inode_info *iinfo = UDF_I(inode); @@ -214,7 +215,7 @@ int udf_writepages(struct address_space *mapping, struct writeback_control *wbc) return write_cache_pages(mapping, wbc, udf_adinicb_writepage, NULL); } -int udf_read_folio(struct file *file, struct folio *folio) +static int udf_read_folio(struct file *file, struct folio *folio) { struct udf_inode_info *iinfo = UDF_I(file_inode(file)); @@ -231,9 +232,9 @@ static void udf_readahead(struct readahead_control *rac) mpage_readahead(rac, udf_get_block); } -int udf_write_begin(struct file *file, struct address_space *mapping, - loff_t pos, unsigned len, - struct page **pagep, void **fsdata) +static int udf_write_begin(struct file *file, struct address_space *mapping, + loff_t pos, unsigned len, + struct page **pagep, void **fsdata) { struct udf_inode_info *iinfo = UDF_I(file_inode(file)); struct page *page; @@ -257,9 +258,9 @@ int udf_write_begin(struct file *file, struct address_space *mapping, return 0; } -int udf_write_end(struct file *file, struct address_space *mapping, - loff_t pos, unsigned len, unsigned copied, - struct page *page, void *fsdata) +static int udf_write_end(struct file *file, struct address_space *mapping, + loff_t pos, unsigned len, unsigned copied, + struct page *page, void *fsdata) { struct inode *inode = file_inode(file); loff_t last_pos; @@ -277,7 +278,7 @@ int udf_write_end(struct file *file, struct address_space *mapping, return copied; } -ssize_t udf_direct_IO(struct kiocb *iocb, struct iov_iter *iter) +static ssize_t udf_direct_IO(struct kiocb *iocb, struct iov_iter *iter) { struct file *file = iocb->ki_filp; struct address_space *mapping = file->f_mapping; diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h index d8c0de3b224e..337daf97d5b4 100644 --- a/fs/udf/udfdecl.h +++ b/fs/udf/udfdecl.h @@ -158,15 +158,6 @@ extern struct buffer_head *udf_bread(struct inode *inode, udf_pblk_t block, extern int udf_setsize(struct inode *, loff_t); extern void udf_evict_inode(struct inode *); extern int udf_write_inode(struct inode *, struct writeback_control *wbc); -int udf_read_folio(struct file *file, struct folio *folio); -int udf_writepages(struct address_space *mapping, struct writeback_control *wbc); -int udf_write_begin(struct file *file, struct address_space *mapping, - loff_t pos, unsigned len, - struct page **pagep, void **fsdata); -int udf_write_end(struct file *file, struct address_space *mapping, - loff_t pos, unsigned len, unsigned copied, - struct page *page, void *fsdata); -ssize_t udf_direct_IO(struct kiocb *iocb, struct iov_iter *iter); extern int8_t inode_bmap(struct inode *, sector_t, struct extent_position *, struct kernel_lb_addr *, uint32_t *, sector_t *); int udf_get_block(struct inode *, sector_t, struct buffer_head *, int); From patchwork Tue Jan 24 12:06:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kara X-Patchwork-Id: 13113880 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1F3A7C38142 for ; Tue, 24 Jan 2023 12:06:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233373AbjAXMGi (ORCPT ); Tue, 24 Jan 2023 07:06:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51004 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233330AbjAXMGe (ORCPT ); Tue, 24 Jan 2023 07:06:34 -0500 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4483F42BFA for ; Tue, 24 Jan 2023 04:06:33 -0800 (PST) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 01FF51FDC3; Tue, 24 Jan 2023 12:06:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1674561992; h=from:from:reply-to: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=ara88Qb3ym1wwr9lS9t+NA7QgVpyzxdqZ5el5Ihlk9E=; b=Fr+ZyOiRsA57JCwwMd4PyEyS2i6YSg7HOmmFX1NYan7In8zt6I+aY8WGgA8RYsexTS2PWN MaQ9vqi+fK+dQ5pYte6STS115dr4Bqb5aEecDIjfvDa8gucrwjfqQ/8LW+uWnw91E/w7v5 tbPNvglk9w7n949GAvEIihAvEQSOzxA= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1674561992; h=from:from:reply-to: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=ara88Qb3ym1wwr9lS9t+NA7QgVpyzxdqZ5el5Ihlk9E=; b=Dj+uuTaQqSsMISGHQdA76uTWd+hE9y4gr6DBdrkEaeZYWvxtgT7NpdhwFJpKeouW9dJcMb DTT1x0usObwU02DQ== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id E76DD139FB; Tue, 24 Jan 2023 12:06:31 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id VFd5OMfJz2MRMQAAMHmgww (envelope-from ); Tue, 24 Jan 2023 12:06:31 +0000 Received: by quack3.suse.cz (Postfix, from userid 1000) id 524F3A06D4; Tue, 24 Jan 2023 13:06:31 +0100 (CET) From: Jan Kara To: Cc: Christoph Hellwig , Jan Kara Subject: [PATCH 09/10] udf: Move udf_adinicb_readpage() to inode.c Date: Tue, 24 Jan 2023 13:06:20 +0100 Message-Id: <20230124120628.24449-9-jack@suse.cz> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20230124120221.31585-1-jack@suse.cz> References: <20230124120221.31585-1-jack@suse.cz> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2617; i=jack@suse.cz; h=from:subject; bh=Lptni6NBCCnC+8UssvGb4sOKDFLLkq3D2y+B0kOllHU=; b=owEBbQGS/pANAwAIAZydqgc/ZEDZAcsmYgBjz8m7SWTA/b8kiVk4ZO48Lm79PaLDJ/r1b+DpK+eV 0ZNHHK6JATMEAAEIAB0WIQSrWdEr1p4yirVVKBycnaoHP2RA2QUCY8/JuwAKCRCcnaoHP2RA2caSCA C0MRB0NUCkckXXd/9UZGhCEjLxaPBpab0WbtciDp4F0Lzf/Jlmi12qFeY9B5vrhrO1lVH51v8JrnXA CHZ1qV52X2Dcqi1pJzDPiWUll+ndbWU+fCIAwqF+1siP5DqKasZlfNU8Q1KapBydSpMDtpftJ8L58k yaJ0wRaVUYIPCwgeOY9hMYg8mY7UvW0WddLB+BLJEt1Ql9W77JctQzF47L4b0FYbeQFJHTZyH1jvKM gOON6yVLxORpeaNCgMWvMevACz/RnM0jddEIXF8dfhJFIqjAmIi/vzYq1jNTAy5fN4CofD3I/m5D2k 69biOXUinZS0ZtxJnSVCZ6fTdknLMb X-Developer-Key: i=jack@suse.cz; a=openpgp; fpr=93C6099A142276A28BBE35D815BC833443038D8C Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org udf_adinicb_readpage() is only called from aops functions, move it to the same file as its callers and also drop the stale comment - invalidate_lock is protecting us against races with truncate. Signed-off-by: Jan Kara Reviewed-by: Christoph Hellwig --- fs/udf/file.c | 19 ------------------- fs/udf/inode.c | 15 +++++++++++++++ fs/udf/udfdecl.h | 1 - 3 files changed, 15 insertions(+), 20 deletions(-) diff --git a/fs/udf/file.c b/fs/udf/file.c index 84e0b241940d..26592577b7da 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c @@ -38,25 +38,6 @@ #include "udf_i.h" #include "udf_sb.h" -void udf_adinicb_readpage(struct page *page) -{ - struct inode *inode = page->mapping->host; - char *kaddr; - struct udf_inode_info *iinfo = UDF_I(inode); - loff_t isize = i_size_read(inode); - - /* - * We have to be careful here as truncate can change i_size under us. - * So just sample it once and use the same value everywhere. - */ - kaddr = kmap_atomic(page); - memcpy(kaddr, iinfo->i_data + iinfo->i_lenEAttr, isize); - memset(kaddr + isize, 0, PAGE_SIZE - isize); - flush_dcache_page(page); - SetPageUptodate(page); - kunmap_atomic(kaddr); -} - static vm_fault_t udf_page_mkwrite(struct vm_fault *vmf) { struct vm_area_struct *vma = vmf->vma; diff --git a/fs/udf/inode.c b/fs/udf/inode.c index af069a05919c..dcd3f1dac227 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -215,6 +215,21 @@ static int udf_writepages(struct address_space *mapping, return write_cache_pages(mapping, wbc, udf_adinicb_writepage, NULL); } +static void udf_adinicb_readpage(struct page *page) +{ + struct inode *inode = page->mapping->host; + char *kaddr; + struct udf_inode_info *iinfo = UDF_I(inode); + loff_t isize = i_size_read(inode); + + kaddr = kmap_atomic(page); + memcpy(kaddr, iinfo->i_data + iinfo->i_lenEAttr, isize); + memset(kaddr + isize, 0, PAGE_SIZE - isize); + flush_dcache_page(page); + SetPageUptodate(page); + kunmap_atomic(kaddr); +} + static int udf_read_folio(struct file *file, struct folio *folio) { struct udf_inode_info *iinfo = UDF_I(file_inode(file)); diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h index 337daf97d5b4..88692512a466 100644 --- a/fs/udf/udfdecl.h +++ b/fs/udf/udfdecl.h @@ -137,7 +137,6 @@ static inline unsigned int udf_dir_entry_len(struct fileIdentDesc *cfi) /* file.c */ extern long udf_ioctl(struct file *, unsigned int, unsigned long); -void udf_adinicb_readpage(struct page *page); /* inode.c */ extern struct inode *__udf_iget(struct super_block *, struct kernel_lb_addr *, From patchwork Tue Jan 24 12:06:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kara X-Patchwork-Id: 13113886 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D45DAC38142 for ; Tue, 24 Jan 2023 12:06:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233429AbjAXMGp (ORCPT ); Tue, 24 Jan 2023 07:06:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51008 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232763AbjAXMGg (ORCPT ); Tue, 24 Jan 2023 07:06:36 -0500 Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2001:67c:2178:6::1c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 639FE2330C for ; Tue, 24 Jan 2023 04:06:35 -0800 (PST) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 064F721875; Tue, 24 Jan 2023 12:06:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1674561992; h=from:from:reply-to: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=j+h/2r0MBY6/nWcqg4A6fS6cmUGg6a993gy6cT2d0wc=; b=cBc4ftfEvIUDLr/1Fkcj2CH8wexd+bZhEpsmlTAstsSosIuAtmKIGrjQO/i5PJgYxujbnZ H9x2JQjAb35mSz5V+PmZ7A6FrKbnVRs/4kqGuZ9LzjSkvpk37AM4QE69mZ5jJyKcc6+5US +72PYV0WRGWcybFrbJE3dM1HASXXCoM= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1674561992; h=from:from:reply-to: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=j+h/2r0MBY6/nWcqg4A6fS6cmUGg6a993gy6cT2d0wc=; b=6nTjKBxq/Se9heEHttJaxEY9/f1JITZcxrD5w9JC7pG4z6CmV7Xk/4Ig30KSu+CWA1pB42 9fmW/vXsOc1jsbAg== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id EDA09139FF; Tue, 24 Jan 2023 12:06:31 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id pq7/OcfJz2MSMQAAMHmgww (envelope-from ); Tue, 24 Jan 2023 12:06:31 +0000 Received: by quack3.suse.cz (Postfix, from userid 1000) id 588C0A06D5; Tue, 24 Jan 2023 13:06:31 +0100 (CET) From: Jan Kara To: Cc: Christoph Hellwig , Jan Kara Subject: [PATCH 10/10] udf: Switch udf_adinicb_readpage() to kmap_local_page() Date: Tue, 24 Jan 2023 13:06:21 +0100 Message-Id: <20230124120628.24449-10-jack@suse.cz> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20230124120221.31585-1-jack@suse.cz> References: <20230124120221.31585-1-jack@suse.cz> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=865; i=jack@suse.cz; h=from:subject; bh=pDb9KRYtDEV08u1/RrB4YmM3BhqEkGDJ3enLU3mrb6w=; b=owEBbQGS/pANAwAIAZydqgc/ZEDZAcsmYgBjz8m85ajbUgngXWNvxIdI270EfDosY1P4zi/39DtM mwEAqFmJATMEAAEIAB0WIQSrWdEr1p4yirVVKBycnaoHP2RA2QUCY8/JvAAKCRCcnaoHP2RA2WlwCA DNf4pzzwU28gcHVf+fEWZ19asS5EBsJ3hCPqXYdpEU40Kf+eRzGvvko+TYLmhI/apT1FD71y3sRSkh sM1NDDH1YjRVjbEBIDF2wFz4uloIC/3C8hEn1BhCn5nU7PNgN9SGDn80ENBy764ZGxBcD2KOZbbOW7 YPqXN4JaCEMYctPJ7KJk1Cc7zYa5eXjrrWwS83NnrgZyoOBLWa4GHzExN/JcHgFl4R1vTJ6fJDQaXF /H5oDunabW5lyp56yXA4GIqeCGZvF/NYy+7qhKdey8eGSriZ9LHdFnmJR4dqQ7t8lEMTKa0MECwVZJ zFvJaYEgDZFsOxZDiTY6XIlfru9j+8 X-Developer-Key: i=jack@suse.cz; a=openpgp; fpr=93C6099A142276A28BBE35D815BC833443038D8C Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Instead of using kmap_atomic() use kmap_local_page() in udf_adinicb_readpage(). Signed-off-by: Jan Kara Reviewed-by: Christoph Hellwig --- fs/udf/inode.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/udf/inode.c b/fs/udf/inode.c index dcd3f1dac227..5ae29f89869b 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -222,12 +222,12 @@ static void udf_adinicb_readpage(struct page *page) struct udf_inode_info *iinfo = UDF_I(inode); loff_t isize = i_size_read(inode); - kaddr = kmap_atomic(page); + kaddr = kmap_local_page(page); memcpy(kaddr, iinfo->i_data + iinfo->i_lenEAttr, isize); memset(kaddr + isize, 0, PAGE_SIZE - isize); flush_dcache_page(page); SetPageUptodate(page); - kunmap_atomic(kaddr); + kunmap_local(kaddr); } static int udf_read_folio(struct file *file, struct folio *folio)