Re: [PATCH] NLM: Set address family before calling nlm_host_rebooted()

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

 



On Thu, Oct 23, 2008 at 05:32:54PM -0400, Chuck Lever wrote:
> On Oct 23, 2008, at Oct 23, 2008, 4:58 PM, J. Bruce Fields wrote:
>> On Thu, Oct 23, 2008 at 12:50:35AM -0400, Chuck Lever wrote:
>>> The nlm_host_rebooted() function uses nlm_cmp_addr() to find an
>>> nsm_handle that matches the rebooted peer.  In order for this to  
>>> work,
>>> the passed-in address must have a proper address family.
>>>
>>> Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx>
>>> ---
>>>
>>
>> Thanks!
>>
>>> Bruce - since we dropped the remaining NSM IPv6 patches for 2.6.28, I
>>> think we need to add this one to make sure lock recovery continues to
>>> work.
>>
>> So this is a regression?  (If so, when was it introduced?)
>
> I think this was introduced when AF_INET6 support was added to  
> nlm_cmp_addr() in commit 781b61a6.  Before that commit, nlm_cmp_addr()  
> didn't care about the address family; it compared only the  
> sin_addr.s_addr field for equality.
>
> This is a regression in the sense that it probably broke lock recovery  
> in .28, but I don't think this is a problem in any released kernel.

OK, thanks, I've queed this up for 2.6.28, as below.

>
>> Have you tested lock recovery?  I'll see if I can get some sort of  
>> lock
>> recovery test running as part of my default regression tests this
>> weekend....  It seems to be something that hasn't been watched closely
>> enough.
>
> Sankar has a lock recovery test.  He didn't report a problem with lock  
> recovery with the full set of patches I had for 2.6.28.  He never tested 
> what is actually in .28 now, which is missing those NSM patches.
>
> I'm preparing my latest patches for him to try out soon.

(Though confirmation that it's been tested would certainly be
reassuring--all it takes is grabbing a lock, rebooting a server,
verifying that the lock is reclaimed, and also doing the same with a
client and making sure locks are dropped.)

--b.

commit d7dc61d0a70371b1c6557ea8ffbc60fff94c8168
Author: Chuck Lever <chuck.lever@xxxxxxxxxx>
Date:   Thu Oct 23 00:50:35 2008 -0400

    NLM: Set address family before calling nlm_host_rebooted()
    
    The nlm_host_rebooted() function uses nlm_cmp_addr() to find an
    nsm_handle that matches the rebooted peer.  In order for this to work,
    the passed-in address must have a proper address family.
    
    This fixes a post-2.6.28 regression introduced by commit 781b61a6, which
    added AF_INET6 support to nlm_cmp_addr().  Before that commit,
    nlm_cmp_addr() didn't care about the address family; it compared only
    the sin_addr.s_addr field for equality.
    
    Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx>
    Signed-off-by: J. Bruce Fields <bfields@xxxxxxxxxxxxxx>

diff --git a/fs/lockd/svc4proc.c b/fs/lockd/svc4proc.c
index 014f6ce..4dfdcbc 100644
--- a/fs/lockd/svc4proc.c
+++ b/fs/lockd/svc4proc.c
@@ -434,6 +434,7 @@ nlm4svc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,
 	 * reclaim all locks we hold on this server.
 	 */
 	memset(&saddr, 0, sizeof(saddr));
+	saddr.sin_family = AF_INET;
 	saddr.sin_addr.s_addr = argp->addr;
 	nlm_host_rebooted(&saddr, argp->mon, argp->len, argp->state);
 
diff --git a/fs/lockd/svcproc.c b/fs/lockd/svcproc.c
index 548b0bb..3ca89e2 100644
--- a/fs/lockd/svcproc.c
+++ b/fs/lockd/svcproc.c
@@ -466,6 +466,7 @@ nlmsvc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,
 	 * reclaim all locks we hold on this server.
 	 */
 	memset(&saddr, 0, sizeof(saddr));
+	saddr.sin_family = AF_INET;
 	saddr.sin_addr.s_addr = argp->addr;
 	nlm_host_rebooted(&saddr, argp->mon, argp->len, argp->state);
 
--
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