[sheepdog] [PATCH 7/7] sheep: fix SD_RES_OLD_NODE_VER handling in check_request_epoch

Liu Yuan namei.unix at gmail.com
Fri Jun 1 09:28:08 CEST 2012


On 06/01/2012 03:15 PM, Liu Yuan wrote:

> On 05/31/2012 05:48 PM, Christoph Hellwig wrote:
> 
>>  		/* ask gateway to retry. */
>>  		req->rp.result = SD_RES_OLD_NODE_VER;
>>  		req->rp.epoch = sys->epoch;
>> -		req->work.done(&req->work);
>> +		req_done(req);
>>  		return -1;
>>  	} else if (after(req->rq.epoch, sys->epoch)) {
>>  		eprintf("new node version %u, %u, %x\n",
> 
> 
> So for the gateway happens to be this local node, we response with
> SD_RES_OLD_NODE_VER to upper layer? I don't think upper layer should
> handle this error code, we need to call work.done() to queue the request
> again and fix double deletion problem.
> 


By a second thought, it seems that this case won't happen at all. Now
check req epoch is always for IO requests, which are from peers not itself.

Thanks,
Yuan



More information about the sheepdog mailing list