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.