btrfs: open code btrfs_dev_replace_clear_lock_blocking
[sfrench/cifs-2.6.git] / fs / btrfs / dev-replace.c
index dec01970d8c581cb1efe3a8fad59a075542ffa9e..a79e8d67f76814bf6ddbbfd65b6acfdcac718baa 100644 (file)
@@ -409,10 +409,10 @@ int btrfs_dev_replace_start(struct btrfs_fs_info *fs_info,
        struct btrfs_device *tgt_device = NULL;
        struct btrfs_device *src_device = NULL;
 
-       ret = btrfs_find_device_by_devspec(fs_info, srcdevid,
-                                           srcdev_name, &src_device);
-       if (ret)
-               return ret;
+       src_device = btrfs_find_device_by_devspec(fs_info, srcdevid,
+                                                 srcdev_name);
+       if (IS_ERR(src_device))
+               return PTR_ERR(src_device);
 
        ret = btrfs_init_dev_replace_tgtdev(fs_info, tgtdev_name,
                                            src_device, &tgt_device);
@@ -440,6 +440,7 @@ int btrfs_dev_replace_start(struct btrfs_fs_info *fs_info,
                break;
        case BTRFS_IOCTL_DEV_REPLACE_STATE_STARTED:
        case BTRFS_IOCTL_DEV_REPLACE_STATE_SUSPENDED:
+               ASSERT(0);
                ret = BTRFS_IOCTL_DEV_REPLACE_RESULT_ALREADY_STARTED;
                goto leave;
        }
@@ -482,6 +483,10 @@ int btrfs_dev_replace_start(struct btrfs_fs_info *fs_info,
        if (IS_ERR(trans)) {
                ret = PTR_ERR(trans);
                btrfs_dev_replace_write_lock(dev_replace);
+               dev_replace->replace_state =
+                       BTRFS_IOCTL_DEV_REPLACE_STATE_NEVER_STARTED;
+               dev_replace->srcdev = NULL;
+               dev_replace->tgtdev = NULL;
                goto leave;
        }
 
@@ -503,8 +508,6 @@ int btrfs_dev_replace_start(struct btrfs_fs_info *fs_info,
        return ret;
 
 leave:
-       dev_replace->srcdev = NULL;
-       dev_replace->tgtdev = NULL;
        btrfs_dev_replace_write_unlock(dev_replace);
        btrfs_destroy_dev_replace_tgtdev(tgt_device);
        return ret;
@@ -961,13 +964,10 @@ int btrfs_dev_replace_is_ongoing(struct btrfs_dev_replace *dev_replace)
 void btrfs_dev_replace_read_lock(struct btrfs_dev_replace *dev_replace)
 {
        read_lock(&dev_replace->lock);
-       atomic_inc(&dev_replace->read_locks);
 }
 
 void btrfs_dev_replace_read_unlock(struct btrfs_dev_replace *dev_replace)
 {
-       ASSERT(atomic_read(&dev_replace->read_locks) > 0);
-       atomic_dec(&dev_replace->read_locks);
        read_unlock(&dev_replace->lock);
 }
 
@@ -994,24 +994,10 @@ void btrfs_dev_replace_set_lock_blocking(
                                        struct btrfs_dev_replace *dev_replace)
 {
        /* only set blocking for read lock */
-       ASSERT(atomic_read(&dev_replace->read_locks) > 0);
        atomic_inc(&dev_replace->blocking_readers);
        read_unlock(&dev_replace->lock);
 }
 
-/* acquire read lock and dec blocking cnt */
-void btrfs_dev_replace_clear_lock_blocking(
-                                       struct btrfs_dev_replace *dev_replace)
-{
-       /* only set blocking for read lock */
-       ASSERT(atomic_read(&dev_replace->read_locks) > 0);
-       ASSERT(atomic_read(&dev_replace->blocking_readers) > 0);
-       read_lock(&dev_replace->lock);
-       /* Barrier implied by atomic_dec_and_test */
-       if (atomic_dec_and_test(&dev_replace->blocking_readers))
-               cond_wake_up_nomb(&dev_replace->read_lock_wq);
-}
-
 void btrfs_bio_counter_inc_noblocked(struct btrfs_fs_info *fs_info)
 {
        percpu_counter_inc(&fs_info->bio_counter);