xfs
[Top] [All Lists]

Re: [PATCH v2] xfsdump: enable dump header checksums

To: aelder@xxxxxxx
Subject: Re: [PATCH v2] xfsdump: enable dump header checksums
From: Bill Kendall <wkendall@xxxxxxx>
Date: Tue, 20 Sep 2011 13:27:11 -0500
Cc: xfs@xxxxxxxxxxx
In-reply-to: <1316538365.2912.32.camel@doink>
References: <1316523954-7688-1-git-send-email-wkendall@xxxxxxx> <1316538365.2912.32.camel@doink>
User-agent: Thunderbird 1.5.0.14ubu (X11/20080502)
Alex Elder wrote:
On Tue, 2011-09-20 at 08:05 -0500, Bill Kendall wrote:
+static inline u_int32_t
+calc_checksum(void *bufp, size_t len)
+{
+       u_int32_t sum = 0;
+       u_int32_t *sump = (u_int32_t *)bufp;
+       u_int32_t *endp = (void *)sump + len

No need to cast a (void *) object to another
pointer type (and vice-versa).

And although gcc allows arithmetic on void pointers,
it is not standard, so (char *) would be a more
portable choice.

Ha...I couldn't remember and when gcc didn't complain
I went with it. Using (char *) requires the result
to be cast back:

        u_int32_t *endp = (u_int32_t *)((char *)sump + len)

This is a bit cleaner:

        u_int32_t *endp = sump + len / sizeof(u_int32_t);


The multiple-of-4 assumption would be well stated with
an assertion.

I didn't want to add the extra cycles to a checksum routine,
but realistically it won't affect the run time of dump or
restore and asserts are likely disabled on released binaries
anyway. I'll add the assert here and remove the ones done
during initialization.

Bill

<Prev in Thread] Current Thread [Next in Thread>