[sheepdog] [PATCH] sheep: fix handling of too old epoch in check_request

Christoph Hellwig hch at infradead.org
Tue May 29 12:51:46 CEST 2012


On Tue, May 29, 2012 at 06:28:56PM +0800, Liu Yuan wrote:
> > Fix these issues by opencoding the action we want in check_request.
> 
> 
> I think we need revisit
> 
>         list_for_each_entry_safe(req, n, &pending_list, request_list) {
>                 list_del(&req->request_list);
> 
>                 if (check_request(req) < 0)
>                         continue;
>                 list_add_tail(&req->request_list, &sys->request_queue);
>         }
> 
> which brings nested request manipulation.  It seems to me that if we can
> remove this check_request(), the world will be less confusing.

I don't think there's a way around it - by the time we requeue requests
the cluster state may have changed and we need to to redo the checks.

In fact I suspect when resubmitting requests from the other lists we'll
need the same as well.

The real problem was calling ->done from outside the workqueue code,
which led to all these issues.



More information about the sheepdog mailing list