J. Bruce Fields: > On Mon, Nov 28, 2011 at 10:33:42AM +0800, Mi Jinlong wrote: >> Hi Bruce, >> >> Sorry for so late replying you. >> >> Mi Jinlong : >>> J. Bruce Fields: >>>> On Thu, Nov 17, 2011 at 10:16:22AM +0800, Mi Jinlong wrote: >>>>> Signed-off-by: Mi Jinlong <mijinlong@xxxxxxxxxxxxxx> >>>>> --- >>>>> nfs4.1/server41tests/st_open.py | 38 +++++++++++++++++++++++++++++++++++++- >>>>> 1 files changed, 37 insertions(+), 1 deletions(-) >>>>> >>>>> diff --git a/nfs4.1/server41tests/st_open.py b/nfs4.1/server41tests/st_open.py >>>>> index bd995a5..87b58b3 100644 >>>>> --- a/nfs4.1/server41tests/st_open.py >>>>> +++ b/nfs4.1/server41tests/st_open.py >>>>> @@ -1,6 +1,6 @@ >>>>> from st_create_session import create_session >>>>> from nfs4_const import * >>>>> -from environment import check, checklist, fail, create_file, open_file >>>>> +from environment import check, checklist, fail, create_file, open_file, close_file >>>>> from nfs4_type import open_owner4, openflag4, createhow4, open_claim4 >>>>> from nfs4_type import creatverfattr, fattr4 >>>>> import nfs4_ops as op >>>>> @@ -200,3 +200,39 @@ def testEXCLUSIVE4AtNameAttribute(t, env): >>>>> res = create_file(sess1, env.testname(t), mode=EXCLUSIVE4_1, >>>>> verifier = "Justtest") >>>>> check(res, NFS4ERR_EXIST) >>>>> + >>>>> +def testOPENClaimFH(t, env): >>>>> + """OPEN file with claim_type is CLAIM_FH >>>>> + >>>>> + FLAGS: open all >>>>> + CODE: OPEN7 >>>>> + """ >>>>> + sess1 = env.c1.new_client_session(env.testname(t)) >>>>> + res = create_file(sess1, env.testname(t)) >>>>> + check(res) >>>>> + >>>>> + fh = res.resarray[-1].object >>>>> + stateid = res.resarray[-2].stateid >>>>> + res = close_file(sess1, fh, stateid=stateid) >>>>> + check(res) >>>>> + >>>>> + claim = open_claim4(CLAIM_FH) >>>>> + how = openflag4(OPEN4_NOCREATE) >>>>> + oowner = open_owner4(0, "My Open Owner 2") >>>>> + open_op = op.open(0, OPEN4_SHARE_ACCESS_BOTH, OPEN4_SHARE_DENY_NONE, >>>>> + oowner, how, claim) >>>>> + res = sess1.compound([op.putfh(fh), open_op]) >>>>> + check(res) >>>> You could just stop here. But I suppose I don't see a problem with >>>> doing some IO to the file too just to make sure the open is usable. >>> Yes, that's right. > > OK. > >>>>> + >>>>> + stateid = res.resarray[-1].stateid >>>>> + stateid.seqid = 0 >>>> Why are you modifying the seqid? >> At any date writing or reading, seqid should be zero. >> And, NFS client do as it. So, we set seqid = 0 here. > > Ugh, I guess. Seems a little ugly that every test-writer has to > manually set seqid to 0 before doing IO, but OK. > >>>>> + data = "write test data" >>>>> + res = sess1.compound([op.putfh(fh), op.write(stateid, 5, FILE_SYNC4, data)]) >>>>> + check(res) >>>>> + res = sess1.compound([op.putfh(fh), op.read(stateid, 0, 1000)]) >>>>> + check(res) >>>>> + if not res.resarray[-1].eof: >>>>> + fail("EOF not set on read") >>>>> + desired = "\0"*5 + data >>>> Why the five nulls? I don't understand this code.... >> Because we write data at offset 5 above, so there are five nulls exist. >> >> + res = sess1.compound([op.putfh(fh), op.write(stateid, 5, FILE_SYNC4, data)]) > > Oops, I must be blind, thanks for setting me straight! > > Could you resend this? OK, will resend. > > (Also, is there anything else you're waiting for me to do?) Thanks, no. thanks, Mi Jinlong -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html