ad->hash = kmalloc(sizeof(struct list_head)*AS_HASH_ENTRIES,GFP_KERNEL); 
ad->hash = kmalloc_node(sizeof(struct list_head)*AS_HASH_ENTRIES, GFP_KERNEL, q->node); 
static int as_init_queue(request_queue_t *q, elevator_t *e){	struct as_data *ad;	int i;	if (!arq_pool)		return -ENOMEM;	ad = kmalloc(sizeof(*ad), GFP_KERNEL);	if (!ad)		return -ENOMEM;	memset(ad, 0, sizeof(*ad));	ad->q = q; /* Identify what queue the data belongs to */	ad->hash = kmalloc(sizeof(struct list_head)*AS_HASH_ENTRIES,GFP_KERNEL);	if (!ad->hash) {		kfree(ad);		return -ENOMEM;	}	ad->arq_pool = mempool_create(BLKDEV_MIN_RQ, mempool_alloc_slab, mempool_free_slab, arq_pool);	if (!ad->arq_pool) {		kfree(ad->hash);		kfree(ad);		return -ENOMEM;	}	/* anticipatory scheduling helpers */	ad->antic_timer.function = as_antic_timeout;	ad->antic_timer.data = (unsigned long)q;	init_timer(&ad->antic_timer);	INIT_WORK(&ad->antic_work, as_work_handler, q);	for (i = 0; i < AS_HASH_ENTRIES; i++)		INIT_LIST_HEAD(&ad->hash[i]);	INIT_LIST_HEAD(&ad->fifo_list[REQ_SYNC]);	INIT_LIST_HEAD(&ad->fifo_list[REQ_ASYNC]);	ad->sort_list[REQ_SYNC] = RB_ROOT;	ad->sort_list[REQ_ASYNC] = RB_ROOT;	ad->dispatch = &q->queue_head;	ad->fifo_expire[REQ_SYNC] = default_read_expire;	ad->fifo_expire[REQ_ASYNC] = default_write_expire;	ad->antic_expire = default_antic_expire;	ad->batch_expire[REQ_SYNC] = default_read_batch_expire;	ad->batch_expire[REQ_ASYNC] = default_write_batch_expire;	e->elevator_data = ad;	ad->current_batch_expires = jiffies + ad->batch_expire[REQ_SYNC];	ad->write_batch_count = ad->batch_expire[REQ_ASYNC] / 10;	if (ad->write_batch_count < 2)		ad->write_batch_count = 2;	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/1946089a109251655c5438d92c539bd2930e71ea/as-iosched.c/clean/drivers/block/as-iosched.c