Browse Source

rbd: don't retry watch reregistration if header object is gone

If the header object gets deleted (perhaps along with the entire pool),
there is no point in attempting to reregister the watch.  Treat this
the same as blacklisting: fail all pending and new I/Os requiring the
lock.

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Ilya Dryomov 9 years ago
parent
commit
4d73644bc3
1 changed files with 1 additions and 1 deletions
  1. 1 1
      drivers/block/rbd.c

+ 1 - 1
drivers/block/rbd.c

@@ -3944,7 +3944,7 @@ static void rbd_reregister_watch(struct work_struct *work)
 	ret = __rbd_register_watch(rbd_dev);
 	ret = __rbd_register_watch(rbd_dev);
 	if (ret) {
 	if (ret) {
 		rbd_warn(rbd_dev, "failed to reregister watch: %d", ret);
 		rbd_warn(rbd_dev, "failed to reregister watch: %d", ret);
-		if (ret == -EBLACKLISTED) {
+		if (ret == -EBLACKLISTED || ret == -ENOENT) {
 			set_bit(RBD_DEV_FLAG_BLACKLISTED, &rbd_dev->flags);
 			set_bit(RBD_DEV_FLAG_BLACKLISTED, &rbd_dev->flags);
 			need_to_wake = true;
 			need_to_wake = true;
 		} else {
 		} else {