Add a specific workqueue to do dispatch. Later patches will use it to do
per-cpu request queue dispatch.
Signed-off-by: Shaohua Li <shli@xxxxxxxxxxxx>
---
drivers/md/md.c | 14 ++++++++++++++
drivers/md/md.h | 1 +
2 files changed, 15 insertions(+)
Index: linux/drivers/md/md.c
===================================================================
--- linux.orig/drivers/md/md.c 2012-05-24 15:42:56.892251685 +0800
+++ linux/drivers/md/md.c 2012-05-24 15:44:55.618759412 +0800
@@ -71,6 +71,7 @@ static void md_print_devices(void);
static DECLARE_WAIT_QUEUE_HEAD(resync_wait);
static struct workqueue_struct *md_wq;
static struct workqueue_struct *md_misc_wq;
+static struct workqueue_struct *md_run_wq;
#define MD_BUG(x...) { printk("md: bug in file %s, line %d\n", __FILE__, __LINE__); md_print_devices(); }
@@ -8446,6 +8447,12 @@ static void md_geninit(void)
proc_create("mdstat", S_IRUGO, NULL, &md_seq_fops);
}
+int md_schedule_work_on(int cpu, struct work_struct *work)
+{
+ return queue_work_on(cpu, md_run_wq, work);
+}
+EXPORT_SYMBOL(md_schedule_work_on);
+
static int __init md_init(void)
{
int ret = -ENOMEM;
@@ -8458,6 +8465,10 @@ static int __init md_init(void)
if (!md_misc_wq)
goto err_misc_wq;
+ md_run_wq = alloc_workqueue("md_run", WQ_MEM_RECLAIM, 0);
+ if (!md_run_wq)
+ goto err_run_wq;
+
if ((ret = register_blkdev(MD_MAJOR, "md")) < 0)
goto err_md;
@@ -8479,6 +8490,8 @@ static int __init md_init(void)
err_mdp:
unregister_blkdev(MD_MAJOR, "md");
err_md:
+ destroy_workqueue(md_run_wq);
+err_run_wq:
destroy_workqueue(md_misc_wq);
err_misc_wq:
destroy_workqueue(md_wq);
@@ -8571,6 +8584,7 @@ static __exit void md_exit(void)
export_array(mddev);
mddev->hold_active = 0;
}
+ destroy_workqueue(md_run_wq);
destroy_workqueue(md_misc_wq);
destroy_workqueue(md_wq);
}
Index: linux/drivers/md/md.h
===================================================================
--- linux.orig/drivers/md/md.h 2012-05-24 15:42:56.896251635 +0800
+++ linux/drivers/md/md.h 2012-05-24 15:44:55.622759274 +0800
@@ -616,6 +616,7 @@ extern int md_integrity_register(struct
extern void md_integrity_add_rdev(struct md_rdev *rdev, struct mddev *mddev);
extern int strict_strtoul_scaled(const char *cp, unsigned long *res, int scale);
extern void restore_bitmap_write_access(struct file *file);
+extern int md_schedule_work_on(int cpu, struct work_struct *work);
extern void mddev_init(struct mddev *mddev);
extern int md_run(struct mddev *mddev);
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[ATA RAID]
[Linux SCSI Target Infrastructure]
[Managing RAID on Linux]
[Linux IDE]
[Linux SCSI]
[Linux Hams]
[Device-Mapper]
[Kernel]
[Linux Books]
[Linux Admin]
[Linux Net]
[GFS]
[RPM]
[git]
[Photos]
[Yosemite Photos]
[Yosemite News]
[AMD 64]
[Linux Networking]