linux-raid.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [mdadm PATCH 0/3] *** fix gcc warnings ***
@ 2010-02-27 10:14 Luca Berra
  2010-02-27 13:53 ` [mdadm PATCH 2/3] fix compiler warnings Luca Berra
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Luca Berra @ 2010-02-27 10:14 UTC (permalink / raw)
  To: Neil Brown (neilb@suse.de); +Cc: linux-raid@vger.kernel.org

building current git with -O2 -Wall -Werror aborts with compiler warnings
patch 1 fixes a strict-aliasing violation
patch 2 addresses trivial to fix warning
patch 3 is just _WRONG_: there is no clear way to bailout from the functions in
Grow.c, and i have no idea if aborting would leave the array in an inconsistent
state. For the time being I just decided to please gcc by storing the result
somwere, but it is never checked.

L.

Luca Berra (3):
   fix gcc warnings about strict-aliasing rules
   fix compiler warnings
   workaround unused_results

  Grow.c     |   30 +++++++++++++++++++-----------
  mdmon.c    |    2 +-
  restripe.c |    2 +-
  util.c     |    4 ++--
  4 files changed, 23 insertions(+), 15 deletions(-)


-- 
Luca Berra -- bluca@comedia.it
         Communication Media & Services S.r.l.
  /"\
  \ /     ASCII RIBBON CAMPAIGN
   X        AGAINST HTML MAIL
  / \

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [mdadm PATCH 2/3] fix compiler warnings
  2010-02-27 10:14 [mdadm PATCH 0/3] *** fix gcc warnings *** Luca Berra
@ 2010-02-27 13:53 ` Luca Berra
  2010-02-27 13:53 ` [mdadm PATCH 1/3] fix gcc warnings about strict-aliasing rules Luca Berra
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 8+ messages in thread
From: Luca Berra @ 2010-02-27 13:53 UTC (permalink / raw)
  To: Neil Brown (neilb@suse.de); +Cc: linux-raid@vger.kernel.org

one instance of uninitialized variable.
unused results from read/write which we don't care about.
one instance of unused result from posix-memalign which is checked
further down in the code.

Signed-off-by: Luca Berra <bluca@comedia.it>
---
   Grow.c     |    7 ++++---
   mdmon.c    |    2 +-
   restripe.c |    2 +-
   3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/Grow.c b/Grow.c
index 74b63b6..5806fc3 100644
--- a/Grow.c
+++ b/Grow.c
@@ -1096,7 +1096,7 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file,
   			/* set them all just in case some old 'new_*' value
   			 * persists from some earlier problem
   			 */
-			int err;
+			int err = 0;
   			if (sysfs_set_num(sra, NULL, "chunk_size", nchunk) < 0)
   				rv = 1, err = errno;
   			if (!rv && sysfs_set_num(sra, NULL, "layout", nlayout) < 0)
@@ -1414,8 +1414,9 @@ int wait_backup(struct mdinfo *sra,
   
   static void fail(char *msg)
   {
-	write(2, msg, strlen(msg));
-	write(2, "\n", 1);
+	ssize_t rc;
+	rc = write(2, msg, strlen(msg));
+	rc = write(2, "\n", 1);
   	exit(1);
   }
   
diff --git a/mdmon.c b/mdmon.c
index 31d45fd..70fbd0b 100644
--- a/mdmon.c
+++ b/mdmon.c
@@ -176,7 +176,7 @@ static void try_kill_monitor(pid_t pid, char *devname, int sock)
   	fl = fcntl(sock, F_GETFL, 0);
   	fl &= ~O_NONBLOCK;
   	fcntl(sock, F_SETFL, fl);
-	read(sock, buf, 100);
+	n = read(sock, buf, 100);
   }
   
   void remove_pidfile(char *devname)
diff --git a/restripe.c b/restripe.c
index f673206..d885e76 100644
--- a/restripe.c
+++ b/restripe.c
@@ -565,7 +565,7 @@ int restore_stripes(int *dest, unsigned long long *offsets,
   
   	int data_disks = raid_disks - (level == 0 ? 0 : level <= 5 ? 1 : 2);
   
-	posix_memalign((void**)&stripe_buf, 4096, raid_disks * chunk_size);
+	i = posix_memalign((void**)&stripe_buf, 4096, raid_disks * chunk_size);
   	if (zero == NULL) {
   		zero = malloc(chunk_size);
   		if (zero)
-- 
1.7.0

-- 
Luca Berra -- bluca@comedia.it
          Communication Media & Services S.r.l.
   /"\
   \ /     ASCII RIBBON CAMPAIGN
    X        AGAINST HTML MAIL
   / \

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [mdadm PATCH 1/3] fix gcc warnings about strict-aliasing rules
  2010-02-27 10:14 [mdadm PATCH 0/3] *** fix gcc warnings *** Luca Berra
  2010-02-27 13:53 ` [mdadm PATCH 2/3] fix compiler warnings Luca Berra
