diff --git a/lib/backend.py b/lib/backend.py index e56628e9934d4c4babb8efe153d88728af1fa28c..c2b66f7782ca81e8323e80866c4c652d690f0d92 100644 --- a/lib/backend.py +++ b/lib/backend.py @@ -1249,24 +1249,24 @@ def BlockdevShutdown(disk): """ msgs = [] + result = True r_dev = _RecursiveFindBD(disk) if r_dev is not None: r_path = r_dev.dev_path try: - result = r_dev.Shutdown() + r_dev.Shutdown() + DevCacheManager.RemoveCache(r_path) except errors.BlockDeviceError, err: msgs.append(str(err)) result = False - if result: - DevCacheManager.RemoveCache(r_path) - else: - result = True + if disk.children: for child in disk.children: c_status, c_msg = BlockdevShutdown(child) result = result and c_status if c_msg: # not an empty message msgs.append(c_msg) + return (result, "; ".join(msgs)) diff --git a/lib/bdev.py b/lib/bdev.py index 2517c59a2497f678892faed1149e97bd4336b955..cfec2b2a09ac29ed9516a2e4e693a6eeb253492a 100644 --- a/lib/bdev.py +++ b/lib/bdev.py @@ -455,7 +455,7 @@ class LogicalVolume(BlockDev): volumes on shutdown. """ - return True + pass def GetSyncStatus(self): """Returns the sync status of the device. @@ -1447,7 +1447,6 @@ class DRBD8(BaseDRBD): self._children[1].dev_path) if not result: return False - need_localdev_teardown = True if self._lhost and self._lport and self._rhost and self._rport: result = self._AssembleNet(minor, (self._lhost, self._lport, @@ -1456,10 +1455,6 @@ class DRBD8(BaseDRBD): hmac=constants.DRBD_HMAC_ALG, secret=self._secret) if not result: - if need_localdev_teardown: - # we will ignore failures from this - logging.error("net setup failed, tearing down local device") - self._ShutdownAll(minor) return False self._SetFromMinor(minor) return True @@ -1498,21 +1493,19 @@ class DRBD8(BaseDRBD): """ result = utils.RunCmd(["drbdsetup", cls._DevPath(minor), "down"]) if result.failed: - logging.error("Can't shutdown drbd device: %s", result.output) - return not result.failed + _ThrowError("Can't shutdown drbd device: %s", result.output) def Shutdown(self): """Shutdown the DRBD device. """ if self.minor is None and not self.Attach(): - logging.info("DRBD device not attached to a device during Shutdown") - return True - if not self._ShutdownAll(self.minor): - return False + logging.info("drbd%d: not attached during Shutdown()", self._aminor) + return + minor = self.minor self.minor = None self.dev_path = None - return True + self._ShutdownAll(minor) def Remove(self): """Stub remove for DRBD devices. @@ -1602,7 +1595,7 @@ class FileStorage(BlockDev): the file on shutdown. """ - return True + pass def Open(self, force=False): """Make the device ready for I/O.