Messages in this thread Patch in this message | | | Subject | Re: task blocked in sync_buffer from ext3_free_branches | From | Roland Dreier <> | Date | Tue, 29 Jan 2008 16:49:54 -0800 |
| |
Actually this appears to be the bug that Jens fixed with this patch, and with that patch my system seems fine as well:
diff --git a/block/as-iosched.c b/block/as-iosched.c index b201d16..9603684 100644 --- a/block/as-iosched.c +++ b/block/as-iosched.c @@ -1275,9 +1275,13 @@ static void as_merged_requests(struct request_queue *q, struct request *req, * Don't copy here but swap, because when anext is * removed below, it must contain the unused context */ - double_spin_lock(&rioc->lock, &nioc->lock, rioc < nioc); - swap_io_context(&rioc, &nioc); - double_spin_unlock(&rioc->lock, &nioc->lock, rioc < nioc); + if (rioc != nioc) { + double_spin_lock(&rioc->lock, &nioc->lock, + rioc < nioc); + swap_io_context(&rioc, &nioc); + double_spin_unlock(&rioc->lock, &nioc->lock, + rioc < nioc); + } } }
| |