History

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.

Jens Axboe committed 16 years ago

Commit 28f41971 parent 713b6861 file · +9 −0Browse files

Unified · Split

include/linux/blkdev.h+9−0
@@ -1211,14 +1211,23 @@ struct work_struct; · 1210 unmodified lines
1211int kblockd_schedule_work(struct request_queue *q, struct work_struct *work);1211int kblockd_schedule_work(struct request_queue *q, struct work_struct *work);
1212 1212
1213#ifdef CONFIG_BLK_CGROUP1213#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 */
1214static inline void set_start_time_ns(struct request *req)1219static inline void set_start_time_ns(struct request *req)
1215{1220{
1221 preempt_disable();
1216 req->start_time_ns = sched_clock();1222 req->start_time_ns = sched_clock();
1223 preempt_enable();
1217}1224}
1218 1225
1219static inline void set_io_start_time_ns(struct request *req)1226static inline void set_io_start_time_ns(struct request *req)
1220{1227{
1228 preempt_disable();
1221 req->io_start_time_ns = sched_clock();1229 req->io_start_time_ns = sched_clock();
1230 preempt_enable();
1222}1231}
1223 1232
1224static inline uint64_t rq_start_time_ns(struct request *req)1233static inline uint64_t rq_start_time_ns(struct request *req)