If the ceph_mdsc_open_export_target_session() return fails,
we should add mutex_lock(&session->s_mutex) on IS_ERR(tsession) block 
to avoid twice unlocking. because the session->s_mutex will be unlock
at the out_unlock lable.

--
v2 -> v3:
  - Rewrite solution, adding a mutex_lock(&session->s_mutex) 
    to the IS_ERR(tsession) block.
  - Modify the comment more clearly.
v1 -> v2:
  - add spin_lock(&ci->i_ceph_lock) before goto out_unlock lable
     

Signed-off-by: Wu Bo <[email protected]>
---
 fs/ceph/caps.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
index 185db76..d27d778 100644
--- a/fs/ceph/caps.c
+++ b/fs/ceph/caps.c
@@ -3746,6 +3746,7 @@ static void handle_cap_export(struct inode *inode, struct 
ceph_mds_caps *ex,
                WARN_ON(1);
                tsession = NULL;
                target = -1;
+               mutex_lock(&session->s_mutex);
        }
        goto retry;
 
-- 
1.8.3.1

Reply via email to