--- ./drivers/md/bcache/super.c.orig 2014-07-21 09:43:03.599875510 -0400 +++ ./drivers/md/bcache/super.c 2014-07-21 11:22:56.774478317 -0400 @@ -1924,7 +1924,7 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr, const char *buffer, size_t size) { - ssize_t ret = size; + ssize_t ret = -EINVAL; const char *err = "cannot allocate memory"; char *path = NULL; struct cache_sb *sb = NULL; @@ -1945,10 +1945,12 @@ if (IS_ERR(bdev)) { if (bdev == ERR_PTR(-EBUSY)) { bdev = lookup_bdev(strim(path)); - if (!IS_ERR(bdev) && bch_is_open(bdev)) + if (!IS_ERR(bdev) && bch_is_open(bdev)) { err = "device already registered"; - else + } else { err = "device busy"; + ret = -EBUSY; + } } goto err; } @@ -1976,6 +1978,9 @@ register_cache(sb, sb_page, bdev, ca); } + + ret = size; + out: if (sb_page) put_page(sb_page); @@ -1989,7 +1994,6 @@ err: if (attr != &ksysfs_register_quiet) pr_info("error opening %s: %s", path, err); - ret = -EINVAL; goto out; }