Linux NFSv4 courteous server resolves share reservation conflicts with courtesy clients asynchronously and returning NFS4ERR_DELAY to the client. Signed-off-by: Dai Ngo <dai.ngo@xxxxxxxxxx> --- nfs4.0/nfs4lib.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/nfs4.0/nfs4lib.py b/nfs4.0/nfs4lib.py index 934def3b7333..60c833478ec3 100644 --- a/nfs4.0/nfs4lib.py +++ b/nfs4.0/nfs4lib.py @@ -723,8 +723,17 @@ class NFS4Client(rpc.RPCClient): def open_confirm(self, owner, path=None, access=OPEN4_SHARE_ACCESS_READ, deny=OPEN4_SHARE_DENY_WRITE): - res = self.open_file(owner, path, access, deny) - check_result(res, "Opening file %s" % _getname(owner, path)) + while 1: + res = self.open_file(owner, path, access, deny) + cnt = 0 + try: + check_result(res, "Opening file %s" % _getname(owner, path)) + break + except BadCompoundRes: + if res.status != NFS4ERR_DELAY: raise + cnt += 1 + if cnt < 5: + time.sleep(2) return self.confirm(owner, res) ## def xxxopen_claim_prev(self, owner, fh, seqid=None, -- 2.27.0