[RFC] NLM server can not process retransmited request correctly

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

 



Hi Trond et al:

When i test the nfslock of NFSv3 at RHEL5.3GA (kernel: 2.6.18-128.el5),
NLM server can not process client's retransmited request correctly.

Steps of my test likes followed:
           client                          server
             |                                |
      step1  |           open file            |
      open   |------------------------------->|
             |              ok                |
             |<-------------------------------|
             |                                | step2
             |                             -> | <-  service nfslock stop
             |                                |
      step3  | WL1: write lock request{0, 0}  |
      fcntl  |------------------------------->|
             |                                |
             |    WL1_re: WL1 retransmit      |
             |------------------------------->|
             |                                |
             |       WL1.reply   ENOLCK       |
             |<-------------------------------|
             |                                | step4
             |                             -> | <- service nfslock start
             |                                |
      step5  | WL2: write lock request{0, 0}  |
      fcntl  |------------------------------->|
             |                                |
             |        WL1_re.reply OK         |
             |<-------------------------------|
             |       WL2.reply EBLOCKD        |
             |<-------------------------------|
             V                                V

   Client can not acquire for write lock any more after step4.

Reason:
   Server reply ENOLCK for WL1 to client because nfslock service stoped,
   but it can not distinguish retransmited request with normal request, 
   so it reply OK for WL1_re to client after nfslock service start. But 
   fcntl client called will return when it receive WL1.reply, WL1_re.reply
   will be droped at Client. So that, the lock between client and server
   is different. When client send a some lock request to server again,
   it will get a EBLOCKD error from Server.

Suggestion:
   1. I suggest add an DRC(Duplicate request cache) for NLM.
      Because, as mentioned above, when a client send a lock request to 
      server through NLM. If server isn't reply in time, a retransmit 
      request will be send from client. 

      Maybe the retransmit request will get different reply from server
      as the lock request, the lock between client and server will different.
      So that, the DRC for NLM is necessary.

      What's your opinion ?

   2. If everybody thinks it's necessary to add it, here is some ideas in
      my opinion and some patchs implement at 2.6.32-rc5:

      a. Because the implement of NLM's DRC is same as NFS's DRC almost,
         many codes will be repeated.
         I think, could we implement a common DRC for sunrpc?
         NLM and NFS will use this DRC.

         Do you have some good ideas ?

      b. A brief description of the patch at the reply:

         [0001-Add-a-common-DRC-for-sunrpc.patch]
         Add a common DRC for sunrpc, NLM and NFS implement their DRC using it.

         [0002-Add-DRC-for-NLM-using-sunrpc-s-common-DRC.patch]
         [0003-Modify-nfs-s-DRC-to-use-sunrpc-s-common-DRC.patch]

         Particular description will be implement at corresponding patch.

Waiting for your reply ...... 

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

[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