|
@@ -963,6 +963,7 @@ int bch_cached_dev_attach(struct cached_dev *dc, struct cache_set *c,
|
|
|
uint32_t rtime = cpu_to_le32(get_seconds());
|
|
|
struct uuid_entry *u;
|
|
|
char buf[BDEVNAME_SIZE];
|
|
|
+ struct cached_dev *exist_dc, *t;
|
|
|
|
|
|
bdevname(dc->bdev, buf);
|
|
|
|
|
@@ -987,6 +988,16 @@ int bch_cached_dev_attach(struct cached_dev *dc, struct cache_set *c,
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
+ /* Check whether already attached */
|
|
|
+ list_for_each_entry_safe(exist_dc, t, &c->cached_devs, list) {
|
|
|
+ if (!memcmp(dc->sb.uuid, exist_dc->sb.uuid, 16)) {
|
|
|
+ pr_err("Tried to attach %s but duplicate UUID already attached",
|
|
|
+ buf);
|
|
|
+
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
u = uuid_find(c, dc->sb.uuid);
|
|
|
|
|
|
if (u &&
|