Loading fs/ceph/caps.c +12 −2 Original line number Diff line number Diff line Loading @@ -2573,7 +2573,8 @@ static void handle_cap_trunc(struct inode *inode, * caller holds s_mutex */ static void handle_cap_export(struct inode *inode, struct ceph_mds_caps *ex, struct ceph_mds_session *session) struct ceph_mds_session *session, int *open_target_sessions) { struct ceph_inode_info *ci = ceph_inode(inode); int mds = session->s_mds; Loading Loading @@ -2605,6 +2606,12 @@ static void handle_cap_export(struct inode *inode, struct ceph_mds_caps *ex, ci->i_cap_exporting_mds = mds; ci->i_cap_exporting_mseq = mseq; ci->i_cap_exporting_issued = cap->issued; /* * make sure we have open sessions with all possible * export targets, so that we get the matching IMPORT */ *open_target_sessions = 1; } __ceph_remove_cap(cap); } Loading Loading @@ -2680,6 +2687,7 @@ void ceph_handle_caps(struct ceph_mds_session *session, u64 size, max_size; u64 tid; void *snaptrace; int open_target_sessions = 0; dout("handle_caps from mds%d\n", mds); Loading Loading @@ -2731,7 +2739,7 @@ void ceph_handle_caps(struct ceph_mds_session *session, goto done; case CEPH_CAP_OP_EXPORT: handle_cap_export(inode, h, session); handle_cap_export(inode, h, session, &open_target_sessions); goto done; case CEPH_CAP_OP_IMPORT: Loading Loading @@ -2778,6 +2786,8 @@ void ceph_handle_caps(struct ceph_mds_session *session, done_unlocked: if (inode) iput(inode); if (open_target_sessions) ceph_mdsc_open_export_target_sessions(mdsc, session); return; bad: Loading fs/ceph/mds_client.c +8 −0 Original line number Diff line number Diff line Loading @@ -741,6 +741,14 @@ static void __open_export_target_sessions(struct ceph_mds_client *mdsc, } } void ceph_mdsc_open_export_target_sessions(struct ceph_mds_client *mdsc, struct ceph_mds_session *session) { mutex_lock(&mdsc->mutex); __open_export_target_sessions(mdsc, session); mutex_unlock(&mdsc->mutex); } /* * session caps */ Loading fs/ceph/mds_client.h +3 −0 Original line number Diff line number Diff line Loading @@ -364,4 +364,7 @@ extern void ceph_mdsc_lease_send_msg(struct ceph_mds_session *session, extern void ceph_mdsc_handle_map(struct ceph_mds_client *mdsc, struct ceph_msg *msg); extern void ceph_mdsc_open_export_target_sessions(struct ceph_mds_client *mdsc, struct ceph_mds_session *session); #endif Loading
fs/ceph/caps.c +12 −2 Original line number Diff line number Diff line Loading @@ -2573,7 +2573,8 @@ static void handle_cap_trunc(struct inode *inode, * caller holds s_mutex */ static void handle_cap_export(struct inode *inode, struct ceph_mds_caps *ex, struct ceph_mds_session *session) struct ceph_mds_session *session, int *open_target_sessions) { struct ceph_inode_info *ci = ceph_inode(inode); int mds = session->s_mds; Loading Loading @@ -2605,6 +2606,12 @@ static void handle_cap_export(struct inode *inode, struct ceph_mds_caps *ex, ci->i_cap_exporting_mds = mds; ci->i_cap_exporting_mseq = mseq; ci->i_cap_exporting_issued = cap->issued; /* * make sure we have open sessions with all possible * export targets, so that we get the matching IMPORT */ *open_target_sessions = 1; } __ceph_remove_cap(cap); } Loading Loading @@ -2680,6 +2687,7 @@ void ceph_handle_caps(struct ceph_mds_session *session, u64 size, max_size; u64 tid; void *snaptrace; int open_target_sessions = 0; dout("handle_caps from mds%d\n", mds); Loading Loading @@ -2731,7 +2739,7 @@ void ceph_handle_caps(struct ceph_mds_session *session, goto done; case CEPH_CAP_OP_EXPORT: handle_cap_export(inode, h, session); handle_cap_export(inode, h, session, &open_target_sessions); goto done; case CEPH_CAP_OP_IMPORT: Loading Loading @@ -2778,6 +2786,8 @@ void ceph_handle_caps(struct ceph_mds_session *session, done_unlocked: if (inode) iput(inode); if (open_target_sessions) ceph_mdsc_open_export_target_sessions(mdsc, session); return; bad: Loading
fs/ceph/mds_client.c +8 −0 Original line number Diff line number Diff line Loading @@ -741,6 +741,14 @@ static void __open_export_target_sessions(struct ceph_mds_client *mdsc, } } void ceph_mdsc_open_export_target_sessions(struct ceph_mds_client *mdsc, struct ceph_mds_session *session) { mutex_lock(&mdsc->mutex); __open_export_target_sessions(mdsc, session); mutex_unlock(&mdsc->mutex); } /* * session caps */ Loading
fs/ceph/mds_client.h +3 −0 Original line number Diff line number Diff line Loading @@ -364,4 +364,7 @@ extern void ceph_mdsc_lease_send_msg(struct ceph_mds_session *session, extern void ceph_mdsc_handle_map(struct ceph_mds_client *mdsc, struct ceph_msg *msg); extern void ceph_mdsc_open_export_target_sessions(struct ceph_mds_client *mdsc, struct ceph_mds_session *session); #endif