#endif /* CONFIG_SMP */
+static inline
+struct workqueue_struct *cfs_cpt_bind_workqueue(const char *wq_name,
+ struct cfs_cpt_table *tbl,
+ int flags, int cpt, int nthrs)
+{
+ cpumask_var_t *mask = cfs_cpt_cpumask(tbl, cpt);
+ struct workqueue_attrs attrs = { };
+ struct workqueue_struct *wq;
+
+ wq = alloc_workqueue(wq_name, WQ_UNBOUND | flags, nthrs);
+ if (!wq)
+ return ERR_PTR(-ENOMEM);
+
+ if (mask && alloc_cpumask_var(&attrs.cpumask, GFP_KERNEL)) {
+ cpumask_copy(attrs.cpumask, *mask);
+ cpus_read_lock();
+ cfs_apply_workqueue_attrs(wq, &attrs);
+ cpus_read_unlock();
+ free_cpumask_var(attrs.cpumask);
+ }
+
+ return wq;
+}
+
/*
* allocate per-cpu-partition data, returned value is an array of pointers,
* variable can be indexed by CPU ID.
#include <linux/cpu.h>
#include <linux/sched.h>
-#include <libcfs/libcfs_cpu.h>
#include <libcfs/libcfs.h>
+#include <libcfs/libcfs_cpu.h>
/** virtual processing unit */
struct cfs_cpu_partition {
[], [enable_pinger="yes"])
AC_MSG_RESULT([$enable_pinger])
AS_IF([test "x$enable_pinger" != xno],
- [AC_DEFINE(CONFIG_LUSTRE_PINGER, 1,[Use the Pinger])])
+ [AC_DEFINE(CONFIG_LUSTRE_FS_PINGER, 1,[Use the Pinger])])
]) # LC_CONFIG_PINGER
#
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;
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);
- }
+ cfs_cpt_bind_workqueue("ll-readahead-wq", cfs_cpt_tab,
+ 0, CFS_CPT_ANY,
+ sbi->ll_ra_info.ra_async_max_active);
+ if (IS_ERR(sbi->ll_ra_info.ll_readahead_wq))
+ GOTO(out_pcc, rc = PTR_ERR(sbi->ll_ra_info.ll_readahead_wq));
/* initialize ll_cache data */
sbi->ll_cache = cl_cache_init(lru_page_max);
*/
int obd_zombie_impexp_init(void)
{
- zombie_wq = alloc_workqueue("obd_zombid", 0, 0);
- if (!zombie_wq)
- return -ENOMEM;
+ zombie_wq = cfs_cpt_bind_workqueue("obd_zombid", cfs_cpt_tab,
+ 0, CFS_CPT_ANY,
+ cfs_cpt_number(cfs_cpt_tab));
- return 0;
+ return IS_ERR(zombie_wq) ? PTR_ERR(zombie_wq) : 0;
}
/**
static ssize_t pinger_show(struct kobject *kobj, struct attribute *attr,
char *buf)
{
-#ifdef CONFIG_LUSTRE_PINGER
+#ifdef CONFIG_LUSTRE_FS_PINGER
const char *state = "on";
#else
const char *state = "off";
int ptlrpc_reconnect_import(struct obd_import *imp)
{
-#ifdef CONFIG_LUSTRE_PINGER
+#ifdef CONFIG_LUSTRE_FS_PINGER
long timeout_jiffies = cfs_time_seconds(obd_timeout);
int rc;
static void ptlrpc_update_next_ping(struct obd_import *imp, int soon)
{
-#ifdef CONFIG_LUSTRE_PINGER
+#ifdef CONFIG_LUSTRE_FS_PINGER
time64_t time = soon ? PING_INTERVAL_SHORT : PING_INTERVAL;
if (imp->imp_state == LUSTRE_IMP_DISCON) {
time = min(time, dtime);
}
imp->imp_next_ping = ktime_get_seconds() + time;
-#endif /* CONFIG_LUSTRE_PINGER */
+#endif /* CONFIG_LUSTRE_FS_PINGER */
}
void ptlrpc_ping_import_soon(struct obd_import *imp)
int ptlrpc_start_pinger(void)
{
-#ifdef CONFIG_LUSTRE_PINGER
- struct workqueue_attrs attrs = { };
- cpumask_var_t *mask;
-
+#ifdef CONFIG_LUSTRE_FS_PINGER
if (pinger_wq)
return -EALREADY;
- pinger_wq = alloc_workqueue("ptlrpc_pinger", WQ_UNBOUND, 1);
- if (!pinger_wq) {
+ pinger_wq = cfs_cpt_bind_workqueue("ptlrpc_pinger", cfs_cpt_tab,
+ 0, CFS_CPT_ANY, 1);
+ if (IS_ERR(pinger_wq)) {
CERROR("cannot start pinger workqueue\n");
- return -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(pinger_wq, &attrs);
- cpus_read_unlock();
- free_cpumask_var(attrs.cpumask);
+ return PTR_ERR(pinger_wq);
}
queue_delayed_work(pinger_wq, &ping_work, 0);
int ptlrpc_stop_pinger(void)
{
-#ifdef CONFIG_LUSTRE_PINGER
+#ifdef CONFIG_LUSTRE_FS_PINGER
if (!pinger_wq)
return -EALREADY;
void ptlrpc_pinger_wake_up(void)
{
-#ifdef CONFIG_LUSTRE_PINGER
+#ifdef CONFIG_LUSTRE_FS_PINGER
mod_delayed_work(pinger_wq, &ping_work, 0);
#endif
}