@ 2010-02-27 13:53 ` Luca Berra
  2010-03-02  7:40   ` Michael Tokarev
  2010-02-27 13:53 ` [mdadm PATCH 3/3] workaround unused results Luca Berra
  2010-03-02 23:59 ` [mdadm PATCH 0/3] *** fix gcc warnings *** Neil Brown
  3 siblings, 1 reply; 8+ messages in thread
From: Luca Berra @ 2010-02-27 13:53 UTC (permalink / raw)
  To: Neil Brown (neilb@suse.de); +Cc: linux-raid@vger.kernel.org

Signed-off-by: Luca Berra <bluca@comedia.it>
---
   util.c |    4 ++--
   1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/util.c b/util.c
index 68f048d..1def2a0 100644
--- a/util.c
+++ b/util.c
@@ -1160,7 +1160,7 @@ static int get_gpt_last_partition_end(int fd, unsigned long long *endofpart)
   	entry_size = __le32_to_cpu(buf[GPT_ENTRY_SIZE_OFFSET]);
   
   	/* Check GPT signature*/
-	if (*((__u64*)buf) != GPT_SIGNATURE_MAGIC)
+	if ((__u64)buf[0] != GPT_SIGNATURE_MAGIC)
   		return -1;
   
   	/* sanity checks */
@@ -1178,7 +1178,7 @@ static int get_gpt_last_partition_end(int fd, unsigned long long *endofpart)
   		/* is this valid partition? */
   		if (memcmp(part->type_guid, empty_gpt_entry, 16) != 0) {
   			/* check the last lba for the current partition */
-			curr_part_end = __le64_to_cpu(*(__u64*)part->ending_lba);
+			curr_part_end = __le64_to_cpu((__u64)part->ending_lba[0]);
   			if (curr_part_end > *endofpart)
   				*endofpart = curr_part_end;
   		}
-- 
1.7.0

-- 
Luca Berra -- bluca@comedia.it
          Communication Media & Services S.r.l.
   /"\
   \ /     ASCII RIBBON CAMPAIGN
    X        AGAINST HTML MAIL
   / \

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [mdadm PATCH 3/3] workaround unused results
  2010-02-27 10:14 [mdadm PATCH 0/3] *** fix gcc warnings *** Luca Berra
  2010-02-27 13:53 ` [mdadm PATCH 2/3] fix compiler warnings Luca Berra
  2010-02-27 13:53 ` [mdadm PATCH 1/3] fix gcc warnings about strict-aliasing rules Luca Berra
@ 2010-02-27 13:53 ` Luca Berra
  2010-03-02 23:59 ` [mdadm PATCH 0/3] *** fix gcc warnings *** Neil Brown
  3 siblings, 0 replies; 8+ messages in thread
From: Luca Berra @ 2010-02-27 13:53 UTC (permalink / raw)
  To: Neil Brown (neilb@suse.de); +Cc: linux-raid@vger.kernel.org

errors from these tough unlikely should be checked
when it is not clear how to bailout from a funcion just create a
variable named discard_result and use it to please gcc

Signed-off-by: Luca Berra <bluca@comedia.it>
---
   Grow.c |   23 +++++++++++++++--------
   1 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/Grow.c b/Grow.c
