OSDN Git Service

ceph: drop pinned_page parameter from ceph_get_caps
authorJeff Layton <jlayton@kernel.org>
Mon, 5 Apr 2021 16:19:35 +0000 (12:19 -0400)
committerIlya Dryomov <idryomov@gmail.com>
Tue, 27 Apr 2021 21:52:23 +0000 (23:52 +0200)
All of the existing callers that don't set this to NULL just drop the
page reference at some arbitrary point later in processing. There's no
point in keeping a page reference that we don't use, so just drop the
reference immediately after checking the Uptodate flag.

Signed-off-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/addr.c
fs/ceph/caps.c
fs/ceph/file.c
fs/ceph/super.h

index aa612bc..ba0b919 100644 (file)
@@ -1357,7 +1357,6 @@ static vm_fault_t ceph_filemap_fault(struct vm_fault *vmf)
        struct inode *inode = file_inode(vma->vm_file);
        struct ceph_inode_info *ci = ceph_inode(inode);
        struct ceph_file_info *fi = vma->vm_file->private_data;
-       struct page *pinned_page = NULL;
        loff_t off = (loff_t)vmf->pgoff << PAGE_SHIFT;
        int want, got, err;
        sigset_t oldset;
@@ -1373,8 +1372,7 @@ static vm_fault_t ceph_filemap_fault(struct vm_fault *vmf)
                want = CEPH_CAP_FILE_CACHE;
 
        got = 0;
-       err = ceph_get_caps(vma->vm_file, CEPH_CAP_FILE_RD, want, -1,
-                           &got, &pinned_page);
+       err = ceph_get_caps(vma->vm_file, CEPH_CAP_FILE_RD, want, -1, &got);
        if (err < 0)
                goto out_restore;
 
@@ -1393,8 +1391,6 @@ static vm_fault_t ceph_filemap_fault(struct vm_fault *vmf)
        } else
                err = -EAGAIN;
 
-       if (pinned_page)
-               put_page(pinned_page);
        ceph_put_cap_refs(ci, got);
 
        if (err != -EAGAIN)
@@ -1488,8 +1484,7 @@ static vm_fault_t ceph_page_mkwrite(struct vm_fault *vmf)
                want = CEPH_CAP_FILE_BUFFER;
 
        got = 0;
-       err = ceph_get_caps(vma->vm_file, CEPH_CAP_FILE_WR, want, off + len,
-                           &got, NULL);
+       err = ceph_get_caps(vma->vm_file, CEPH_CAP_FILE_WR, want, off + len, &got);
        if (err < 0)
                goto out_free;
 
index e12e4cd..010621d 100644 (file)
@@ -2855,8 +2855,7 @@ int ceph_try_get_caps(struct inode *inode, int need, int want,
  * due to a small max_size, make sure we check_max_size (and possibly
  * ask the mds) so we don't get hung up indefinitely.
  */
-int ceph_get_caps(struct file *filp, int need, int want,
-                 loff_t endoff, int *got, struct page **pinned_page)
+int ceph_get_caps(struct file *filp, int need, int want, loff_t endoff, int *got)
 {
        struct ceph_file_info *fi = filp->private_data;
        struct inode *inode = file_inode(filp);
@@ -2954,11 +2953,11 @@ int ceph_get_caps(struct file *filp, int need, int want,
                        struct page *page =
                                find_get_page(inode->i_mapping, 0);
                        if (page) {
-                               if (PageUptodate(page)) {
-                                       *pinned_page = page;
-                                       break;
-                               }
+                               bool uptodate = PageUptodate(page);
+
                                put_page(page);
+                               if (uptodate)
+                                       break;
                        }
                        /*
                         * drop cap refs first because getattr while
index 31542ea..77fc037 100644 (file)
@@ -1513,7 +1513,6 @@ static ssize_t ceph_read_iter(struct kiocb *iocb, struct iov_iter *to)
        size_t len = iov_iter_count(to);
        struct inode *inode = file_inode(filp);
        struct ceph_inode_info *ci = ceph_inode(inode);
-       struct page *pinned_page = NULL;
        bool direct_lock = iocb->ki_flags & IOCB_DIRECT;
        ssize_t ret;
        int want, got = 0;
@@ -1532,8 +1531,7 @@ again:
                want = CEPH_CAP_FILE_CACHE | CEPH_CAP_FILE_LAZYIO;
        else
                want = CEPH_CAP_FILE_CACHE;
-       ret = ceph_get_caps(filp, CEPH_CAP_FILE_RD, want, -1,
-                           &got, &pinned_page);
+       ret = ceph_get_caps(filp, CEPH_CAP_FILE_RD, want, -1, &got);
        if (ret < 0) {
                if (iocb->ki_flags & IOCB_DIRECT)
                        ceph_end_io_direct(inode);
@@ -1574,10 +1572,6 @@ again:
 
        dout("aio_read %p %llx.%llx dropping cap refs on %s = %d\n",
             inode, ceph_vinop(inode), ceph_cap_string(got), (int)ret);
-       if (pinned_page) {
-               put_page(pinned_page);
-               pinned_page = NULL;
-       }
        ceph_put_cap_refs(ci, got);
 
        if (direct_lock)
@@ -1756,8 +1750,7 @@ retry_snap:
        else
                want = CEPH_CAP_FILE_BUFFER;
        got = 0;
-       err = ceph_get_caps(file, CEPH_CAP_FILE_WR, want, pos + count,
-                           &got, NULL);
+       err = ceph_get_caps(file, CEPH_CAP_FILE_WR, want, pos + count, &got);
        if (err < 0)
                goto out;
 
@@ -2086,7 +2079,7 @@ static long ceph_fallocate(struct file *file, int mode,
        else
                want = CEPH_CAP_FILE_BUFFER;
 
-       ret = ceph_get_caps(file, CEPH_CAP_FILE_WR, want, endoff, &got, NULL);
+       ret = ceph_get_caps(file, CEPH_CAP_FILE_WR, want, endoff, &got);
        if (ret < 0)
                goto unlock;
 
@@ -2124,7 +2117,7 @@ static int get_rd_wr_caps(struct file *src_filp, int *src_got,
 
 retry_caps:
        ret = ceph_get_caps(dst_filp, CEPH_CAP_FILE_WR, CEPH_CAP_FILE_BUFFER,
-                           dst_endoff, dst_got, NULL);
+                           dst_endoff, dst_got);
        if (ret < 0)
                return ret;
 
@@ -2146,7 +2139,7 @@ retry_caps:
                        return ret;
                }
                ret = ceph_get_caps(src_filp, CEPH_CAP_FILE_RD,
-                                   CEPH_CAP_FILE_SHARED, -1, src_got, NULL);
+                                   CEPH_CAP_FILE_SHARED, -1, src_got);
                if (ret < 0)
                        return ret;
                /*... drop src_ci caps too, and retry */
index 07a3fb5..68dd6a8 100644 (file)
@@ -1156,7 +1156,7 @@ extern int ceph_encode_dentry_release(void **p, struct dentry *dn,
                                      int mds, int drop, int unless);
 
 extern int ceph_get_caps(struct file *filp, int need, int want,
-                        loff_t endoff, int *got, struct page **pinned_page);
+                        loff_t endoff, int *got);
 extern int ceph_try_get_caps(struct inode *inode,
                             int need, int want, bool nonblock, int *got);