diff options
| author | Chris Mason <chris.mason@oracle.com> | 2008-08-15 15:34:16 -0400 | 
|---|---|---|
| committer | Chris Mason <chris.mason@oracle.com> | 2008-09-25 11:04:06 -0400 | 
| commit | 5443be45f5cb57d02fd895a0bcaf7e7d9890b1df (patch) | |
| tree | 88666dedb8b6e3fa0f693d76a11a05cba29ec13e /fs | |
| parent | 777e6bd706ee40897545463871de5b456fbc46dc (diff) | |
| download | olio-linux-3.10-5443be45f5cb57d02fd895a0bcaf7e7d9890b1df.tar.xz olio-linux-3.10-5443be45f5cb57d02fd895a0bcaf7e7d9890b1df.zip  | |
Btrfs: Give all the worker threads descriptive names
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/btrfs/async-thread.c | 7 | ||||
| -rw-r--r-- | fs/btrfs/async-thread.h | 5 | ||||
| -rw-r--r-- | fs/btrfs/disk-io.c | 22 | 
3 files changed, 24 insertions, 10 deletions
diff --git a/fs/btrfs/async-thread.c b/fs/btrfs/async-thread.c index bc2980c433e..5f2f5a8c228 100644 --- a/fs/btrfs/async-thread.c +++ b/fs/btrfs/async-thread.c @@ -153,7 +153,7 @@ int btrfs_stop_workers(struct btrfs_workers *workers)  /*   * simple init on struct btrfs_workers   */ -void btrfs_init_workers(struct btrfs_workers *workers, int max) +void btrfs_init_workers(struct btrfs_workers *workers, char *name, int max)  {  	workers->num_workers = 0;  	INIT_LIST_HEAD(&workers->worker_list); @@ -161,6 +161,7 @@ void btrfs_init_workers(struct btrfs_workers *workers, int max)  	spin_lock_init(&workers->lock);  	workers->max_workers = max;  	workers->idle_thresh = 32; +	workers->name = name;  }  /* @@ -184,7 +185,9 @@ int btrfs_start_workers(struct btrfs_workers *workers, int num_workers)  		INIT_LIST_HEAD(&worker->worker_list);  		spin_lock_init(&worker->lock);  		atomic_set(&worker->num_pending, 0); -		worker->task = kthread_run(worker_loop, worker, "btrfs"); +		worker->task = kthread_run(worker_loop, worker, +					   "btrfs-%s-%d", workers->name, +					   workers->num_workers + i);  		worker->workers = workers;  		if (IS_ERR(worker->task)) {  			kfree(worker); diff --git a/fs/btrfs/async-thread.h b/fs/btrfs/async-thread.h index 3436ff89759..43e44d115dd 100644 --- a/fs/btrfs/async-thread.h +++ b/fs/btrfs/async-thread.h @@ -69,11 +69,14 @@ struct btrfs_workers {  	/* lock for finding the next worker thread to queue on */  	spinlock_t lock; + +	/* extra name for this worker */ +	char *name;  };  int btrfs_queue_worker(struct btrfs_workers *workers, struct btrfs_work *work);  int btrfs_start_workers(struct btrfs_workers *workers, int num_workers);  int btrfs_stop_workers(struct btrfs_workers *workers); -void btrfs_init_workers(struct btrfs_workers *workers, int max); +void btrfs_init_workers(struct btrfs_workers *workers, char *name, int max);  int btrfs_requeue_work(struct btrfs_work *work);  #endif diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 9601b13c7d7..1bf210dadef 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -492,11 +492,11 @@ static int __btree_submit_bio_hook(struct inode *inode, int rw, struct bio *bio,  	/*  	 * when we're called for a write, we're already in the async -	 * submission context.  Just jump ingo btrfs_map_bio +	 * submission context.  Just jump into btrfs_map_bio  	 */  	if (rw & (1 << BIO_RW)) {  		return btrfs_map_bio(BTRFS_I(inode)->root, rw, bio, -				     mirror_num, 0); +				     mirror_num, 1);  	}  	/* @@ -528,6 +528,12 @@ static int btree_writepage(struct page *page, struct writeback_control *wbc)  {  	struct extent_io_tree *tree;  	tree = &BTRFS_I(page->mapping->host)->io_tree; + +	if (current->flags & PF_MEMALLOC) { +		redirty_page_for_writepage(wbc, page); +		unlock_page(page); +		return 0; +	}  	return extent_write_full_page(tree, page, btree_get_extent, wbc);  } @@ -1363,8 +1369,9 @@ struct btrfs_root *open_ctree(struct super_block *sb,  	 * queue work function gets called at interrupt time, and so it  	 * cannot dynamically grow.  	 */ -	btrfs_init_workers(&fs_info->workers, fs_info->thread_pool_size); -	btrfs_init_workers(&fs_info->submit_workers, +	btrfs_init_workers(&fs_info->workers, "worker", +			   fs_info->thread_pool_size); +	btrfs_init_workers(&fs_info->submit_workers, "submit",  			   min_t(u64, fs_devices->num_devices,  			   fs_info->thread_pool_size)); @@ -1374,9 +1381,10 @@ struct btrfs_root *open_ctree(struct super_block *sb,  	 */  	fs_info->submit_workers.idle_thresh = 64; -	btrfs_init_workers(&fs_info->fixup_workers, 1); -	btrfs_init_workers(&fs_info->endio_workers, fs_info->thread_pool_size); -	btrfs_init_workers(&fs_info->endio_write_workers, +	btrfs_init_workers(&fs_info->fixup_workers, "fixup", 1); +	btrfs_init_workers(&fs_info->endio_workers, "endio", +			   fs_info->thread_pool_size); +	btrfs_init_workers(&fs_info->endio_write_workers, "endio-write",  			   fs_info->thread_pool_size);  	/*  |