From: Sage Weil Date: Tue, 9 Mar 2010 20:52:26 +0000 (-0800) Subject: ceph: add missing locking to protect i_snap_realm_item during split X-Git-Tag: firefly_0821_release~9833^2~2459^2~26 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=052bb34af3bf8ae2001b9f03d884ba0def3e427c;p=firefly-linux-kernel-4.4.55.git 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 --- 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,