aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ceph/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ceph/file.c')
-rw-r--r--fs/ceph/file.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index c03ac4c4bcd1..861b9954a63a 100644
--- a/fs/ceph/file.c
+++ b/fs/ceph/file.c
@@ -805,6 +805,7 @@ static ssize_t ceph_read_iter(struct kiocb *iocb, struct iov_iter *to)
805 size_t len = iocb->ki_nbytes; 805 size_t len = iocb->ki_nbytes;
806 struct inode *inode = file_inode(filp); 806 struct inode *inode = file_inode(filp);
807 struct ceph_inode_info *ci = ceph_inode(inode); 807 struct ceph_inode_info *ci = ceph_inode(inode);
808 struct page *pinned_page = NULL;
808 ssize_t ret; 809 ssize_t ret;
809 int want, got = 0; 810 int want, got = 0;
810 int checkeof = 0, read = 0; 811 int checkeof = 0, read = 0;
@@ -817,7 +818,7 @@ again:
817 want = CEPH_CAP_FILE_CACHE | CEPH_CAP_FILE_LAZYIO; 818 want = CEPH_CAP_FILE_CACHE | CEPH_CAP_FILE_LAZYIO;
818 else 819 else
819 want = CEPH_CAP_FILE_CACHE; 820 want = CEPH_CAP_FILE_CACHE;
820 ret = ceph_get_caps(ci, CEPH_CAP_FILE_RD, want, &got, -1); 821 ret = ceph_get_caps(ci, CEPH_CAP_FILE_RD, want, -1, &got, &pinned_page);
821 if (ret < 0) 822 if (ret < 0)
822 return ret; 823 return ret;
823 824
@@ -840,6 +841,10 @@ again:
840 } 841 }
841 dout("aio_read %p %llx.%llx dropping cap refs on %s = %d\n", 842 dout("aio_read %p %llx.%llx dropping cap refs on %s = %d\n",
842 inode, ceph_vinop(inode), ceph_cap_string(got), (int)ret); 843 inode, ceph_vinop(inode), ceph_cap_string(got), (int)ret);
844 if (pinned_page) {
845 page_cache_release(pinned_page);
846 pinned_page = NULL;
847 }
843 ceph_put_cap_refs(ci, got); 848 ceph_put_cap_refs(ci, got);
844 849
845 if (checkeof && ret >= 0) { 850 if (checkeof && ret >= 0) {
@@ -924,7 +929,8 @@ retry_snap:
924 else 929 else
925 want = CEPH_CAP_FILE_BUFFER; 930 want = CEPH_CAP_FILE_BUFFER;
926 got = 0; 931 got = 0;
927 err = ceph_get_caps(ci, CEPH_CAP_FILE_WR, want, &got, pos + count); 932 err = ceph_get_caps(ci, CEPH_CAP_FILE_WR, want, pos + count,
933 &got, NULL);
928 if (err < 0) 934 if (err < 0)
929 goto out; 935 goto out;
930 936
@@ -1225,7 +1231,7 @@ static long ceph_fallocate(struct file *file, int mode,
1225 else 1231 else
1226 want = CEPH_CAP_FILE_BUFFER; 1232 want = CEPH_CAP_FILE_BUFFER;
1227 1233
1228 ret = ceph_get_caps(ci, CEPH_CAP_FILE_WR, want, &got, endoff); 1234 ret = ceph_get_caps(ci, CEPH_CAP_FILE_WR, want, endoff, &got, NULL);
1229 if (ret < 0) 1235 if (ret < 0)
1230 goto unlock; 1236 goto unlock;
1231 1237