2010-11-18 04:20:18

by Milton Miller

[permalink] [raw]
Subject: ocfs2: char is not always signed

Commit 1c66b360fe262 (Change some lock status member in ocfs2_lock_res
to char.) states that these fields need to be signed due to comparision
to -1, but only changed the type from unsigned char to char. However, it
is a compiler option if char is a signed or unsigned type. Change these
fields to signed char so the code will work with all compilers.

Signed-off-by: Milton Miller <[email protected]>
---
I did not look for other fields that might be char. PowerPC compilers
default to unsigned char, and aparently arm does as well from a quick
google search, to name two examples.

diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h
index 1efea36..70dd3b1 100644
--- a/fs/ocfs2/ocfs2.h
+++ b/fs/ocfs2/ocfs2.h
@@ -159,9 +159,9 @@ struct ocfs2_lock_res {
char l_name[OCFS2_LOCK_ID_MAX_LEN];
unsigned int l_ro_holders;
unsigned int l_ex_holders;
- char l_level;
- char l_requested;
- char l_blocking;
+ signed char l_level;
+ signed char l_requested;
+ signed char l_blocking;

/* Data packed - type enum ocfs2_lock_type */
unsigned char l_type;


2010-11-18 05:40:41

by Tao Ma

[permalink] [raw]
Subject: Re: ocfs2: char is not always signed



2010-11-18 12:20, Milton Miller wrote:
> Commit 1c66b360fe262 (Change some lock status member in ocfs2_lock_res
> to char.) states that these fields need to be signed due to comparision
> to -1, but only changed the type from unsigned char to char. However, it
> is a compiler option if char is a signed or unsigned type. Change these
> fields to signed char so the code will work with all compilers.
>
> Signed-off-by: Milton Miller<[email protected]>
oh, sorry I don't know this. Thanks.
Acked-by: Tao Ma <[email protected]>
> ---
> I did not look for other fields that might be char. PowerPC compilers
> default to unsigned char, and aparently arm does as well from a quick
> google search, to name two examples.
>
> diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h
> index 1efea36..70dd3b1 100644
> --- a/fs/ocfs2/ocfs2.h
> +++ b/fs/ocfs2/ocfs2.h
> @@ -159,9 +159,9 @@ struct ocfs2_lock_res {
> char l_name[OCFS2_LOCK_ID_MAX_LEN];
> unsigned int l_ro_holders;
> unsigned int l_ex_holders;
> - char l_level;
> - char l_requested;
> - char l_blocking;
> + signed char l_level;
> + signed char l_requested;
> + signed char l_blocking;
>
> /* Data packed - type enum ocfs2_lock_type */
> unsigned char l_type;
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/

2010-11-18 23:45:23

by Joel Becker

[permalink] [raw]
Subject: Re: ocfs2: char is not always signed

On Wed, Nov 17, 2010 at 10:20:11PM -0600, Milton Miller wrote:
> Commit 1c66b360fe262 (Change some lock status member in ocfs2_lock_res
> to char.) states that these fields need to be signed due to comparision
> to -1, but only changed the type from unsigned char to char. However, it
> is a compiler option if char is a signed or unsigned type. Change these
> fields to signed char so the code will work with all compilers.
>
> Signed-off-by: Milton Miller <[email protected]>

This patch is now in the fixes branch of ocfs2.git.

Joel

--

"This is the end, beautiful friend.
This is the end, my only friend the end
Of our elaborate plans, the end
Of everything that stands, the end
No safety or surprise, the end
I'll never look into your eyes again."

Joel Becker
Senior Development Manager
Oracle
E-mail: [email protected]
Phone: (650) 506-8127