Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1329dfc8 authored by Chris Mason's avatar Chris Mason
Browse files

Merge branch 'for-linus' into for-linus-3.12

parents 15c03dd4 1357272f
Loading
Loading
Loading
Loading
+19 −6
Original line number Diff line number Diff line
@@ -107,7 +107,8 @@ static void check_idle_worker(struct btrfs_worker_thread *worker)
		worker->idle = 1;

		/* the list may be empty if the worker is just starting */
		if (!list_empty(&worker->worker_list)) {
		if (!list_empty(&worker->worker_list) &&
		    !worker->workers->stopping) {
			list_move(&worker->worker_list,
				 &worker->workers->idle_list);
		}
@@ -127,7 +128,8 @@ static void check_busy_worker(struct btrfs_worker_thread *worker)
		spin_lock_irqsave(&worker->workers->lock, flags);
		worker->idle = 0;

		if (!list_empty(&worker->worker_list)) {
		if (!list_empty(&worker->worker_list) &&
		    !worker->workers->stopping) {
			list_move_tail(&worker->worker_list,
				      &worker->workers->worker_list);
		}
@@ -412,6 +414,7 @@ void btrfs_stop_workers(struct btrfs_workers *workers)
	int can_stop;

	spin_lock_irq(&workers->lock);
	workers->stopping = 1;
	list_splice_init(&workers->idle_list, &workers->worker_list);
	while (!list_empty(&workers->worker_list)) {
		cur = workers->worker_list.next;
@@ -455,6 +458,7 @@ void btrfs_init_workers(struct btrfs_workers *workers, char *name, int max,
	workers->ordered = 0;
	workers->atomic_start_pending = 0;
	workers->atomic_worker_start = async_helper;
	workers->stopping = 0;
}

/*
@@ -480,15 +484,19 @@ static int __btrfs_start_workers(struct btrfs_workers *workers)
	atomic_set(&worker->num_pending, 0);
	atomic_set(&worker->refs, 1);
	worker->workers = workers;
	worker->task = kthread_run(worker_loop, worker,
	worker->task = kthread_create(worker_loop, worker,
				      "btrfs-%s-%d", workers->name,
				      workers->num_workers + 1);
	if (IS_ERR(worker->task)) {
		ret = PTR_ERR(worker->task);
		kfree(worker);
		goto fail;
	}

	spin_lock_irq(&workers->lock);
	if (workers->stopping) {
		spin_unlock_irq(&workers->lock);
		goto fail_kthread;
	}
	list_add_tail(&worker->worker_list, &workers->idle_list);
	worker->idle = 1;
	workers->num_workers++;
@@ -496,8 +504,13 @@ static int __btrfs_start_workers(struct btrfs_workers *workers)
	WARN_ON(workers->num_workers_starting < 0);
	spin_unlock_irq(&workers->lock);

	wake_up_process(worker->task);
	return 0;

fail_kthread:
	kthread_stop(worker->task);
fail:
	kfree(worker);
	spin_lock_irq(&workers->lock);
	workers->num_workers_starting--;
	spin_unlock_irq(&workers->lock);
+2 −0
Original line number Diff line number Diff line
@@ -107,6 +107,8 @@ struct btrfs_workers {

	/* extra name for this worker, used for current->name */
	char *name;

	int stopping;
};

void btrfs_queue_worker(struct btrfs_workers *workers, struct btrfs_work *work);
+1 −4
Original line number Diff line number Diff line
@@ -535,10 +535,7 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info,
	list_add(&tgt_device->dev_alloc_list, &fs_info->fs_devices->alloc_list);

	btrfs_rm_dev_replace_srcdev(fs_info, src_device);
	if (src_device->bdev) {
		/* zero out the old super */
		btrfs_scratch_superblock(src_device);
	}

	/*
	 * this is again a consistent state where no dev_replace procedure
	 * is running, the target device is part of the filesystem, the
+1 −1
Original line number Diff line number Diff line
@@ -1614,7 +1614,7 @@ static noinline u64 find_lock_delalloc_range(struct inode *inode,
		*start = delalloc_start;
		*end = delalloc_end;
		free_extent_state(cached_state);
		return found;
		return 0;
	}

	/*
+2 −5
Original line number Diff line number Diff line
@@ -1838,11 +1838,8 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans,
	assert_qgroups_uptodate(trans);
	update_super_roots(root);

	if (!root->fs_info->log_root_recovering) {
	btrfs_set_super_log_root(root->fs_info->super_copy, 0);
	btrfs_set_super_log_root_level(root->fs_info->super_copy, 0);
	}

	memcpy(root->fs_info->super_for_commit, root->fs_info->super_copy,
	       sizeof(*root->fs_info->super_copy));

Loading