From 052bb34af3bf8ae2001b9f03d884ba0def3e427c Mon Sep 17 00:00:00 2001
From: Sage Weil <sage@newdream.net>
Date: Tue, 9 Mar 2010 12:52:26 -0800
Subject: [PATCH] ceph: add missing locking to protect i_snap_realm_item during
 split

All ci->i_snap_realm_item/realm->inodes_with_caps manipulation should be
protected by realm->inodes_with_caps_lock.  This bug would have only bit
us in a rare race with a realm split (during some snap creations).

Signed-off-by: Sage Weil <sage@newdream.net>
---
 fs/ceph/snap.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/fs/ceph/snap.c b/fs/ceph/snap.c
index bf2a5f3846a4..8a43bc8675eb 100644
--- a/fs/ceph/snap.c
+++ b/fs/ceph/snap.c
@@ -818,7 +818,9 @@ void ceph_handle_snap(struct ceph_mds_client *mdsc,
 			 * queued (again) by ceph_update_snap_trace()
 			 * below.  Queue it _now_, under the old context.
 			 */
+			spin_lock(&realm->inodes_with_caps_lock);
 			list_del_init(&ci->i_snap_realm_item);
+			spin_unlock(&realm->inodes_with_caps_lock);
 			spin_unlock(&inode->i_lock);
 
 			ceph_queue_cap_snap(ci,
-- 
GitLab