ceph: fix error handling in ceph_get_caps()
The function return 0 even when interrupted or try_get_cap_refs()
return error.
Fixes: 1199d7da2d
("ceph: simplify arguments and return semantics of try_get_cap_refs")
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
3e1d0452ed
commit
7b2f936fc8
|
@ -2738,15 +2738,13 @@ int ceph_get_caps(struct ceph_inode_info *ci, int need, int want,
|
||||||
_got = 0;
|
_got = 0;
|
||||||
ret = try_get_cap_refs(ci, need, want, endoff,
|
ret = try_get_cap_refs(ci, need, want, endoff,
|
||||||
false, &_got);
|
false, &_got);
|
||||||
if (ret == -EAGAIN) {
|
if (ret == -EAGAIN)
|
||||||
continue;
|
continue;
|
||||||
} else if (!ret) {
|
if (!ret) {
|
||||||
int err;
|
|
||||||
|
|
||||||
DEFINE_WAIT_FUNC(wait, woken_wake_function);
|
DEFINE_WAIT_FUNC(wait, woken_wake_function);
|
||||||
add_wait_queue(&ci->i_cap_wq, &wait);
|
add_wait_queue(&ci->i_cap_wq, &wait);
|
||||||
|
|
||||||
while (!(err = try_get_cap_refs(ci, need, want, endoff,
|
while (!(ret = try_get_cap_refs(ci, need, want, endoff,
|
||||||
true, &_got))) {
|
true, &_got))) {
|
||||||
if (signal_pending(current)) {
|
if (signal_pending(current)) {
|
||||||
ret = -ERESTARTSYS;
|
ret = -ERESTARTSYS;
|
||||||
|
@ -2756,14 +2754,16 @@ int ceph_get_caps(struct ceph_inode_info *ci, int need, int want,
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_wait_queue(&ci->i_cap_wq, &wait);
|
remove_wait_queue(&ci->i_cap_wq, &wait);
|
||||||
if (err == -EAGAIN)
|
if (ret == -EAGAIN)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (ret < 0) {
|
||||||
if (ret == -ESTALE) {
|
if (ret == -ESTALE) {
|
||||||
/* session was killed, try renew caps */
|
/* session was killed, try renew caps */
|
||||||
ret = ceph_renew_caps(&ci->vfs_inode);
|
ret = ceph_renew_caps(&ci->vfs_inode);
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue