Merge tag 'v3.10.71' into update
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / block / cfq-iosched.c
index c981097dd6342e168f0bbded98d7971a19611223..69111c5c352ce7f874aed1a769197563d6d96011 100644 (file)
@@ -3575,6 +3575,11 @@ retry:
 
        blkcg = bio_blkcg(bio);
        cfqg = cfq_lookup_create_cfqg(cfqd, blkcg);
+       if (!cfqg) {
+               cfqq = &cfqd->oom_cfqq;
+               goto out;
+       }
+
        cfqq = cic_to_cfqq(cic, is_sync);
 
        /*
@@ -3611,7 +3616,7 @@ retry:
                } else
                        cfqq = &cfqd->oom_cfqq;
        }
-
+out:
        if (new_cfqq)
                kmem_cache_free(cfq_pool, new_cfqq);
 
@@ -3641,12 +3646,17 @@ static struct cfq_queue *
 cfq_get_queue(struct cfq_data *cfqd, bool is_sync, struct cfq_io_cq *cic,
              struct bio *bio, gfp_t gfp_mask)
 {
-       const int ioprio_class = IOPRIO_PRIO_CLASS(cic->ioprio);
-       const int ioprio = IOPRIO_PRIO_DATA(cic->ioprio);
+       int ioprio_class = IOPRIO_PRIO_CLASS(cic->ioprio);
+       int ioprio = IOPRIO_PRIO_DATA(cic->ioprio);
        struct cfq_queue **async_cfqq = NULL;
        struct cfq_queue *cfqq = NULL;
 
        if (!is_sync) {
+               if (!ioprio_valid(cic->ioprio)) {
+                       struct task_struct *tsk = current;
+                       ioprio = task_nice_ioprio(tsk);
+                       ioprio_class = task_nice_ioclass(tsk);
+               }
                async_cfqq = cfq_async_queue_prio(cfqd, ioprio_class, ioprio);
                cfqq = *async_cfqq;
        }