···3940 if (atomic_long_dec_and_test(&ioc->refcount)) {41 rcu_read_lock();42- if (ioc->aic && ioc->aic->dtor)43- ioc->aic->dtor(ioc->aic);44 cfq_dtor(ioc);45 rcu_read_unlock();46···74 task_unlock(task);7576 if (atomic_dec_and_test(&ioc->nr_tasks)) {77- if (ioc->aic && ioc->aic->exit)78- ioc->aic->exit(ioc->aic);79 cfq_exit(ioc);8081 }···93 ret->ioprio = 0;94 ret->last_waited = jiffies; /* doesn't matter... */95 ret->nr_batch_requests = 0; /* because this is 0 */96- ret->aic = NULL;97 INIT_RADIX_TREE(&ret->radix_root, GFP_ATOMIC | __GFP_HIGH);98 INIT_HLIST_HEAD(&ret->cic_list);99 ret->ioc_data = NULL;
···3940 if (atomic_long_dec_and_test(&ioc->refcount)) {41 rcu_read_lock();0042 cfq_dtor(ioc);43 rcu_read_unlock();44···76 task_unlock(task);7778 if (atomic_dec_and_test(&ioc->nr_tasks)) {0079 cfq_exit(ioc);8081 }···97 ret->ioprio = 0;98 ret->last_waited = jiffies; /* doesn't matter... */99 ret->nr_batch_requests = 0; /* because this is 0 */0100 INIT_RADIX_TREE(&ret->radix_root, GFP_ATOMIC | __GFP_HIGH);101 INIT_HLIST_HEAD(&ret->cic_list);102 ret->ioc_data = NULL;
-27
include/linux/iocontext.h
···4#include <linux/radix-tree.h>5#include <linux/rcupdate.h>67-/*8- * This is the per-process anticipatory I/O scheduler state.9- */10-struct as_io_context {11- spinlock_t lock;12-13- void (*dtor)(struct as_io_context *aic); /* destructor */14- void (*exit)(struct as_io_context *aic); /* called on task exit */15-16- unsigned long state;17- atomic_t nr_queued; /* queued reads & sync writes */18- atomic_t nr_dispatched; /* number of requests gone to the drivers */19-20- /* IO History tracking */21- /* Thinktime */22- unsigned long last_end_request;23- unsigned long ttime_total;24- unsigned long ttime_samples;25- unsigned long ttime_mean;26- /* Layout pattern */27- unsigned int seek_samples;28- sector_t last_request_pos;29- u64 seek_total;30- sector_t seek_mean;31-};32-33struct cfq_queue;34struct cfq_io_context {35 void *key;···52 unsigned long last_waited; /* Time last woken after wait for request */53 int nr_batch_requests; /* Number of requests left in the batch */5455- struct as_io_context *aic;56 struct radix_tree_root radix_root;57 struct hlist_head cic_list;58 void *ioc_data;
···4#include <linux/radix-tree.h>5#include <linux/rcupdate.h>6000000000000000000000000007struct cfq_queue;8struct cfq_io_context {9 void *key;···78 unsigned long last_waited; /* Time last woken after wait for request */79 int nr_batch_requests; /* Number of requests left in the batch */80081 struct radix_tree_root radix_root;82 struct hlist_head cic_list;83 void *ioc_data;