On 05/04/2012 02:53 AM, MORITA Kazutaka wrote: > The force operations can be processed before we set up > current_vnode_info. For example, when we start the cluster, sheep > daemons can receive SD_OP_READ_VDIS requests from other nodes before > setting current_vnode_info. So the force operations shouldn't access > req->vnodes in their process_work() and process_main(). > > Signed-off-by: MORITA Kazutaka <morita.kazutaka at gmail.com> > --- > sheep/sdnet.c | 9 ++++++++- > 1 files changed, 8 insertions(+), 1 deletions(-) > > diff --git a/sheep/sdnet.c b/sheep/sdnet.c > index 1e001af..f59b1ff 100644 > --- a/sheep/sdnet.c > +++ b/sheep/sdnet.c > @@ -297,7 +297,14 @@ static void queue_request(struct request *req) > break; > } > > - req->vnodes = get_vnode_info(); > + /* > + * force operations shouldn't access req->vnodes in their > + * process_work() and process_main() because they can be > + * called before we set up current_vnode_info > + */ > + if (!is_force_op(req->op)) > + req->vnodes = get_vnode_info(); > + > if (is_io_op(req->op)) { > req->work.fn = do_io_request; > req->work.done = io_op_done; Makes sense. Reviewed-by: Liu Yuan <tailai.ly at taobao.com> |