diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index a75fe93a25b173db342f033b2697e86638506f39..5ab9f55d3e0cb08ea4323fdc74159e5d9899dccb 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -1684,7 +1684,9 @@ static int rbd_header_add_snap(struct rbd_device *dev,
 	if (ret < 0)
 		return ret;
 
-	dev->header.snapc->seq =  new_snapid;
+	down_write(&dev->header_rwsem);
+	dev->header.snapc->seq = new_snapid;
+	up_write(&dev->header_rwsem);
 
 	return 0;
 bad: