diff options
author | David S. Miller <davem@davemloft.net> | 2008-04-18 02:56:30 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-04-18 02:56:30 -0400 |
commit | 1e42198609d73ed1a9adcba2af275c24c2678420 (patch) | |
tree | 32fd4d9073bfc0f3909af8f9fb4bcff38951d01a /block | |
parent | 794eb6bf20ebf992c040ea831cd3a9c64b0c1f7a (diff) | |
parent | 4b119e21d0c66c22e8ca03df05d9de623d0eb50f (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'block')
-rw-r--r-- | block/Kconfig | 2 | ||||
-rw-r--r-- | block/cfq-iosched.c | 9 |
2 files changed, 7 insertions, 4 deletions
diff --git a/block/Kconfig b/block/Kconfig index 9bda7bc80307..7db9a411649d 100644 --- a/block/Kconfig +++ b/block/Kconfig | |||
@@ -38,7 +38,7 @@ config BLK_DEV_IO_TRACE | |||
38 | on a block device queue. For more information (and the user space | 38 | on a block device queue. For more information (and the user space |
39 | support tools needed), fetch the blktrace app from: | 39 | support tools needed), fetch the blktrace app from: |
40 | 40 | ||
41 | git://brick.kernel.dk/data/git/blktrace.git | 41 | git://git.kernel.dk/blktrace.git |
42 | 42 | ||
43 | config LSF | 43 | config LSF |
44 | bool "Support for Large Single Files" | 44 | bool "Support for Large Single Files" |
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index f26da2bfcc15..f4e1006c253d 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c | |||
@@ -1214,6 +1214,8 @@ static void cfq_exit_cfqq(struct cfq_data *cfqd, struct cfq_queue *cfqq) | |||
1214 | static void __cfq_exit_single_io_context(struct cfq_data *cfqd, | 1214 | static void __cfq_exit_single_io_context(struct cfq_data *cfqd, |
1215 | struct cfq_io_context *cic) | 1215 | struct cfq_io_context *cic) |
1216 | { | 1216 | { |
1217 | struct io_context *ioc = cic->ioc; | ||
1218 | |||
1217 | list_del_init(&cic->queue_list); | 1219 | list_del_init(&cic->queue_list); |
1218 | 1220 | ||
1219 | /* | 1221 | /* |
@@ -1223,6 +1225,9 @@ static void __cfq_exit_single_io_context(struct cfq_data *cfqd, | |||
1223 | cic->dead_key = (unsigned long) cic->key; | 1225 | cic->dead_key = (unsigned long) cic->key; |
1224 | cic->key = NULL; | 1226 | cic->key = NULL; |
1225 | 1227 | ||
1228 | if (ioc->ioc_data == cic) | ||
1229 | rcu_assign_pointer(ioc->ioc_data, NULL); | ||
1230 | |||
1226 | if (cic->cfqq[ASYNC]) { | 1231 | if (cic->cfqq[ASYNC]) { |
1227 | cfq_exit_cfqq(cfqd, cic->cfqq[ASYNC]); | 1232 | cfq_exit_cfqq(cfqd, cic->cfqq[ASYNC]); |
1228 | cic->cfqq[ASYNC] = NULL; | 1233 | cic->cfqq[ASYNC] = NULL; |
@@ -1255,7 +1260,6 @@ static void cfq_exit_single_io_context(struct io_context *ioc, | |||
1255 | */ | 1260 | */ |
1256 | static void cfq_exit_io_context(struct io_context *ioc) | 1261 | static void cfq_exit_io_context(struct io_context *ioc) |
1257 | { | 1262 | { |
1258 | rcu_assign_pointer(ioc->ioc_data, NULL); | ||
1259 | call_for_each_cic(ioc, cfq_exit_single_io_context); | 1263 | call_for_each_cic(ioc, cfq_exit_single_io_context); |
1260 | } | 1264 | } |
1261 | 1265 | ||
@@ -1478,8 +1482,7 @@ cfq_drop_dead_cic(struct cfq_data *cfqd, struct io_context *ioc, | |||
1478 | 1482 | ||
1479 | spin_lock_irqsave(&ioc->lock, flags); | 1483 | spin_lock_irqsave(&ioc->lock, flags); |
1480 | 1484 | ||
1481 | if (ioc->ioc_data == cic) | 1485 | BUG_ON(ioc->ioc_data == cic); |
1482 | rcu_assign_pointer(ioc->ioc_data, NULL); | ||
1483 | 1486 | ||
1484 | radix_tree_delete(&ioc->radix_root, (unsigned long) cfqd); | 1487 | radix_tree_delete(&ioc->radix_root, (unsigned long) cfqd); |
1485 | hlist_del_rcu(&cic->cic_list); | 1488 | hlist_del_rcu(&cic->cic_list); |