提交 5443be45 编写于 作者: C Chris Mason

Btrfs: Give all the worker threads descriptive names

Signed-off-by: NChris Mason <chris.mason@oracle.com>
上级 777e6bd7
...@@ -153,7 +153,7 @@ int btrfs_stop_workers(struct btrfs_workers *workers) ...@@ -153,7 +153,7 @@ int btrfs_stop_workers(struct btrfs_workers *workers)
/* /*
* simple init on struct btrfs_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; workers->num_workers = 0;
INIT_LIST_HEAD(&workers->worker_list); INIT_LIST_HEAD(&workers->worker_list);
...@@ -161,6 +161,7 @@ void btrfs_init_workers(struct btrfs_workers *workers, int max) ...@@ -161,6 +161,7 @@ void btrfs_init_workers(struct btrfs_workers *workers, int max)
spin_lock_init(&workers->lock); spin_lock_init(&workers->lock);
workers->max_workers = max; workers->max_workers = max;
workers->idle_thresh = 32; workers->idle_thresh = 32;
workers->name = name;
} }
/* /*
...@@ -184,7 +185,9 @@ int btrfs_start_workers(struct btrfs_workers *workers, int num_workers) ...@@ -184,7 +185,9 @@ int btrfs_start_workers(struct btrfs_workers *workers, int num_workers)
INIT_LIST_HEAD(&worker->worker_list); INIT_LIST_HEAD(&worker->worker_list);
spin_lock_init(&worker->lock); spin_lock_init(&worker->lock);
atomic_set(&worker->num_pending, 0); 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; worker->workers = workers;
if (IS_ERR(worker->task)) { if (IS_ERR(worker->task)) {
kfree(worker); kfree(worker);
......
...@@ -69,11 +69,14 @@ struct btrfs_workers { ...@@ -69,11 +69,14 @@ struct btrfs_workers {
/* lock for finding the next worker thread to queue on */ /* lock for finding the next worker thread to queue on */
spinlock_t lock; spinlock_t lock;
/* extra name for this worker */
char *name;
}; };
int btrfs_queue_worker(struct btrfs_workers *workers, struct btrfs_work *work); 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_start_workers(struct btrfs_workers *workers, int num_workers);
int btrfs_stop_workers(struct btrfs_workers *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); int btrfs_requeue_work(struct btrfs_work *work);
#endif #endif
...@@ -492,11 +492,11 @@ static int __btree_submit_bio_hook(struct inode *inode, int rw, struct bio *bio, ...@@ -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 * 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)) { if (rw & (1 << BIO_RW)) {
return btrfs_map_bio(BTRFS_I(inode)->root, rw, bio, 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) ...@@ -528,6 +528,12 @@ static int btree_writepage(struct page *page, struct writeback_control *wbc)
{ {
struct extent_io_tree *tree; struct extent_io_tree *tree;
tree = &BTRFS_I(page->mapping->host)->io_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); return extent_write_full_page(tree, page, btree_get_extent, wbc);
} }
...@@ -1363,8 +1369,9 @@ struct btrfs_root *open_ctree(struct super_block *sb, ...@@ -1363,8 +1369,9 @@ struct btrfs_root *open_ctree(struct super_block *sb,
* queue work function gets called at interrupt time, and so it * queue work function gets called at interrupt time, and so it
* cannot dynamically grow. * cannot dynamically grow.
*/ */
btrfs_init_workers(&fs_info->workers, fs_info->thread_pool_size); btrfs_init_workers(&fs_info->workers, "worker",
btrfs_init_workers(&fs_info->submit_workers, fs_info->thread_pool_size);
btrfs_init_workers(&fs_info->submit_workers, "submit",
min_t(u64, fs_devices->num_devices, min_t(u64, fs_devices->num_devices,
fs_info->thread_pool_size)); fs_info->thread_pool_size));
...@@ -1374,9 +1381,10 @@ struct btrfs_root *open_ctree(struct super_block *sb, ...@@ -1374,9 +1381,10 @@ struct btrfs_root *open_ctree(struct super_block *sb,
*/ */
fs_info->submit_workers.idle_thresh = 64; fs_info->submit_workers.idle_thresh = 64;
btrfs_init_workers(&fs_info->fixup_workers, 1); btrfs_init_workers(&fs_info->fixup_workers, "fixup", 1);
btrfs_init_workers(&fs_info->endio_workers, fs_info->thread_pool_size); btrfs_init_workers(&fs_info->endio_workers, "endio",
btrfs_init_workers(&fs_info->endio_write_workers, fs_info->thread_pool_size);
btrfs_init_workers(&fs_info->endio_write_workers, "endio-write",
fs_info->thread_pool_size); fs_info->thread_pool_size);
/* /*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册