-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
cfq-iosched: Fixed boot warning with BLK_CGROUP=y and CFQ_GROUP_IOSCH…
…ED=n Hi Jens, Few days back Ingo noticed a CFQ boot time warning. This patch fixes it. The issue here is that with CFQ_GROUP_IOSCHED=n, CFQ should not really be making blkio stat related calls. > Hm, it's still not entirely fixed, as of 2.6.35-rc2-00131-g7908a9e. With > some > configs i get bad spinlock warnings during bootup: > > [ 28.968013] initcall net_olddevs_init+0x0/0x82 returned 0 after 93750 > usecs > [ 28.972003] calling b44_init+0x0/0x55 @ 1 > [ 28.976009] bus: 'pci': add driver b44 > [ 28.976374] sda: > [ 28.978157] BUG: spinlock bad magic on CPU#1, async/0/117 > [ 28.980000] lock: 7e1c5bbc, .magic: 00000000, .owner: <none>/-1, +.owner_cpu: 0 > [ 28.980000] Pid: 117, comm: async/0 Not tainted +2.6.35-rc2-tip-01092-g010e7ef-dirty #8183 > [ 28.980000] Call Trace: > [ 28.980000] [<41ba6d55>] ? printk+0x20/0x24 > [ 28.980000] [<4134b7b7>] spin_bug+0x7c/0x87 > [ 28.980000] [<4134b853>] do_raw_spin_lock+0x1e/0x123 > [ 28.980000] [<41ba92ca>] ? _raw_spin_lock_irqsave+0x12/0x20 > [ 28.980000] [<41ba92d2>] _raw_spin_lock_irqsave+0x1a/0x20 > [ 28.980000] [<4133476f>] blkiocg_update_io_add_stats+0x25/0xfb > [ 28.980000] [<41335dae>] ? cfq_prio_tree_add+0xb1/0xc1 > [ 28.980000] [<41337bc7>] cfq_insert_request+0x8c/0x425 Signed-off-by: Vivek Goyal <vgoyal@redhat.com> Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
- Loading branch information
Vivek Goyal
authored and
Jens Axboe
committed
Jun 18, 2010
1 parent
c10b61f
commit e98ef89
Showing
2 changed files
with
142 additions
and
27 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
#ifndef _CFQ_H | ||
#define _CFQ_H | ||
#include "blk-cgroup.h" | ||
|
||
#ifdef CONFIG_CFQ_GROUP_IOSCHED | ||
static inline void cfq_blkiocg_update_io_add_stats(struct blkio_group *blkg, | ||
struct blkio_group *curr_blkg, bool direction, bool sync) | ||
{ | ||
blkiocg_update_io_add_stats(blkg, curr_blkg, direction, sync); | ||
} | ||
|
||
static inline void cfq_blkiocg_update_dequeue_stats(struct blkio_group *blkg, | ||
unsigned long dequeue) | ||
{ | ||
blkiocg_update_dequeue_stats(blkg, dequeue); | ||
} | ||
|
||
static inline void cfq_blkiocg_update_timeslice_used(struct blkio_group *blkg, | ||
unsigned long time) | ||
{ | ||
blkiocg_update_timeslice_used(blkg, time); | ||
} | ||
|
||
static inline void cfq_blkiocg_set_start_empty_time(struct blkio_group *blkg) | ||
{ | ||
blkiocg_set_start_empty_time(blkg); | ||
} | ||
|
||
static inline void cfq_blkiocg_update_io_remove_stats(struct blkio_group *blkg, | ||
bool direction, bool sync) | ||
{ | ||
blkiocg_update_io_remove_stats(blkg, direction, sync); | ||
} | ||
|
||
static inline void cfq_blkiocg_update_io_merged_stats(struct blkio_group *blkg, | ||
bool direction, bool sync) | ||
{ | ||
blkiocg_update_io_merged_stats(blkg, direction, sync); | ||
} | ||
|
||
static inline void cfq_blkiocg_update_idle_time_stats(struct blkio_group *blkg) | ||
{ | ||
blkiocg_update_idle_time_stats(blkg); | ||
} | ||
|
||
static inline void | ||
cfq_blkiocg_update_avg_queue_size_stats(struct blkio_group *blkg) | ||
{ | ||
blkiocg_update_avg_queue_size_stats(blkg); | ||
} | ||
|
||
static inline void | ||
cfq_blkiocg_update_set_idle_time_stats(struct blkio_group *blkg) | ||
{ | ||
blkiocg_update_set_idle_time_stats(blkg); | ||
} | ||
|
||
static inline void cfq_blkiocg_update_dispatch_stats(struct blkio_group *blkg, | ||
uint64_t bytes, bool direction, bool sync) | ||
{ | ||
blkiocg_update_dispatch_stats(blkg, bytes, direction, sync); | ||
} | ||
|
||
static inline void cfq_blkiocg_update_completion_stats(struct blkio_group *blkg, uint64_t start_time, uint64_t io_start_time, bool direction, bool sync) | ||
{ | ||
cfq_blkiocg_update_completion_stats(blkg, start_time, io_start_time, | ||
direction, sync); | ||
} | ||
|
||
static inline void cfq_blkiocg_add_blkio_group(struct blkio_cgroup *blkcg, | ||
struct blkio_group *blkg, void *key, dev_t dev) { | ||
blkiocg_add_blkio_group(blkcg, blkg, key, dev); | ||
} | ||
|
||
static inline int cfq_blkiocg_del_blkio_group(struct blkio_group *blkg) | ||
{ | ||
return blkiocg_del_blkio_group(blkg); | ||
} | ||
|
||
#else /* CFQ_GROUP_IOSCHED */ | ||
static inline void cfq_blkiocg_update_io_add_stats(struct blkio_group *blkg, | ||
struct blkio_group *curr_blkg, bool direction, bool sync) {} | ||
|
||
static inline void cfq_blkiocg_update_dequeue_stats(struct blkio_group *blkg, | ||
unsigned long dequeue) {} | ||
|
||
static inline void cfq_blkiocg_update_timeslice_used(struct blkio_group *blkg, | ||
unsigned long time) {} | ||
static inline void cfq_blkiocg_set_start_empty_time(struct blkio_group *blkg) {} | ||
static inline void cfq_blkiocg_update_io_remove_stats(struct blkio_group *blkg, | ||
bool direction, bool sync) {} | ||
static inline void cfq_blkiocg_update_io_merged_stats(struct blkio_group *blkg, | ||
bool direction, bool sync) {} | ||
static inline void cfq_blkiocg_update_idle_time_stats(struct blkio_group *blkg) | ||
{ | ||
} | ||
static inline void | ||
cfq_blkiocg_update_avg_queue_size_stats(struct blkio_group *blkg) {} | ||
|
||
static inline void | ||
cfq_blkiocg_update_set_idle_time_stats(struct blkio_group *blkg) {} | ||
|
||
static inline void cfq_blkiocg_update_dispatch_stats(struct blkio_group *blkg, | ||
uint64_t bytes, bool direction, bool sync) {} | ||
static inline void cfq_blkiocg_update_completion_stats(struct blkio_group *blkg, uint64_t start_time, uint64_t io_start_time, bool direction, bool sync) {} | ||
|
||
static inline void cfq_blkiocg_add_blkio_group(struct blkio_cgroup *blkcg, | ||
struct blkio_group *blkg, void *key, dev_t dev) {} | ||
static inline int cfq_blkiocg_del_blkio_group(struct blkio_group *blkg) | ||
{ | ||
return 0; | ||
} | ||
|
||
#endif /* CFQ_GROUP_IOSCHED */ | ||
#endif |