index 5806fc3..8dbe139 100644
--- a/Grow.c
+++ b/Grow.c
@@ -1269,6 +1269,7 @@ int grow_backup(struct mdinfo *sra,
   	int odata = disks;
   	int rv = 0;
   	int i;
+	ssize_t discard_result;
   	unsigned long long new_degraded;
   	//printf("offset %llu\n", offset);
   	if (level >= 4)
@@ -1334,10 +1335,10 @@ int grow_backup(struct mdinfo *sra,
   						((char*)&bsb.sb_csum2)-((char*)&bsb));
   
   		lseek64(destfd[i], destoffsets[i] - 4096, 0);
-		write(destfd[i], &bsb, 512);
+		discard_result = write(destfd[i], &bsb, 512);
   		if (destoffsets[i] > 4096) {
   			lseek64(destfd[i], destoffsets[i]+stripes*chunk*odata, 0);
-			write(destfd[i], &bsb, 512);
+			discard_result = write(destfd[i], &bsb, 512);
   		}
   		fsync(destfd[i]);
   	}
@@ -1368,6 +1369,7 @@ int wait_backup(struct mdinfo *sra,
   	int fd = sysfs_get_fd(sra, NULL, "sync_completed");
   	unsigned long long completed;
   	int i;
+	ssize_t discard_result;
   
   	if (fd < 0)
   		return -1;
@@ -1406,7 +1408,7 @@ int wait_backup(struct mdinfo *sra,
   			bsb.sb_csum2 = bsb_csum((char*)&bsb,
   						((char*)&bsb.sb_csum2)-((char*)&bsb));
   		lseek64(destfd[i], destoffsets[i]-4096, 0);
-		write(destfd[i], &bsb, 512);
+		discard_result = write(destfd[i], &bsb, 512);
   		fsync(destfd[i]);
   	}
   	return 0;
@@ -1453,8 +1455,10 @@ static void validate(int afd, int bfd, unsigned long long offset)
   			free(abuf);
   			free(bbuf);
   			abuflen = len;
-			posix_memalign((void**)&abuf, 4096, abuflen);
-			posix_memalign((void**)&bbuf, 4096, abuflen);
+			if(posix_memalign((void**)&abuf, 4096, abuflen))
+				fail("cannot allocate memory");
+			if(posix_memalign((void**)&bbuf, 4096, abuflen))
+				fail("cannot allocate memory");
   		}
   
   		lseek64(bfd, offset, 0);
