forked from Minki/linux
ceph: clean up and optimize ceph_check_delayed_caps()
Make this loop look a bit more sane. Also optimize away the spinlock release/reacquire if we can't get an inode reference. Signed-off-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: Xiubo Li <xiubli@redhat.com> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
fa99677342
commit
585d72f33e
@ -4189,10 +4189,8 @@ void ceph_check_delayed_caps(struct ceph_mds_client *mdsc)
|
||||
struct ceph_inode_info *ci;
|
||||
|
||||
dout("check_delayed_caps\n");
|
||||
while (1) {
|
||||
spin_lock(&mdsc->cap_delay_lock);
|
||||
if (list_empty(&mdsc->cap_delay_list))
|
||||
break;
|
||||
spin_lock(&mdsc->cap_delay_lock);
|
||||
while (!list_empty(&mdsc->cap_delay_list)) {
|
||||
ci = list_first_entry(&mdsc->cap_delay_list,
|
||||
struct ceph_inode_info,
|
||||
i_cap_delay_list);
|
||||
@ -4202,13 +4200,13 @@ void ceph_check_delayed_caps(struct ceph_mds_client *mdsc)
|
||||
list_del_init(&ci->i_cap_delay_list);
|
||||
|
||||
inode = igrab(&ci->vfs_inode);
|
||||
spin_unlock(&mdsc->cap_delay_lock);
|
||||
|
||||
if (inode) {
|
||||
spin_unlock(&mdsc->cap_delay_lock);
|
||||
dout("check_delayed_caps on %p\n", inode);
|
||||
ceph_check_caps(ci, 0, NULL);
|
||||
/* avoid calling iput_final() in tick thread */
|
||||
ceph_async_iput(inode);
|
||||
spin_lock(&mdsc->cap_delay_lock);
|
||||
}
|
||||
}
|
||||
spin_unlock(&mdsc->cap_delay_lock);
|
||||
|
Loading…
Reference in New Issue
Block a user