From: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
To: Xiao Ni <xni@redhat.com>
Cc: ncroxon@redhat.com, linux-raid@vger.kernel.org
Subject: Re: [PATCH 02/15] mdadm/Grow: fix coverity issue CHECKED_RETURN
Date: Wed, 17 Jul 2024 11:33:15 +0200 [thread overview]
Message-ID: <20240717113315.00002fd3@linux.intel.com> (raw)
In-Reply-To: <20240715073604.30307-3-xni@redhat.com>
On Mon, 15 Jul 2024 15:35:51 +0800
Xiao Ni <xni@redhat.com> wrote:
> Signed-off-by: Xiao Ni <xni@redhat.com>
> ---
> Grow.c | 43 ++++++++++++++++++++++++++++++++++++-------
> 1 file changed, 36 insertions(+), 7 deletions(-)
>
> diff --git a/Grow.c b/Grow.c
> index b135930d05b8..7ae967bda067 100644
> --- a/Grow.c
> +++ b/Grow.c
> @@ -3261,7 +3261,12 @@ static int reshape_array(char *container, int fd, char
> *devname, /* This is a spare that wants to
> * be part of the array.
> */
> - add_disk(fd, st, info2, d);
> + if (add_disk(fd, st, info2, d) < 0) {
> + pr_err("Can not add disk
> %s\n",
> + d->sys_name);
> + free(info2);
> + goto release;
> + }
> }
> }
> sysfs_free(info2);
> @@ -4413,7 +4418,10 @@ static void validate(int afd, int bfd, unsigned long
> long offset) */
> if (afd < 0)
> return;
> - lseek64(bfd, offset - 4096, 0);
> + if (lseek64(bfd, offset - 4096, 0) < 0) {
> + pr_err("lseek64 fails %d:%s\n", errno, strerror(errno));
You are using same error message in many places, shouldn't we propose something
like:
__off64_t lseek64_log_err (int __fd, __off64_t __offset, int __whence)
{
__off64_t ret = lseek64(fd, __offset, __whence);
if (ret < 0)
pr_err("lseek64 fails %d:%s\n", errno, strerror(errno));
return ret;
}
lseek64 errors are unusual, they are exceptional, and I'm fine with logging
same error message but I would prefer to avoid repeating same message in code.
In case of debug, developer can do some backtracking, starting from this
function rather than hunt for the particular error message you used multiple
times.
> + return;
> + }
> if (read(bfd, &bsb2, 512) != 512)
> fail("cannot read bsb");
> if (bsb2.sb_csum != bsb_csum((char*)&bsb2,
> @@ -4444,12 +4452,19 @@ static void validate(int afd, int bfd, unsigned long
> long offset) }
> }
>
> - lseek64(bfd, offset, 0);
> + if (lseek64(bfd, offset, 0) < 0) {
> + pr_err("lseek64 fails %d:%s\n", errno,
> strerror(errno));
> + goto out;
> + }
> if ((unsigned long long)read(bfd, bbuf, len) != len) {
> //printf("len %llu\n", len);
> fail("read first backup failed");
> }
> - lseek64(afd, __le64_to_cpu(bsb2.arraystart)*512, 0);
> +
> + if (lseek64(afd, __le64_to_cpu(bsb2.arraystart)*512, 0) < 0)
> {
> + pr_err("lseek64 fails %d:%s\n", errno,
> strerror(errno));
> + goto out;
> + }
> if ((unsigned long long)read(afd, abuf, len) != len)
> fail("read first from array failed");
> if (memcmp(bbuf, abuf, len) != 0)
> @@ -4466,15 +4481,25 @@ static void validate(int afd, int bfd, unsigned long
> long offset) bbuf = xmalloc(abuflen);
> }
>
> - lseek64(bfd, offset+__le64_to_cpu(bsb2.devstart2)*512, 0);
> + if (lseek64(bfd, offset+__le64_to_cpu(bsb2.devstart2)*512,
> 0) < 0) {
> + pr_err("lseek64 fails %d:%s\n", errno,
> strerror(errno));
> + goto out;
> + }
> if ((unsigned long long)read(bfd, bbuf, len) != len)
> fail("read second backup failed");
> - lseek64(afd, __le64_to_cpu(bsb2.arraystart2)*512, 0);
> + if (lseek64(afd, __le64_to_cpu(bsb2.arraystart2)*512, 0) <
> 0) {
> + pr_err("lseek64 fails %d:%s\n", errno,
> strerror(errno));
> + goto out;
> + }
> if ((unsigned long long)read(afd, abuf, len) != len)
> fail("read second from array failed");
> if (memcmp(bbuf, abuf, len) != 0)
> fail("data2 compare failed");
> }
> +out:
> + free(abuf);
> + free(bbuf);
> + return;
> }
>
> int child_monitor(int afd, struct mdinfo *sra, struct reshape *reshape,
> @@ -5033,7 +5058,11 @@ int Grow_continue_command(char *devname, int fd,
> struct context *c) goto Grow_continue_command_exit;
> }
> content = &array;
> - sysfs_init(content, fd, NULL);
> + if (sysfs_init(content, fd, NULL) < 0) {
> + pr_err("sysfs_init fails\n");
Better error message is:
pr_err("failed to initialize sysfs.\n");
or
pr_err("unable to initialize sysfs for %s\n",st->devnm);
It is more user friendly.
It is already used multiple times so perhaps we can consider similar approach
to proposed in for lseek, we can move move printing error to sysfs_init().
What do you think?
Thanks,
Mariusz
next prev parent reply other threads:[~2024-07-17 9:33 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-15 7:35 [PATCH 00/15] mdadm: fix coverity issues Xiao Ni
2024-07-15 7:35 ` [PATCH 01/15] mdadm/Manage: 01r1fail cases fails Xiao Ni
2024-07-16 15:44 ` Mariusz Tkaczyk
2024-07-15 7:35 ` [PATCH 02/15] mdadm/Grow: fix coverity issue CHECKED_RETURN Xiao Ni
2024-07-17 9:33 ` Mariusz Tkaczyk [this message]
2024-07-18 2:29 ` Xiao Ni
2024-07-18 7:19 ` Mariusz Tkaczyk
2024-07-15 7:35 ` [PATCH 03/15] mdadm/Grow: fix coverity issue RESOURCE_LEAK Xiao Ni
2024-07-17 11:29 ` Mariusz Tkaczyk
2024-07-18 3:27 ` Xiao Ni
2024-07-19 9:52 ` Mariusz Tkaczyk
2024-07-15 7:35 ` [PATCH 04/15] mdadm/Grow: fix coverity issue STRING_OVERFLOW Xiao Ni
2024-07-15 7:35 ` [PATCH 05/15] mdadm/Incremental: fix coverity issues Xiao Ni
2024-07-15 7:35 ` [PATCH 06/15] mdadm/mdmon: fix coverity issue CHECKED_RETURN Xiao Ni
2024-07-15 7:35 ` [PATCH 07/15] mdadm/mdmon: fix coverity issue RESOURCE_LEAK Xiao Ni
2024-07-15 7:35 ` [PATCH 08/15] mdadm/mdopen: fix coverity issue CHECKED_RETURN Xiao Ni
2024-07-15 7:35 ` [PATCH 09/15] mdadm/mdopen: fix coverity issue STRING_OVERFLOW Xiao Ni
2024-07-15 7:35 ` [PATCH 10/15] mdadm/mdstat: fix coverity issue CHECKED_RETURN Xiao Ni
2024-07-15 7:36 ` [PATCH 11/15] mdadm/super0: fix coverity issue CHECKED_RETURN and EVALUATION_ORDER Xiao Ni
2024-07-15 7:36 ` [PATCH 12/15] mdadm/super1: fix coverity issue CHECKED_RETURN Xiao Ni
2024-07-15 7:36 ` [PATCH 13/15] mdadm/super1: fix coverity issue DEADCODE Xiao Ni
2024-07-15 7:36 ` [PATCH 14/15] mdadm/super1: fix coverity issue EVALUATION_ORDER Xiao Ni
2024-07-15 7:36 ` [PATCH 15/15] mdadm/super1: fix coverity issue RESOURCE_LEAK Xiao Ni
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240717113315.00002fd3@linux.intel.com \
--to=mariusz.tkaczyk@linux.intel.com \
--cc=linux-raid@vger.kernel.org \
--cc=ncroxon@redhat.com \
--cc=xni@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).