Luis Henriques 0d8a28
From: "Yan, Zheng" <zyan@redhat.com>
Luis Henriques 0d8a28
Date: Mon, 11 Feb 2019 15:18:52 +0800
Luis Henriques 0d8a28
Subject: ceph: avoid repeatedly adding inode to mdsc->snap_flush_list
Luis Henriques 0d8a28
Git-commit: 04242ff3ac0abbaa4362f97781dac268e6c3541a
Luis Henriques 0d8a28
Patch-mainline: v5.0-rc8
Luis Henriques 0d8a28
References: bsc#1126790
Luis Henriques 0d8a28
Luis Henriques 0d8a28
Otherwise, mdsc->snap_flush_list may get corrupted.
Luis Henriques 0d8a28
Luis Henriques 0d8a28
Cc: stable@vger.kernel.org
Luis Henriques 0d8a28
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
Luis Henriques 0d8a28
Reviewed-by: Ilya Dryomov <idryomov@gmail.com>
Luis Henriques 0d8a28
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Luis Henriques 0d8a28
Acked-by: Luis Henriques <lhenriques@suse.com>
Luis Henriques 0d8a28
---
Luis Henriques 0d8a28
 fs/ceph/snap.c |    3 ++-
Luis Henriques 0d8a28
 1 file changed, 2 insertions(+), 1 deletion(-)
Luis Henriques 0d8a28
Luis Henriques 0d8a28
--- a/fs/ceph/snap.c
Luis Henriques 0d8a28
+++ b/fs/ceph/snap.c
Luis Henriques 0d8a28
@@ -615,7 +615,8 @@ int __ceph_finish_cap_snap(struct ceph_i
Luis Henriques 0d8a28
 	     capsnap->size);
Luis Henriques 0d8a28
 
Luis Henriques 0d8a28
 	spin_lock(&mdsc->snap_flush_lock);
Luis Henriques 0d8a28
-	list_add_tail(&ci->i_snap_flush_item, &mdsc->snap_flush_list);
Luis Henriques 0d8a28
+	if (list_empty(&ci->i_snap_flush_item))
Luis Henriques 0d8a28
+		list_add_tail(&ci->i_snap_flush_item, &mdsc->snap_flush_list);
Luis Henriques 0d8a28
 	spin_unlock(&mdsc->snap_flush_lock);
Luis Henriques 0d8a28
 	return 1;  /* caller may want to ceph_flush_snaps */
Luis Henriques 0d8a28
 }