Messages in this thread | | | Date | Fri, 14 Nov 2008 10:41:55 +0100 | From | Jens Axboe <> | Subject | Re: [PATCH] relay: fix cpu offline problem |
| |
On Fri, Nov 14 2008, Lai Jiangshan wrote: > 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.
Good catch, that definitely looks like a bug. Applied.
> > Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com> > --- > diff --git a/kernel/relay.c b/kernel/relay.c > index 8d13a78..32b0bef 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); >
-- Jens Axboe
| |