Merge tag 'ceph-for-5.20-rc1' of https://github.com/ceph/ceph-client
[linux-2.6-block.git] / fs / ceph / addr.c
index 2c3a9b5b4b745f0a0adfad3e319d839bd6f6a2b2..dcf701b05cc1c0e9b4a633bc2b3eb74f7148a32a 100644 (file)
@@ -122,7 +122,7 @@ static bool ceph_dirty_folio(struct address_space *mapping, struct folio *folio)
         * Reference snap context in folio->private.  Also set
         * PagePrivate so that we get invalidate_folio callback.
         */
-       VM_BUG_ON_FOLIO(folio_test_private(folio), folio);
+       VM_WARN_ON_FOLIO(folio->private, folio);
        folio_attach_private(folio, snapc);
 
        return ceph_fscache_dirty_folio(mapping, folio);
@@ -237,7 +237,7 @@ static void finish_netfs_read(struct ceph_osd_request *req)
        if (err >= 0 && err < subreq->len)
                __set_bit(NETFS_SREQ_CLEAR_TAIL, &subreq->flags);
 
-       netfs_subreq_terminated(subreq, err, true);
+       netfs_subreq_terminated(subreq, err, false);
 
        num_pages = calc_pages_for(osd_data->alignment, osd_data->length);
        ceph_put_page_vector(osd_data->pages, num_pages, false);
@@ -313,8 +313,7 @@ static void ceph_netfs_issue_read(struct netfs_io_subrequest *subreq)
        int err = 0;
        u64 len = subreq->len;
 
-       if (ci->i_inline_version != CEPH_INLINE_NONE &&
-           ceph_netfs_issue_op_inline(subreq))
+       if (ceph_has_inline_data(ci) && ceph_netfs_issue_op_inline(subreq))
                return;
 
        req = ceph_osdc_new_request(&fsc->client->osdc, &ci->i_layout, vino, subreq->start, &len,
@@ -338,6 +337,7 @@ static void ceph_netfs_issue_read(struct netfs_io_subrequest *subreq)
        /* should always give us a page-aligned read */
        WARN_ON_ONCE(page_off);
        len = err;
+       err = 0;
 
        osd_req_op_extent_osd_data_pages(req, 0, pages, len, 0, false, false);
        req->r_callback = finish_netfs_read;
@@ -345,9 +345,7 @@ static void ceph_netfs_issue_read(struct netfs_io_subrequest *subreq)
        req->r_inode = inode;
        ihold(inode);
 
-       err = ceph_osdc_start_request(req->r_osdc, req, false);
-       if (err)
-               iput(inode);
+       ceph_osdc_start_request(req->r_osdc, req);
 out:
        ceph_osdc_put_request(req);
        if (err)
@@ -621,9 +619,8 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc)
        dout("writepage %llu~%llu (%llu bytes)\n", page_off, len, len);
 
        req->r_mtime = inode->i_mtime;
-       err = ceph_osdc_start_request(osdc, req, true);
-       if (!err)
-               err = ceph_osdc_wait_request(osdc, req);
+       ceph_osdc_start_request(osdc, req);
+       err = ceph_osdc_wait_request(osdc, req);
 
        ceph_update_write_metrics(&fsc->mdsc->metric, req->r_start_latency,
                                  req->r_end_latency, len, err);
@@ -1151,8 +1148,7 @@ new_request:
                }
 
                req->r_mtime = inode->i_mtime;
-               rc = ceph_osdc_start_request(&fsc->client->osdc, req, true);
-               BUG_ON(rc);
+               ceph_osdc_start_request(&fsc->client->osdc, req);
                req = NULL;
 
                wbc->nr_to_write -= i;
@@ -1327,16 +1323,13 @@ static int ceph_write_begin(struct file *file, struct address_space *mapping,
        int r;
 
        r = netfs_write_begin(&ci->netfs, file, inode->i_mapping, pos, len, &folio, NULL);
-       if (r == 0)
-               folio_wait_fscache(folio);
-       if (r < 0) {
-               if (folio)
-                       folio_put(folio);
-       } else {
-               WARN_ON_ONCE(!folio_test_locked(folio));
-               *pagep = &folio->page;
-       }
-       return r;
+       if (r < 0)
+               return r;
+
+       folio_wait_fscache(folio);
+       WARN_ON_ONCE(!folio_test_locked(folio));
+       *pagep = &folio->page;
+       return 0;
 }
 
 /*
@@ -1439,7 +1432,7 @@ static vm_fault_t ceph_filemap_fault(struct vm_fault *vmf)
             inode, off, ceph_cap_string(got));
 
        if ((got & (CEPH_CAP_FILE_CACHE | CEPH_CAP_FILE_LAZYIO)) ||
-           ci->i_inline_version == CEPH_INLINE_NONE) {
+           !ceph_has_inline_data(ci)) {
                CEPH_DEFINE_RW_CONTEXT(rw_ctx, got);
                ceph_add_rw_context(fi, &rw_ctx);
                ret = filemap_fault(vmf);
@@ -1696,9 +1689,8 @@ int ceph_uninline_data(struct file *file)
        }
 
        req->r_mtime = inode->i_mtime;
-       err = ceph_osdc_start_request(&fsc->client->osdc, req, false);
-       if (!err)
-               err = ceph_osdc_wait_request(&fsc->client->osdc, req);
+       ceph_osdc_start_request(&fsc->client->osdc, req);
+       err = ceph_osdc_wait_request(&fsc->client->osdc, req);
        ceph_osdc_put_request(req);
        if (err < 0)
                goto out_unlock;
@@ -1739,9 +1731,8 @@ int ceph_uninline_data(struct file *file)
        }
 
        req->r_mtime = inode->i_mtime;
-       err = ceph_osdc_start_request(&fsc->client->osdc, req, false);
-       if (!err)
-               err = ceph_osdc_wait_request(&fsc->client->osdc, req);
+       ceph_osdc_start_request(&fsc->client->osdc, req);
+       err = ceph_osdc_wait_request(&fsc->client->osdc, req);
 
        ceph_update_write_metrics(&fsc->mdsc->metric, req->r_start_latency,
                                  req->r_end_latency, len, err);
@@ -1912,15 +1903,13 @@ static int __ceph_pool_perm_get(struct ceph_inode_info *ci,
 
        osd_req_op_raw_data_in_pages(rd_req, 0, pages, PAGE_SIZE,
                                     0, false, true);
-       err = ceph_osdc_start_request(&fsc->client->osdc, rd_req, false);
+       ceph_osdc_start_request(&fsc->client->osdc, rd_req);
 
        wr_req->r_mtime = ci->netfs.inode.i_mtime;
-       err2 = ceph_osdc_start_request(&fsc->client->osdc, wr_req, false);
+       ceph_osdc_start_request(&fsc->client->osdc, wr_req);
 
-       if (!err)
-               err = ceph_osdc_wait_request(&fsc->client->osdc, rd_req);
-       if (!err2)
-               err2 = ceph_osdc_wait_request(&fsc->client->osdc, wr_req);
+       err = ceph_osdc_wait_request(&fsc->client->osdc, rd_req);
+       err2 = ceph_osdc_wait_request(&fsc->client->osdc, wr_req);
 
        if (err >= 0 || err == -ENOENT)
                have |= POOL_READ;