[PATCH] switch to use of ->key to get cfq_data by cfq_io_context

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index 63ed11f..42f990f 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -1212,7 +1212,7 @@
  */
 static void cfq_exit_single_io_context(struct cfq_io_context *cic)
 {
-	struct cfq_data *cfqd = cic->cfqq->cfqd;
+	struct cfq_data *cfqd = cic->key;
 	request_queue_t *q = cfqd->queue;
 
 	WARN_ON(!irqs_disabled());
@@ -1224,6 +1224,7 @@
 
 	cfq_put_queue(cic->cfqq);
 	cic->cfqq = NULL;
+	cic->key = NULL;
 	spin_unlock(q->queue_lock);
 }
 
@@ -1318,14 +1319,17 @@
 	cfq_clear_cfqq_prio_changed(cfqq);
 }
 
-static inline void changed_ioprio(struct cfq_queue *cfqq)
+static inline void changed_ioprio(struct cfq_io_context *cic)
 {
-	if (cfqq) {
-		struct cfq_data *cfqd = cfqq->cfqd;
-
+	struct cfq_data *cfqd = cic->key;
+	struct cfq_queue *cfqq;
+	if (cfqd) {
 		spin_lock(cfqd->queue->queue_lock);
-		cfq_mark_cfqq_prio_changed(cfqq);
-		cfq_init_prio_data(cfqq);
+		cfqq = cic->cfqq;
+		if (cfqq) {
+			cfq_mark_cfqq_prio_changed(cfqq);
+			cfq_init_prio_data(cfqq);
+		}
 		spin_unlock(cfqd->queue->queue_lock);
 	}
 }
@@ -1337,10 +1341,10 @@
 {
 	struct cfq_io_context *cic = ioc->cic;
 
-	changed_ioprio(cic->cfqq);
+	changed_ioprio(cic);
 
 	list_for_each_entry(cic, &cic->list, list)
-		changed_ioprio(cic->cfqq);
+		changed_ioprio(cic);
 
 	return 0;
 }
@@ -1429,10 +1433,10 @@
 		 * manually increment generic io_context usage count, it
 		 * cannot go away since we are already holding one ref to it
 		 */
-		ioc->cic = cic;
-		ioc->set_ioprio = cfq_ioc_set_ioprio;
 		cic->ioc = ioc;
 		cic->key = cfqd;
+		ioc->set_ioprio = cfq_ioc_set_ioprio;
+		ioc->cic = cic;
 	} else {
 		struct cfq_io_context *__cic;