From: Yehuda Sadeh Date: Wed, 4 Mar 2009 22:13:12 +0000 (-0800) Subject: kclient: some cleanup X-Git-Tag: v0.7~35 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e9c952366e9e3eb9afb9ef702b21f4415438ab6d;p=ceph.git kclient: some cleanup --- diff --git a/src/kernel/caps.c b/src/kernel/caps.c index 1ac2b698b6e..a52cd400193 100644 --- a/src/kernel/caps.c +++ b/src/kernel/caps.c @@ -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)); +} diff --git a/src/kernel/file.c b/src/kernel/file.c index af1b8acb590..d2eca0bba9f 100644 --- a/src/kernel/file.c +++ b/src/kernel/file.c @@ -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; diff --git a/src/kernel/super.h b/src/kernel/super.h index b9f3e0678fc..2dfe50cd53e 100644 --- a/src/kernel/super.h +++ b/src/kernel/super.h @@ -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);