udf: Convert udf_write_begin() to use a folio
[linux-2.6-block.git] / fs / udf / inode.c
index 2f831a3a91afe38351c5a16bf2e5138fda9e19d1..5146b9d7aba36732e9474e3792fd5a484d9b3cf7 100644 (file)
@@ -254,7 +254,7 @@ static int udf_write_begin(struct file *file, struct address_space *mapping,
                           struct page **pagep, void **fsdata)
 {
        struct udf_inode_info *iinfo = UDF_I(file_inode(file));
-       struct page *page;
+       struct folio *folio;
        int ret;
 
        if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB) {
@@ -266,12 +266,13 @@ static int udf_write_begin(struct file *file, struct address_space *mapping,
        }
        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);
+       folio = __filemap_get_folio(mapping, 0, FGP_WRITEBEGIN,
+                       mapping_gfp_mask(mapping));
+       if (IS_ERR(folio))
+               return PTR_ERR(folio);
+       *pagep = &folio->page;
+       if (!folio_test_uptodate(folio))
+               udf_adinicb_readpage(&folio->page);
        return 0;
 }