]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: some cleanup
authorYehuda Sadeh <yehuda@hq.newdream.net>
Wed, 4 Mar 2009 22:13:12 +0000 (14:13 -0800)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Wed, 4 Mar 2009 22:13:12 +0000 (14:13 -0800)
src/kernel/caps.c
src/kernel/file.c
src/kernel/super.h

index 1ac2b698b6e72fb9b75abf285075fa9f7e46396d..a52cd400193f3a2ae322b6887c6405dcc88510c5 100644 (file)
@@ -1817,3 +1817,10 @@ void ceph_trim_session_rdcaps(struct ceph_mds_session *session)
                        iput(inode);
        }
 }
+
+int ceph_wait_for_caps(struct ceph_inode_info *ci, int need, int want, int *got,
+                     loff_t endoff)
+{
+       return wait_event_interruptible(ci->i_cap_wq,
+                                      ceph_get_cap_refs(ci, need, want, got, endoff));
+}
index af1b8acb590fd575c9a3adb55123507f9b0bd87a..d2eca0bba9f5f752684b1f140a91bde3e255279a 100644 (file)
@@ -277,11 +277,10 @@ static ssize_t ceph_aio_read(struct kiocb *iocb, const struct iovec *iov,
 
        dout(10, "aio_read %llx.%llx %llu~%u trying to get caps on %p\n",
             ceph_vinop(inode), pos, (unsigned)len, inode);
-       ret = wait_event_interruptible(ci->i_cap_wq,
-                                      ceph_get_cap_refs(ci,
-                                                        CEPH_CAP_FILE_RD,
-                                                        CEPH_CAP_FILE_RDCACHE,
-                                                        &got, -1));
+       ret = ceph_wait_for_caps(ci,
+                                CEPH_CAP_FILE_RD,
+                                CEPH_CAP_FILE_RDCACHE,
+                                &got, -1);
        if (ret < 0)
                goto out;
        dout(10, "aio_read %llx.%llx %llu~%u got cap refs %d\n",
@@ -358,11 +357,10 @@ retry_snap:
        check_max_size(inode, endoff);
        dout(10, "aio_write %p %llu~%u getting caps. i_size %llu\n",
             inode, pos, (unsigned)iov->iov_len, inode->i_size);
-       ret = wait_event_interruptible(ci->i_cap_wq,
-                                      ceph_get_cap_refs(ci,
-                                                        CEPH_CAP_FILE_WR,
-                                                        CEPH_CAP_FILE_WRBUFFER,
-                                                        &got, endoff));
+       ret = ceph_wait_for_caps(ci,
+                                CEPH_CAP_FILE_WR,
+                                CEPH_CAP_FILE_WRBUFFER,
+                                &got, endoff);
        if (ret < 0)
                goto out;
 
index b9f3e0678fcab6a5fa468e0c2db8533db740c366..2dfe50cd53ec85a354edf0ca428cce1fbb99f5a7 100644 (file)
@@ -739,6 +739,9 @@ static inline void ceph_release_caps(struct inode *inode, int mask)
        ceph_check_caps(ceph_inode(inode), 1, mask, NULL);
 }
 
+extern int ceph_wait_for_caps(struct ceph_inode_info *ci, int need, int want, int *got,
+                     loff_t endoff);
+
 /* addr.c */
 extern const struct address_space_operations ceph_aops;
 extern int ceph_mmap(struct file *file, struct vm_area_struct *vma);