projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
dm io: reject unsupported DISCARD requests with EOPNOTSUPP
[firefly-linux-kernel-4.4.55.git]
/
block
/
blk-core.c
diff --git
a/block/blk-core.c
b/block/blk-core.c
index d5745b5833c9d76527809c41b4718c3df70407df..5a750b18172e052915f3556fa41560c92ba75ea2 100644
(file)
--- a/
block/blk-core.c
+++ b/
block/blk-core.c
@@
-645,10
+645,12
@@
struct request_queue *blk_alloc_queue_node(gfp_t gfp_mask, int node_id)
__set_bit(QUEUE_FLAG_BYPASS, &q->queue_flags);
if (blkcg_init_queue(q))
__set_bit(QUEUE_FLAG_BYPASS, &q->queue_flags);
if (blkcg_init_queue(q))
- goto fail_
id
;
+ goto fail_
bdi
;
return q;
return q;
+fail_bdi:
+ bdi_destroy(&q->backing_dev_info);
fail_id:
ida_simple_remove(&blk_queue_ida, q->id);
fail_q:
fail_id:
ida_simple_remove(&blk_queue_ida, q->id);
fail_q:
@@
-739,9
+741,17
@@
blk_init_allocated_queue(struct request_queue *q, request_fn_proc *rfn,
q->sg_reserved_size = INT_MAX;
q->sg_reserved_size = INT_MAX;
+ /* Protect q->elevator from elevator_change */
+ mutex_lock(&q->sysfs_lock);
+
/* init elevator */
/* init elevator */
- if (elevator_init(q, NULL))
+ if (elevator_init(q, NULL)) {
+ mutex_unlock(&q->sysfs_lock);
return NULL;
return NULL;
+ }
+
+ mutex_unlock(&q->sysfs_lock);
+
return q;
}
EXPORT_SYMBOL(blk_init_allocated_queue);
return q;
}
EXPORT_SYMBOL(blk_init_allocated_queue);
@@
-2229,6
+2239,7
@@
void blk_start_request(struct request *req)
if (unlikely(blk_bidi_rq(req)))
req->next_rq->resid_len = blk_rq_bytes(req->next_rq);
if (unlikely(blk_bidi_rq(req)))
req->next_rq->resid_len = blk_rq_bytes(req->next_rq);
+ BUG_ON(test_bit(REQ_ATOM_COMPLETE, &req->atomic_flags));
blk_add_timer(req);
}
EXPORT_SYMBOL(blk_start_request);
blk_add_timer(req);
}
EXPORT_SYMBOL(blk_start_request);
@@
-2288,7
+2299,7
@@
bool blk_update_request(struct request *req, int error, unsigned int nr_bytes)
if (!req->bio)
return false;
if (!req->bio)
return false;
- trace_block_rq_complete(req->q, req);
+ trace_block_rq_complete(req->q, req
, nr_bytes
);
/*
* For fs requests, rq is just carrier of independent bio's
/*
* For fs requests, rq is just carrier of independent bio's