Re: questions about open state recovery and open owner seq_id management

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 5/20/16, 17:11, "linux-nfs-owner@xxxxxxxxxxxxxxx on behalf of Thomas Haynes" <linux-nfs-owner@xxxxxxxxxxxxxxx on behalf of loghyr@xxxxxxxxxxxxxxx> wrote:

>
>> On May 20, 2016, at 1:38 PM, Olga Kornievskaia <aglo@xxxxxxxxx> wrote:
>> 
>> Hi folks,
>> 
>> I’m seeing a client behavior that I can’t explain the reason behind
>> (i.e. spec) so want to ask for help.
>> 
>> Question #1: Should a reclaim of open state handle BAD_SEQID the same
>> way the normal open handles BAD_SEQID (which is: it just retries). I
>> can see that during recovery we might not want the recovery to be
>> trying forever and that’s why we fail? I don’t see anything in the
>> spec that talk about this…
>> 
>> Question #2: Incrementing seqid of open owner. I see that when LOCK
>> receives an error BAD_STATEID/ADMIN_REVOKED, sequence isn’t
>> incremented and (recovery) OPEN is sent with the same seqid. The code
>> explicitly sets seqid unconfirmed. Again, I don’t know where to look
>> in the spec for something like this. What happens is that server
>> replies back with BAD_SEQID.
>
>RFC 5661
>
>It doesn’t say it explicitly, but you only bump the seqid on success.
>
>3.3.12.  stateid4
>
>  The starting value of the "seqid" field is
>   undefined.  The server is required to increment the "seqid" field by
>   one at each transition of the stateid. 
>
>
>8.2.1.  Stateid Types
>
>   o  Stateids may represent sets of byte-range locks.
>
>      All locks held on a particular file by a particular owner and
>      gotten under the aegis of a particular open file are associated
>      with a single stateid with the seqid being incremented whenever
>      LOCK and LOCKU operations affect that set of locks.
>
>8.2.2.  Stateid Structure
>
>   When such a set of locks is first created, the server returns a
>   stateid with seqid value of one.  On subsequent operations that
>   modify the set of locks, the server is required to increment the
>   "seqid" field by one whenever it returns a stateid for the same
>   state-owner/file/type combination and there is some change in the set
>   of locks actually designated.  In this case, the server will return a
>   stateid with an "other" field the same as previously used for that
>   state-owner/file/type combination, with an incremented "seqid" field.
>   This pattern continues until the seqid is incremented past
>   NFS4_UINT32_MAX, and one (not zero) is the next seqid value.
>
>More of the same in
>
>9.4.  Stateid Seqid Values and Byte-Range Locks
>
>12.5.3 has this to say about layout stateids, while acknowledging they
>are different from normal stateids:
>
>  The
>   correct "seqid" is defined as the highest "seqid" value from
>   responses of fully processed LAYOUTGET or LAYOUTRETURN operations or
>   arguments of a fully processed CB_LAYOUTRECALL operation.
>
>I take “fully processed” to mean successful.
>
>
>> 
>> So normally, when an open fails with BAD_SEQID the client retries but
>> combine it with a LOCK that failed with BAD_STATEID. Then it leads to
>> the application failing with “bad file descriptor” because after
>> receiving an error for the lock and trying to do open recovery, the
>> code doesn’t increment seqid and open fails with BAD_SEQID and we
>> don’t retry the open. So now we don’t have a file descriptor and we
>> fail the lock.
>
>
>Look back at the sections above, they stated that the seqid is
>only changed if there is a change in the set of locks designated. The
>error does not change the set of locks.
>
>Your server vendor is having the same issues as you are in deciphering
>the rules on seqid.
>

Oh, sorry. Did you mean NFSv4.1, Olga? If so, please disregard my earlier reply.

Trond


��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux