Skip to content

Commit

Permalink
ceph: don't take s_mutex in ceph_flush_snaps
Browse files Browse the repository at this point in the history
Signed-off-by: Jeff Layton <[email protected]>
Reviewed-by: Luis Henriques <[email protected]>
Signed-off-by: Ilya Dryomov <[email protected]>
  • Loading branch information
jtlayton authored and idryomov committed Jun 28, 2021
1 parent 0449a35 commit 7732fe1
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 14 deletions.
13 changes: 3 additions & 10 deletions fs/ceph/caps.c
Original file line number Diff line number Diff line change
Expand Up @@ -1531,7 +1531,7 @@ static inline int __send_flush_snap(struct inode *inode,
* asynchronously back to the MDS once sync writes complete and dirty
* data is written out.
*
* Called under i_ceph_lock. Takes s_mutex as needed.
* Called under i_ceph_lock.
*/
static void __ceph_flush_snaps(struct ceph_inode_info *ci,
struct ceph_mds_session *session)
Expand Down Expand Up @@ -1653,7 +1653,6 @@ void ceph_flush_snaps(struct ceph_inode_info *ci,
mds = ci->i_auth_cap->session->s_mds;
if (session && session->s_mds != mds) {
dout(" oops, wrong session %p mutex\n", session);
mutex_unlock(&session->s_mutex);
ceph_put_mds_session(session);
session = NULL;
}
Expand All @@ -1662,10 +1661,6 @@ void ceph_flush_snaps(struct ceph_inode_info *ci,
mutex_lock(&mdsc->mutex);
session = __ceph_lookup_mds_session(mdsc, mds);
mutex_unlock(&mdsc->mutex);
if (session) {
dout(" inverting session/ino locks on %p\n", session);
mutex_lock(&session->s_mutex);
}
goto retry;
}

Expand All @@ -1677,12 +1672,10 @@ void ceph_flush_snaps(struct ceph_inode_info *ci,
out:
spin_unlock(&ci->i_ceph_lock);

if (psession) {
if (psession)
*psession = session;
} else if (session) {
mutex_unlock(&session->s_mutex);
else
ceph_put_mds_session(session);
}
/* we flushed them all; remove this inode from the queue */
spin_lock(&mdsc->snap_flush_lock);
list_del_init(&ci->i_snap_flush_item);
Expand Down
5 changes: 1 addition & 4 deletions fs/ceph/snap.c
Original file line number Diff line number Diff line change
Expand Up @@ -846,10 +846,7 @@ static void flush_snaps(struct ceph_mds_client *mdsc)
}
spin_unlock(&mdsc->snap_flush_lock);

if (session) {
mutex_unlock(&session->s_mutex);
ceph_put_mds_session(session);
}
ceph_put_mds_session(session);
dout("flush_snaps done\n");
}

Expand Down

0 comments on commit 7732fe1

Please sign in to comment.