diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index 000abc07bc1e17cb9d36cc2708b216c3fd3afefd..30a30b7b301ce18165b97801f94b2a7619146967 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -617,10 +617,6 @@ static void mgmt_init_hdev(struct hci_dev *hdev)
 		 */
 		clear_bit(HCI_PAIRABLE, &hdev->dev_flags);
 	}
-
-	if (!test_and_set_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
-		schedule_delayed_work(&hdev->service_cache,
-				msecs_to_jiffies(SERVICE_CACHE_TIMEOUT));
 }
 
 static int read_controller_info(struct sock *sk, u16 index)
@@ -1399,6 +1395,12 @@ static int remove_uuid(struct sock *sk, u16 index, void *data, u16 len)
 
 	if (memcmp(cp->uuid, bt_uuid_any, 16) == 0) {
 		err = hci_uuids_clear(hdev);
+
+		if (hdev_is_powered(hdev) &&
+				!test_and_set_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
+			schedule_delayed_work(&hdev->service_cache,
+					msecs_to_jiffies(SERVICE_CACHE_TIMEOUT));
+
 		goto unlock;
 	}