diff options
Diffstat (limited to 'block')
-rw-r--r-- | block/blk-core.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/block/blk-core.c b/block/blk-core.c index e6c05a97ee2b..636702575118 100644 --- a/block/blk-core.c +++ b/block/blk-core.c | |||
@@ -872,13 +872,15 @@ retry: | |||
872 | spin_unlock_irq(q->queue_lock); | 872 | spin_unlock_irq(q->queue_lock); |
873 | 873 | ||
874 | /* create icq if missing */ | 874 | /* create icq if missing */ |
875 | if (unlikely(et->icq_cache && !icq)) | 875 | if ((rw_flags & REQ_ELVPRIV) && unlikely(et->icq_cache && !icq)) { |
876 | icq = ioc_create_icq(q, gfp_mask); | 876 | icq = ioc_create_icq(q, gfp_mask); |
877 | if (!icq) | ||
878 | goto fail_icq; | ||
879 | } | ||
877 | 880 | ||
878 | /* rqs are guaranteed to have icq on elv_set_request() if requested */ | 881 | rq = blk_alloc_request(q, icq, rw_flags, gfp_mask); |
879 | if (likely(!et->icq_cache || icq)) | ||
880 | rq = blk_alloc_request(q, icq, rw_flags, gfp_mask); | ||
881 | 882 | ||
883 | fail_icq: | ||
882 | if (unlikely(!rq)) { | 884 | if (unlikely(!rq)) { |
883 | /* | 885 | /* |
884 | * Allocation failed presumably due to memory. Undo anything | 886 | * Allocation failed presumably due to memory. Undo anything |