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

Re: [linux-lvm] clvmd-corosync should check lksb.sb_status instead of return code ?



Hi Chrissie,

  You are right. It should be returned in errno. Also, it seems errno
should positive as lksb.sb_status too.

  I modified the patch a little bit further.

  Any comments ?

2009/2/25 Chrissie Caulfield <ccaulfie redhat com>:
> Xinwei Hu wrote:
>> Hi all,
>>
>>   In clvmd-corosync, lock_resource calls dlm_ls_lock_wait with flags
>> set to LKF_NOQUEUE.
>>   When LKF_NOQUEUE is set, the return code of dlm_ls_lock_wait is
>> always 0, while the actual errno is in lksb.sb_status.
>>
>>   This causes problem when using vgchange -aey or something like.
>>
>>   I attached a patch to try to fix this issue.
>>
>>   Please help to review. Thanks.
>
> Hi
>
> You are correct, the functions do need to check the LKSB. Your patch
> isn't quite right I don't think though - the lksb status should be
> returned in errno as shown below:
>
> --
>
> Chrissie
>
> _______________________________________________
> linux-lvm mailing list
> linux-lvm redhat com
> https://www.redhat.com/mailman/listinfo/linux-lvm
> read the LVM HOW-TO at http://tldp.org/HOWTO/LVM-HOWTO/
>
Index: clvmd-corosync.c
===================================================================
RCS file: /cvs/lvm2/LVM2/daemons/clvmd/clvmd-corosync.c,v
retrieving revision 1.5
diff -u -p -r1.5 clvmd-corosync.c
--- clvmd-corosync.c	11 Feb 2009 10:13:20 -0000	1.5
+++ clvmd-corosync.c	25 Feb 2009 13:28:34 -0000
@@ -478,6 +478,12 @@ static int _lock_resource(const char *re
 		DEBUGLOG("dlm_ls_lock returned %d\n", errno);
 		return err;
 	}
+	if (lksb.sb_status != 0)
+	{
+		DEBUGLOG("dlm_ls_lock returns lksb.sb_status %d\n", lksb.sb_status);
+		errno = lksb.sb_status;
+		return -1;
+	}
 
 	DEBUGLOG("lock_resource returning %d, lock_id=%x\n", err, lksb.sb_lkid);
 
@@ -504,6 +510,13 @@ static int _unlock_resource(const char *
 		DEBUGLOG("Unlock returned %d\n", err);
 		return err;
 	}
+	if (lksb.sb_status != 0)
+	{
+		DEBUGLOG("dlm_ls_unlock_wait returns lksb.sb_status: %d\n", lksb.sb_status);
+		errno = lksb.sb_status;
+		return -1;
+	}   
+
 
 	return 0;
 }

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