Whamcloud - gitweb
LU-13258 llite: bind readahead workqueue to CPT set
[fs/lustre-release.git] / lustre / llite / llite_lib.c
index 9c4983b..5a56084 100644 (file)
@@ -36,6 +36,7 @@
 
 #define DEBUG_SUBSYSTEM S_LLITE
 
+#include <linux/cpu.h>
 #include <linux/module.h>
 #include <linux/random.h>
 #include <linux/statfs.h>
@@ -49,6 +50,9 @@
 #include <linux/uidgid.h>
 #include <linux/security.h>
 
+#ifndef HAVE_CPUS_READ_LOCK
+#include <libcfs/linux/linux-cpu.h>
+#endif
 #include <uapi/linux/lustre/lustre_ioctl.h>
 #ifdef HAVE_UAPI_LINUX_MOUNT_H
 #include <uapi/linux/mount.h>
@@ -83,6 +87,8 @@ static inline unsigned int ll_get_ra_async_max_active(void)
 
 static struct ll_sb_info *ll_init_sbi(void)
 {
+       struct workqueue_attrs attrs = { };
+       cpumask_var_t *mask;
        struct ll_sb_info *sbi = NULL;
        unsigned long pages;
        unsigned long lru_page_max;
@@ -111,13 +117,23 @@ static struct ll_sb_info *ll_init_sbi(void)
         pages = si.totalram - si.totalhigh;
        lru_page_max = pages / 2;
 
-       sbi->ll_ra_info.ra_async_max_active = 0;
+       sbi->ll_ra_info.ra_async_max_active = ll_get_ra_async_max_active();
        sbi->ll_ra_info.ll_readahead_wq =
                alloc_workqueue("ll-readahead-wq", WQ_UNBOUND,
                                sbi->ll_ra_info.ra_async_max_active);
        if (!sbi->ll_ra_info.ll_readahead_wq)
                GOTO(out_pcc, rc = -ENOMEM);
 
+       mask = cfs_cpt_cpumask(cfs_cpt_tab, CFS_CPT_ANY);
+       if (mask && alloc_cpumask_var(&attrs.cpumask, GFP_KERNEL)) {
+               cpumask_copy(attrs.cpumask, *mask);
+               cpus_read_lock();
+               cfs_apply_workqueue_attrs(sbi->ll_ra_info.ll_readahead_wq,
+                                         &attrs);
+               cpus_read_unlock();
+               free_cpumask_var(attrs.cpumask);
+       }
+
        /* initialize ll_cache data */
        sbi->ll_cache = cl_cache_init(lru_page_max);
        if (sbi->ll_cache == NULL)
@@ -129,7 +145,6 @@ static struct ll_sb_info *ll_init_sbi(void)
                                sbi->ll_ra_info.ra_max_pages_per_file;
        sbi->ll_ra_info.ra_max_pages = sbi->ll_ra_info.ra_max_pages_per_file;
        sbi->ll_ra_info.ra_max_read_ahead_whole_pages = -1;
-       sbi->ll_ra_info.ra_async_max_active = ll_get_ra_async_max_active();
        atomic_set(&sbi->ll_ra_info.ra_async_inflight, 0);
 
         sbi->ll_flags |= LL_SBI_VERBOSE;