On 07/15/2016 01:10 AM, Vladimir Davydov wrote:
diff --git a/drivers/block/ploop/dev.c b/drivers/block/ploop/dev.c
index d52975eaaa36..3dc94ca5c393 100644
--- a/drivers/block/ploop/dev.c
+++ b/drivers/block/ploop/dev.c
@@ -4839,11 +4839,12 @@ static int ploop_thaw(struct ploop_device *plo, struct 
block_device *bdev)
        if (!test_bit(PLOOP_S_FROZEN, &plo->state))
                return 0;
+ plo->sb = NULL;
+       clear_bit(PLOOP_S_FROZEN, &plo->state);
+
+       mutex_unlock(&plo->ctl_mutex);

Since this point nothing in ploop state hints that the device is still frozen. Someone (another instance of backup tool?) may mistakenly try to freeze it again (before we call thaw_bdev) and succeed in it (because the S_FROZEN bit is already cleared). The result would be "double freeze" that we tried to avoid by initial patch. The fix must be simple, I'll send a patch soon.

Thanks,
Maxim

        err = thaw_bdev(bdev, sb);
-       if (!err) {
-               plo->sb = NULL;
-               clear_bit(PLOOP_S_FROZEN, &plo->state);
-       }
+       mutex_lock(&plo->ctl_mutex);
return err;
  }

_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to