@@ -1508,8 +1512,9 @@ static int child_grow(int afd, struct mdinfo *sra, unsigned long stripes,
   {
   	char *buf;
   	int degraded = 0;
+	int discard_result;
   
-	posix_memalign((void**)&buf, 4096, disks * chunk);
+	discard_result = posix_memalign((void**)&buf, 4096, disks * chunk);
   	sysfs_set_num(sra, NULL, "suspend_hi", 0);
   	sysfs_set_num(sra, NULL, "suspend_lo", 0);
   	grow_backup(sra, 0, stripes,
@@ -1536,8 +1541,9 @@ static int child_shrink(int afd, struct mdinfo *sra, unsigned long stripes,
   	unsigned long long start;
   	int rv;
   	int degraded = 0;
+	int discard_result;
   
-	posix_memalign((void**)&buf, 4096, disks * chunk);
+	discard_result = posix_memalign((void**)&buf, 4096, disks * chunk);
   	start = sra->component_size - stripes * chunk/512;
   	sysfs_set_num(sra, NULL, "sync_max", start);
   	sysfs_set_str(sra, NULL, "sync_action", "reshape");
@@ -1574,9 +1580,10 @@ static int child_same_size(int afd, struct mdinfo *sra, unsigned long stripes,
   	char *buf;
   	unsigned long long speed;
   	int degraded = 0;
+	int discard_result;
   
   
-	posix_memalign((void**)&buf, 4096, disks * chunk);
+	discard_result = posix_memalign((void**)&buf, 4096, disks * chunk);
   
   	sysfs_set_num(sra, NULL, "suspend_lo", 0);
   	sysfs_set_num(sra, NULL, "suspend_hi", 0);
-- 
1.7.0

-- 
Luca Berra -- bluca@comedia.it
          Communication Media & Services S.r.l.
   /"\
   \ /     ASCII RIBBON CAMPAIGN
    X        AGAINST HTML MAIL
   / \

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [mdadm PATCH 1/3] fix gcc warnings about strict-aliasing rules
  2010-02-27 13:53 ` [mdadm PATCH 1/3] fix gcc warnings about strict-aliasing rules Luca Berra
@ 2010-03-02  7:40   ` Michael Tokarev
  2010-03-02  7:48     ` Luca Berra
  0 siblings, 1 reply; 8+ messages in thread
From: Michael Tokarev @ 2010-03-02  7:40 UTC (permalink / raw)
  To: Neil Brown (neilb@suse.de), linux-raid@vger.kernel.org,
	Luca Berra

Luca Berra wrong:
> Signed-off-by: Luca Berra <bluca@comedia.it>
> ---
>   util.c |    4 ++--
>   1 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/util.c b/util.c
> index 68f048d..1def2a0 100644
> --- a/util.c
> +++ b/util.c
> @@ -1160,7 +1160,7 @@ static int get_gpt_last_partition_end(int fd,
> unsigned long long *endofpart)
>       entry_size = __le32_to_cpu(buf[GPT_ENTRY_SIZE_OFFSET]);
>         /* Check GPT signature*/
> -    if (*((__u64*)buf) != GPT_SIGNATURE_MAGIC)
> +    if ((__u64)buf[0] != GPT_SIGNATURE_MAGIC)

This looks wrong.

buf is an array of unsigned char.  Before, we converted the
whole thing to a pointer to u64 and took the first element
at that address, u64 size.  Now after the change, we take
first _byte_ of the array, convert it to u64 (adding leading
zeros) and compare with a large number.

Does it actually work?

>           return -1;
>         /* sanity checks */
> @@ -1178,7 +1178,7 @@ static int get_gpt_last_partition_end(int fd,
> unsigned long long *endofpart)
>           /* is this valid partition? */
>           if (memcmp(part->type_guid, empty_gpt_entry, 16) != 0) {
>               /* check the last lba for the current partition */
> -            curr_part_end = __le64_to_cpu(*(__u64*)part->ending_lba);
> +            curr_part_end = __le64_to_cpu((__u64)part->ending_lba[0]);

And the same thing here as well.

Thanks!

/mjt

>               if (curr_part_end > *endofpart)
>                   *endofpart = curr_part_end;
>           }


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [mdadm PATCH 1/3] fix gcc warnings about strict-aliasing rules
  2010-03-02  7:40   ` Michael Tokarev
@ 2010-03-02  7:48     ` Luca Berra
  2010-03-03  4:19       ` Neil Brown
  0 siblings, 1 reply; 8+ messages in thread
From: Luca Berra @ 2010-03-02  7:48 UTC (permalink / raw)
  To: linux-raid@vger.kernel.org

On Tue, Mar 02, 2010 at 10:40:21AM +0300, Michael Tokarev wrote:
>Luca Berra wrong:
>> Signed-off-by: Luca Berra <bluca@comedia.it>
>> ---
>>   util.c |    4 ++--
>>   1 files changed, 2 insertions(+), 2 deletions(-)
>> 
>> diff --git a/util.c b/util.c
>> index 68f048d..1def2a0 100644
>> --- a/util.c
>> +++ b/util.c
>> @@ -1160,7 +1160,7 @@ static int get_gpt_last_partition_end(int fd,
>> unsigned long long *endofpart)
>>       entry_size = __le32_to_cpu(buf[GPT_ENTRY_SIZE_OFFSET]);
>>         /* Check GPT signature*/
>> -    if (*((__u64*)buf) != GPT_SIGNATURE_MAGIC)
>> +    if ((__u64)buf[0] != GPT_SIGNATURE_MAGIC)
>
>This looks wrong.
>
>buf is an array of unsigned char.  Before, we converted the
>whole thing to a pointer to u64 and took the first element
>at that address, u64 size.  Now after the change, we take
>first _byte_ of the array, convert it to u64 (adding leading
>zeros) and compare with a large number.

you are correct, this is obviously wrong, i wonder what i was thinking.

any idea on how to get this right?
sscanf? union?

Regards,
L.

-- 
Luca Berra -- bluca@comedia.it
         Communication Media & Services S.r.l.
  /"\
  \ /     ASCII RIBBON CAMPAIGN
   X        AGAINST HTML MAIL
  / \

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [mdadm PATCH 0/3] *** fix gcc warnings ***
  2010-02-27 10:14 [mdadm PATCH 0/3] *** fix gcc warnings *** Luca Berra
                   ` (2 preceding siblings ...)
  2010-02-27 13:53 ` [mdadm PATCH 3/3] workaround unused results Luca Berra
@ 2010-03-02 23:59 ` Neil Brown
  3 siblings, 0 replies; 8+ messages in thread
From: Neil Brown @ 2010-03-02 23:59 UTC (permalink / raw)
  To: Luca Berra; +Cc: linux-raid@vger.kernel.org

On Sat, 27 Feb 2010 11:14:43 +0100
Luca Berra <bluca@comedia.it> wrote:

> building current git with -O2 -Wall -Werror aborts with compiler warnings
> patch 1 fixes a strict-aliasing violation
> patch 2 addresses trivial to fix warning
> patch 3 is just _WRONG_: there is no clear way to bailout from the functions in
> Grow.c, and i have no idea if aborting would leave the array in an inconsistent
> state. For the time being I just decided to please gcc by storing the result
> somwere, but it is never checked.

Thanks.
I needed to add -D_FORTIFY_SOURCE=2 to get all those warnings as well,
so I've told the Makefile about that.

Your patches were space-damaged somehow so I didn't apply them directly, but
I have fixed up all the warnings, sometimes the same way that you did,
soemthings differently.

Thanks.

NeilBrown


> 
> L.
> 
> Luca Berra (3):
>    fix gcc warnings about strict-aliasing rules
>    fix compiler warnings
>    workaround unused_results
> 
>   Grow.c     |   30 +++++++++++++++++++-----------
>   mdmon.c    |    2 +-
>   restripe.c |    2 +-
>   util.c     |    4 ++--
>   4 files changed, 23 insertions(+), 15 deletions(-)
> 
> 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [mdadm PATCH 1/3] fix gcc warnings about strict-aliasing rules
  2010-03-02  7:48     ` Luca Berra
@ 2010-03-03  4:19       ` Neil Brown
  0 siblings, 0 replies; 8+ messages in thread
From: Neil Brown @ 2010-03-03  4:19 UTC (permalink / raw)
  To: Luca Berra; +Cc: linux-raid@vger.kernel.org

On Tue, 2 Mar 2010 08:48:11 +0100
Luca Berra <bluca@comedia.it> wrote:

> On Tue, Mar 02, 2010 at 10:40:21AM +0300, Michael Tokarev wrote:
> >Luca Berra wrong:
> >> Signed-off-by: Luca Berra <bluca@comedia.it>
> >> ---
> >>   util.c |    4 ++--
> >>   1 files changed, 2 insertions(+), 2 deletions(-)
> >> 
> >> diff --git a/util.c b/util.c
> >> index 68f048d..1def2a0 100644
> >> --- a/util.c
> >> +++ b/util.c
> >> @@ -1160,7 +1160,7 @@ static int get_gpt_last_partition_end(int fd,
> >> unsigned long long *endofpart)
> >>       entry_size = __le32_to_cpu(buf[GPT_ENTRY_SIZE_OFFSET]);
> >>         /* Check GPT signature*/
> >> -    if (*((__u64*)buf) != GPT_SIGNATURE_MAGIC)
> >> +    if ((__u64)buf[0] != GPT_SIGNATURE_MAGIC)
> >
> >This looks wrong.
> >
> >buf is an array of unsigned char.  Before, we converted the
> >whole thing to a pointer to u64 and took the first element
> >at that address, u64 size.  Now after the change, we take
> >first _byte_ of the array, convert it to u64 (adding leading
> >zeros) and compare with a large number.
> 
> you are correct, this is obviously wrong, i wonder what i was thinking.
> 
> any idea on how to get this right?
> sscanf? union?

I fixed it with:

 __u64* buf64;

 ....
 buf64 = (__u64*)buf;
 if (buf64[0] != ....).....

NeilBrown

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2010-03-03  4:19 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-27 10:14 [mdadm PATCH 0/3] *** fix gcc warnings *** Luca Berra
2010-02-27 13:53 ` [mdadm PATCH 2/3] fix compiler warnings Luca Berra
2010-02-27 13:53 ` [mdadm PATCH 1/3] fix gcc warnings about strict-aliasing rules Luca Berra
2010-03-02  7:40   ` Michael Tokarev
2010-03-02  7:48     ` Luca Berra
2010-03-03  4:19       ` Neil Brown
2010-02-27 13:53 ` [mdadm PATCH 3/3] workaround unused results Luca Berra
2010-03-02 23:59 ` [mdadm PATCH 0/3] *** fix gcc warnings *** Neil Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).