Commit 28f4197e5d4707311febeec8a0eb97cb5fd93c97

Authored by Jens Axboe
1 parent 713b686494

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)