]> git.proxmox.com Git - mirror_ubuntu-kernels.git/blobdiff - fs/cifs/file.c
Merge tag '6.2-rc-smb3-client-fixes-part1' of git://git.samba.org/sfrench/cifs-2.6
[mirror_ubuntu-kernels.git] / fs / cifs / file.c
index 87b56b1ae117708442925760320db833cb19f548..22dfc1f8b4f12fb10801bd91c3c432d8559f18e9 100644 (file)
@@ -2646,6 +2646,21 @@ wdata_send_pages(struct cifs_writedata *wdata, unsigned int nr_pages,
        return rc;
 }
 
+static int
+cifs_writepage_locked(struct page *page, struct writeback_control *wbc);
+
+static int cifs_write_one_page(struct page *page, struct writeback_control *wbc,
+               void *data)
+{
+       struct address_space *mapping = data;
+       int ret;
+
+       ret = cifs_writepage_locked(page, wbc);
+       unlock_page(page);
+       mapping_set_error(mapping, ret);
+       return ret;
+}
+
 static int cifs_writepages(struct address_space *mapping,
                           struct writeback_control *wbc)
 {
@@ -2662,10 +2677,11 @@ static int cifs_writepages(struct address_space *mapping,
 
        /*
         * If wsize is smaller than the page cache size, default to writing
-        * one page at a time via cifs_writepage
+        * one page at a time.
         */
        if (cifs_sb->ctx->wsize < PAGE_SIZE)
-               return generic_writepages(mapping, wbc);
+               return write_cache_pages(mapping, wbc, cifs_write_one_page,
+                               mapping);
 
        xid = get_xid();
        if (wbc->range_cyclic) {
@@ -2852,13 +2868,6 @@ retry_write:
        return rc;
 }
 
-static int cifs_writepage(struct page *page, struct writeback_control *wbc)
-{
-       int rc = cifs_writepage_locked(page, wbc);
-       unlock_page(page);
-       return rc;
-}
-
 static int cifs_write_end(struct file *file, struct address_space *mapping,
                        loff_t pos, unsigned len, unsigned copied,
                        struct page *page, void *fsdata)
@@ -5231,7 +5240,6 @@ static bool cifs_dirty_folio(struct address_space *mapping, struct folio *folio)
 const struct address_space_operations cifs_addr_ops = {
        .read_folio = cifs_read_folio,
        .readahead = cifs_readahead,
-       .writepage = cifs_writepage,
        .writepages = cifs_writepages,
        .write_begin = cifs_write_begin,
        .write_end = cifs_write_end,
@@ -5240,10 +5248,10 @@ const struct address_space_operations cifs_addr_ops = {
        .direct_IO = cifs_direct_io,
        .invalidate_folio = cifs_invalidate_folio,
        .launder_folio = cifs_launder_folio,
+       .migrate_folio = filemap_migrate_folio,
        /*
-        * TODO: investigate and if useful we could add an cifs_migratePage
-        * helper (under an CONFIG_MIGRATION) in the future, and also
-        * investigate and add an is_dirty_writeback helper if needed
+        * TODO: investigate and if useful we could add an is_dirty_writeback
+        * helper if needed
         */
        .swap_activate = cifs_swap_activate,
        .swap_deactivate = cifs_swap_deactivate,
@@ -5256,7 +5264,6 @@ const struct address_space_operations cifs_addr_ops = {
  */
 const struct address_space_operations cifs_addr_ops_smallbuf = {
        .read_folio = cifs_read_folio,
-       .writepage = cifs_writepage,
        .writepages = cifs_writepages,
        .write_begin = cifs_write_begin,
        .write_end = cifs_write_end,
@@ -5264,4 +5271,5 @@ const struct address_space_operations cifs_addr_ops_smallbuf = {
        .release_folio = cifs_release_folio,
        .invalidate_folio = cifs_invalidate_folio,
        .launder_folio = cifs_launder_folio,
+       .migrate_folio = filemap_migrate_folio,
 };