From 56767452a5d186f7b6132ad96f91a35d640251ce Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 24 Oct 2008 15:29:52 -0700 Subject: [PATCH] kclient: take i_lock in flush_snaps --- src/kernel/caps.c | 2 +- src/kernel/snap.c | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/kernel/caps.c b/src/kernel/caps.c index f74ab0cc7509d..ca01e253e4142 100644 --- a/src/kernel/caps.c +++ b/src/kernel/caps.c @@ -533,7 +533,7 @@ retry: } } -static void ceph_flush_snaps(struct ceph_inode_info *ci) +void ceph_flush_snaps(struct ceph_inode_info *ci) { struct inode *inode = &ci->vfs_inode; diff --git a/src/kernel/snap.c b/src/kernel/snap.c index fff5ade44bd51..dfbbbed84a1b3 100644 --- a/src/kernel/snap.c +++ b/src/kernel/snap.c @@ -517,6 +517,7 @@ fail: static void flush_snaps(struct ceph_mds_client *mdsc) { struct ceph_inode_info *ci; + struct inode *inode; struct ceph_mds_session *session = NULL; dout(10, "flush_snaps\n"); @@ -524,10 +525,13 @@ static void flush_snaps(struct ceph_mds_client *mdsc) while (!list_empty(&mdsc->snap_flush_list)) { ci = list_entry(mdsc->snap_flush_list.next, struct ceph_inode_info, i_snap_flush_item); - igrab(&ci->vfs_inode); + inode = &ci->vfs_inode; + igrab(inode); spin_unlock(&mdsc->snap_flush_lock); + spin_lock(&inode->i_lock); __ceph_flush_snaps(ci, &session); - iput(&ci->vfs_inode); + spin_unlock(&inode->i_lock); + iput(inode); spin_lock(&mdsc->snap_flush_lock); } spin_unlock(&mdsc->snap_flush_lock); -- 2.39.5