diff options
author | Yan, Zheng <zyan@redhat.com> | 2019-01-14 04:21:19 -0500 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2019-03-05 12:55:16 -0500 |
commit | e3ec8d6898f71636a067dae683174ef9bf81bc96 (patch) | |
tree | ce14ef6392b06d84016f35e96e140dce9dcc12a4 /fs/ceph/caps.c | |
parent | 08796873a5183bfaab52a3bd899fe82f9e64be94 (diff) |
ceph: send cap releases more aggressively
When pending cap releases fill up one message, start a work to send
cap release message. (old way is sending cap releases every 5 seconds)
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Diffstat (limited to 'fs/ceph/caps.c')
-rw-r--r-- | fs/ceph/caps.c | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c index 0eaf1b48c431..da5b56e14cc7 100644 --- a/fs/ceph/caps.c +++ b/fs/ceph/caps.c | |||
@@ -1081,9 +1081,7 @@ void __ceph_remove_cap(struct ceph_cap *cap, bool queue_release) | |||
1081 | (!session->s_cap_reconnect || cap->cap_gen == session->s_cap_gen)) { | 1081 | (!session->s_cap_reconnect || cap->cap_gen == session->s_cap_gen)) { |
1082 | cap->queue_release = 1; | 1082 | cap->queue_release = 1; |
1083 | if (removed) { | 1083 | if (removed) { |
1084 | list_add_tail(&cap->session_caps, | 1084 | __ceph_queue_cap_release(session, cap); |
1085 | &session->s_cap_releases); | ||
1086 | session->s_num_cap_releases++; | ||
1087 | removed = 0; | 1085 | removed = 0; |
1088 | } | 1086 | } |
1089 | } else { | 1087 | } else { |
@@ -1245,7 +1243,7 @@ static int send_cap_msg(struct cap_msg_args *arg) | |||
1245 | * Queue cap releases when an inode is dropped from our cache. Since | 1243 | * Queue cap releases when an inode is dropped from our cache. Since |
1246 | * inode is about to be destroyed, there is no need for i_ceph_lock. | 1244 | * inode is about to be destroyed, there is no need for i_ceph_lock. |
1247 | */ | 1245 | */ |
1248 | void ceph_queue_caps_release(struct inode *inode) | 1246 | void __ceph_remove_caps(struct inode *inode) |
1249 | { | 1247 | { |
1250 | struct ceph_inode_info *ci = ceph_inode(inode); | 1248 | struct ceph_inode_info *ci = ceph_inode(inode); |
1251 | struct rb_node *p; | 1249 | struct rb_node *p; |
@@ -3886,12 +3884,10 @@ void ceph_handle_caps(struct ceph_mds_session *session, | |||
3886 | cap->seq = seq; | 3884 | cap->seq = seq; |
3887 | cap->issue_seq = seq; | 3885 | cap->issue_seq = seq; |
3888 | spin_lock(&session->s_cap_lock); | 3886 | spin_lock(&session->s_cap_lock); |
3889 | list_add_tail(&cap->session_caps, | 3887 | __ceph_queue_cap_release(session, cap); |
3890 | &session->s_cap_releases); | ||
3891 | session->s_num_cap_releases++; | ||
3892 | spin_unlock(&session->s_cap_lock); | 3888 | spin_unlock(&session->s_cap_lock); |
3893 | } | 3889 | } |
3894 | goto flush_cap_releases; | 3890 | goto done; |
3895 | } | 3891 | } |
3896 | 3892 | ||
3897 | /* these will work even if we don't have a cap yet */ | 3893 | /* these will work even if we don't have a cap yet */ |
@@ -3961,7 +3957,12 @@ void ceph_handle_caps(struct ceph_mds_session *session, | |||
3961 | ceph_cap_op_name(op)); | 3957 | ceph_cap_op_name(op)); |
3962 | } | 3958 | } |
3963 | 3959 | ||
3964 | goto done; | 3960 | done: |
3961 | mutex_unlock(&session->s_mutex); | ||
3962 | done_unlocked: | ||
3963 | iput(inode); | ||
3964 | ceph_put_string(extra_info.pool_ns); | ||
3965 | return; | ||
3965 | 3966 | ||
3966 | flush_cap_releases: | 3967 | flush_cap_releases: |
3967 | /* | 3968 | /* |
@@ -3969,14 +3970,8 @@ flush_cap_releases: | |||
3969 | * along for the mds (who clearly thinks we still have this | 3970 | * along for the mds (who clearly thinks we still have this |
3970 | * cap). | 3971 | * cap). |
3971 | */ | 3972 | */ |
3972 | ceph_send_cap_releases(mdsc, session); | 3973 | ceph_flush_cap_releases(mdsc, session); |
3973 | 3974 | goto done; | |
3974 | done: | ||
3975 | mutex_unlock(&session->s_mutex); | ||
3976 | done_unlocked: | ||
3977 | iput(inode); | ||
3978 | ceph_put_string(extra_info.pool_ns); | ||
3979 | return; | ||
3980 | 3975 | ||
3981 | bad: | 3976 | bad: |
3982 | pr_err("ceph_handle_caps: corrupt message\n"); | 3977 | pr_err("ceph_handle_caps: corrupt message\n"); |