All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kara <jack@suse.cz>
To: <linux-fsdevel@vger.kernel.org>
Cc: Christoph Hellwig <hch@infradead.org>, Jan Kara <jack@suse.cz>
Subject: [PATCH 01/10] udf: Unify .read_folio for normal and in-ICB files
Date: Tue, 24 Jan 2023 13:06:12 +0100	[thread overview]
Message-ID: <20230124120628.24449-1-jack@suse.cz> (raw)
In-Reply-To: <20230124120221.31585-1-jack@suse.cz>

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 <jack@suse.cz>
---
 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);
-- 
2.35.3


  reply	other threads:[~2023-01-24 12:06 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-24 12:06 [PATCH 0/10] udf: Unify aops Jan Kara
2023-01-24 12:06 ` Jan Kara [this message]
2023-01-24 13:22   ` [PATCH 01/10] udf: Unify .read_folio for normal and in-ICB files Christoph Hellwig
2023-01-24 12:06 ` [PATCH 02/10] udf: Convert in-ICB files to use udf_writepages() Jan Kara
2023-01-24 13:25   ` Christoph Hellwig
2023-01-25  9:28     ` Jan Kara
2023-01-24 12:06 ` [PATCH 03/10] udf: Convert in-ICB files to use udf_direct_IO() Jan Kara
2023-01-24 13:25   ` Christoph Hellwig
2023-01-24 12:06 ` [PATCH 04/10] udf: Convert in-ICB files to use udf_write_begin() Jan Kara
2023-01-24 13:26   ` Christoph Hellwig
2023-01-24 12:06 ` [PATCH 05/10] udf: Convert all file types to use udf_write_end() Jan Kara
2023-01-24 13:27   ` Christoph Hellwig
2023-01-24 12:06 ` [PATCH 06/10] udf: Add handling of in-ICB files to udf_bmap() Jan Kara
2023-01-24 13:27   ` Christoph Hellwig
2023-01-24 12:06 ` [PATCH 07/10] udf: Switch to single address_space_operations Jan Kara
2023-01-24 13:28   ` Christoph Hellwig
2023-01-24 12:06 ` [PATCH 08/10] udf: Mark aops implementation static Jan Kara
2023-01-24 13:28   ` Christoph Hellwig
2023-01-24 12:06 ` [PATCH 09/10] udf: Move udf_adinicb_readpage() to inode.c Jan Kara
2023-01-24 13:28   ` Christoph Hellwig
2023-01-24 12:06 ` [PATCH 10/10] udf: Switch udf_adinicb_readpage() to kmap_local_page() Jan Kara
2023-01-24 13:29   ` Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230124120628.24449-1-jack@suse.cz \
    --to=jack@suse.cz \
    --cc=hch@infradead.org \
    --cc=linux-fsdevel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.