diff --git a/src/_zkapauthorizer/_storage_client.py b/src/_zkapauthorizer/_storage_client.py
index e4c8e598a01d050e1c36ad93ba8f9bd54c240b71..684389e72b8afe8711372d4733b9fdebade0d373 100644
--- a/src/_zkapauthorizer/_storage_client.py
+++ b/src/_zkapauthorizer/_storage_client.py
@@ -185,8 +185,8 @@ def call_with_passes_with_manual_spend(method, num_passes, get_passes, on_succes
             pass_group.reset()
             raise
 
-        # Give the operation's result to the caller.
-        returnValue(result)
+    # Give the operation's result to the caller.
+    returnValue(result)
 
 
 def call_with_passes(method, num_passes, get_passes):
@@ -311,17 +311,16 @@ class ZKAPAuthorizerStorageClient(object):
             allocated.
         """
         alreadygot, bucketwriters = result
-        if alreadygot:
-            # Passes only need to be spent for buckets that are being
-            # allocated.  Someone already paid for any shares the server
-            # already has.
-            actual_passes = required_passes(
-                self._pass_value,
-                [allocated_size] * len(bucketwriters),
-            )
-            to_spend, to_reset = pass_group.split(range(actual_passes))
-            to_spend.mark_spent()
-            to_reset.reset()
+        # Passes only need to be spent for buckets that are being
+        # allocated.  Someone already paid for any shares the server
+        # already has.
+        actual_passes = required_passes(
+            self._pass_value,
+            [allocated_size] * len(bucketwriters),
+        )
+        to_spend, to_reset = pass_group.split(range(actual_passes))
+        to_spend.mark_spent()
+        to_reset.reset()
 
     @with_rref
     def allocate_buckets(
diff --git a/src/_zkapauthorizer/tests/test_storage_protocol.py b/src/_zkapauthorizer/tests/test_storage_protocol.py
index f1dba779b6e53b62006c4ff16d89c66e38aca426..873b1881f9530bd1e68fcb542f51badbd798852b 100644
--- a/src/_zkapauthorizer/tests/test_storage_protocol.py
+++ b/src/_zkapauthorizer/tests/test_storage_protocol.py
@@ -313,6 +313,9 @@ class ShareTests(TestCase):
         # up between iterations.
         cleanup_storage_server(self.anonymous_storage_server)
 
+        # Oops our pass factory, too. :(
+        self.pass_factory._clear()
+
         alreadygot, allocated = extract_result(
             self.client.allocate_buckets(
                 storage_index,
@@ -354,6 +357,25 @@ class ShareTests(TestCase):
                 ),
             )
 
+        # Enough passes for all the sharenums should have been spent.
+        anticipated_passes = required_passes(
+            self.pass_value,
+            [size] * len(sharenums),
+        )
+
+        self.assertThat(
+            self.pass_factory,
+            MatchesStructure(
+                issued=HasLength(anticipated_passes),
+                spent=HasLength(anticipated_passes),
+
+                returned=HasLength(0),
+                in_use=HasLength(0),
+                invalid=HasLength(0),
+            ),
+        )
+
+
     @given(
         storage_index=storage_indexes(),
         renew_secret=lease_renew_secrets(),