Skip to content

Commit 7732fe1

Browse files
jtlaytonidryomov
authored andcommitted
ceph: don't take s_mutex in ceph_flush_snaps
Signed-off-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: Luis Henriques <lhenriques@suse.de> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
1 parent 0449a35 commit 7732fe1

2 files changed

Lines changed: 4 additions & 14 deletions

File tree

fs/ceph/caps.c

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1531,7 +1531,7 @@ static inline int __send_flush_snap(struct inode *inode,
15311531
* asynchronously back to the MDS once sync writes complete and dirty
15321532
* data is written out.
15331533
*
1534-
* Called under i_ceph_lock. Takes s_mutex as needed.
1534+
* Called under i_ceph_lock.
15351535
*/
15361536
static void __ceph_flush_snaps(struct ceph_inode_info *ci,
15371537
struct ceph_mds_session *session)
@@ -1653,7 +1653,6 @@ void ceph_flush_snaps(struct ceph_inode_info *ci,
16531653
mds = ci->i_auth_cap->session->s_mds;
16541654
if (session && session->s_mds != mds) {
16551655
dout(" oops, wrong session %p mutex\n", session);
1656-
mutex_unlock(&session->s_mutex);
16571656
ceph_put_mds_session(session);
16581657
session = NULL;
16591658
}
@@ -1662,10 +1661,6 @@ void ceph_flush_snaps(struct ceph_inode_info *ci,
16621661
mutex_lock(&mdsc->mutex);
16631662
session = __ceph_lookup_mds_session(mdsc, mds);
16641663
mutex_unlock(&mdsc->mutex);
1665-
if (session) {
1666-
dout(" inverting session/ino locks on %p\n", session);
1667-
mutex_lock(&session->s_mutex);
1668-
}
16691664
goto retry;
16701665
}
16711666

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

1680-
if (psession) {
1675+
if (psession)
16811676
*psession = session;
1682-
} else if (session) {
1683-
mutex_unlock(&session->s_mutex);
1677+
else
16841678
ceph_put_mds_session(session);
1685-
}
16861679
/* we flushed them all; remove this inode from the queue */
16871680
spin_lock(&mdsc->snap_flush_lock);
16881681
list_del_init(&ci->i_snap_flush_item);

fs/ceph/snap.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -846,10 +846,7 @@ static void flush_snaps(struct ceph_mds_client *mdsc)
846846
}
847847
spin_unlock(&mdsc->snap_flush_lock);
848848

849-
if (session) {
850-
mutex_unlock(&session->s_mutex);
851-
ceph_put_mds_session(session);
852-
}
849+
ceph_put_mds_session(session);
853850
dout("flush_snaps done\n");
854851
}
855852

0 commit comments

Comments
 (0)