[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