fscache: convert object to use workqueue instead of slow-work
Make fscache object state transition callbacks use workqueue instead of slow-work. New dedicated unbound CPU workqueue fscache_object_wq is created. get/put callbacks are renamed and modified to take @object and called directly from the enqueue wrapper and the work function. While at it, make all open coded instances of get/put to use fscache_get/put_object(). * Unbound workqueue is used. * work_busy() output is printed instead of slow-work flags in object debugging outputs. They mean basically the same thing bit-for-bit. * sysctl fscache.object_max_active added to control concurrency. The default value is nr_cpus clamped between 4 and WQ_UNBOUND_MAX_ACTIVE. * slow_work_sleep_till_thread_needed() is replaced with fscache private implementation fscache_object_sleep_till_congested() which waits on fscache_object_wq congestion. * debugfs support is dropped for now. Tracing API based debug facility is planned to be added. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: David Howells <dhowells@redhat.com>
This commit is contained in:
@@ -34,8 +34,8 @@ struct fscache_objlist_data {
|
||||
#define FSCACHE_OBJLIST_CONFIG_NOREADS 0x00000200 /* show objects without active reads */
|
||||
#define FSCACHE_OBJLIST_CONFIG_EVENTS 0x00000400 /* show objects with events */
|
||||
#define FSCACHE_OBJLIST_CONFIG_NOEVENTS 0x00000800 /* show objects without no events */
|
||||
#define FSCACHE_OBJLIST_CONFIG_WORK 0x00001000 /* show objects with slow work */
|
||||
#define FSCACHE_OBJLIST_CONFIG_NOWORK 0x00002000 /* show objects without slow work */
|
||||
#define FSCACHE_OBJLIST_CONFIG_WORK 0x00001000 /* show objects with work */
|
||||
#define FSCACHE_OBJLIST_CONFIG_NOWORK 0x00002000 /* show objects without work */
|
||||
|
||||
u8 buf[512]; /* key and aux data buffer */
|
||||
};
|
||||
@@ -231,12 +231,11 @@ static int fscache_objlist_show(struct seq_file *m, void *v)
|
||||
READS, NOREADS);
|
||||
FILTER(obj->events & obj->event_mask,
|
||||
EVENTS, NOEVENTS);
|
||||
FILTER(obj->work.flags & ~(1UL << SLOW_WORK_VERY_SLOW),
|
||||
WORK, NOWORK);
|
||||
FILTER(work_busy(&obj->work), WORK, NOWORK);
|
||||
}
|
||||
|
||||
seq_printf(m,
|
||||
"%8x %8x %s %5u %3u %3u %3u %2u %5u %2lx %2lx %1lx %1lx | ",
|
||||
"%8x %8x %s %5u %3u %3u %3u %2u %5u %2lx %2lx %1lx %1x | ",
|
||||
obj->debug_id,
|
||||
obj->parent ? obj->parent->debug_id : -1,
|
||||
fscache_object_states_short[obj->state],
|
||||
@@ -249,7 +248,7 @@ static int fscache_objlist_show(struct seq_file *m, void *v)
|
||||
obj->event_mask & FSCACHE_OBJECT_EVENTS_MASK,
|
||||
obj->events,
|
||||
obj->flags,
|
||||
obj->work.flags);
|
||||
work_busy(&obj->work));
|
||||
|
||||
no_cookie = true;
|
||||
keylen = auxlen = 0;
|
||||
|
Reference in New Issue
Block a user