diff options
author | Lai Jiangshan <laijs@cn.fujitsu.com> | 2008-11-14 10:44:59 +0100 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2008-11-18 15:08:56 +0100 |
commit | 98ba4031ab2adc8b394295e68aa4c8fe9d5060db (patch) | |
tree | 893ac2f6e4efddf79c192e4bae512e3a3f864baa /kernel/relay.c | |
parent | Release old elevator on change elevator (diff) | |
download | linux-98ba4031ab2adc8b394295e68aa4c8fe9d5060db.tar.xz linux-98ba4031ab2adc8b394295e68aa4c8fe9d5060db.zip |
relay: fix cpu offline problem
relay_open() will close allocated buffers when failed.
but if cpu offlined, some buffer will not be closed.
this patch fixed it.
and did cleanup for relay_reset() too.
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'kernel/relay.c')
-rw-r--r-- | kernel/relay.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/kernel/relay.c b/kernel/relay.c index 8d13a7855c08..32b0befdcb6a 100644 --- a/kernel/relay.c +++ b/kernel/relay.c @@ -400,7 +400,7 @@ void relay_reset(struct rchan *chan) } mutex_lock(&relay_channels_mutex); - for_each_online_cpu(i) + for_each_possible_cpu(i) if (chan->buf[i]) __relay_reset(chan->buf[i], 0); mutex_unlock(&relay_channels_mutex); @@ -611,10 +611,9 @@ struct rchan *relay_open(const char *base_filename, return chan; free_bufs: - for_each_online_cpu(i) { - if (!chan->buf[i]) - break; - relay_close_buf(chan->buf[i]); + for_each_possible_cpu(i) { + if (chan->buf[i]) + relay_close_buf(chan->buf[i]); } kref_put(&chan->kref, relay_destroy_channel); |