Commit 28f4197e5d4707311febeec8a0eb97cb5fd93c97
1 parent
713b686494
Exists in
master
and in
7 other branches
block: disable preemption before using sched_clock()
Commit 9195291e5f05e01d67f9a09c756b8aca8f009089 added calls to sched_clock() from preemptible code. sched_clock() is both the wrong interface AND cannot be called without preempt disabled. Apply a temporary fix to get rid of the warnings, a real patch is in the works. Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Showing 1 changed file with 9 additions and 0 deletions Side-by-side Diff
include/linux/blkdev.h
... | ... | @@ -1211,14 +1211,23 @@ |
1211 | 1211 | int kblockd_schedule_work(struct request_queue *q, struct work_struct *work); |
1212 | 1212 | |
1213 | 1213 | #ifdef CONFIG_BLK_CGROUP |
1214 | +/* | |
1215 | + * This should not be using sched_clock(). A real patch is in progress | |
1216 | + * to fix this up, until that is in place we need to disable preemption | |
1217 | + * around sched_clock() in this function and set_io_start_time_ns(). | |
1218 | + */ | |
1214 | 1219 | static inline void set_start_time_ns(struct request *req) |
1215 | 1220 | { |
1221 | + preempt_disable(); | |
1216 | 1222 | req->start_time_ns = sched_clock(); |
1223 | + preempt_enable(); | |
1217 | 1224 | } |
1218 | 1225 | |
1219 | 1226 | static inline void set_io_start_time_ns(struct request *req) |
1220 | 1227 | { |
1228 | + preempt_disable(); | |
1221 | 1229 | req->io_start_time_ns = sched_clock(); |
1230 | + preempt_enable(); | |
1222 | 1231 | } |
1223 | 1232 | |
1224 | 1233 | static inline uint64_t rq_start_time_ns(struct request *req) |