Message ID | 20210916132605.GF25094@kili (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | scsi: mpi3mr: clean up mpi3mr_print_ioc_info() | expand |
Dan, > This function is more complicated than necessary. > > If we change from scnprintf() to snprintf() that let's us remove the > if bytes_wrote < sizeof(protocol) checks. Also we can use bytes_wrote > ? "," : "" to print the comma and remove the separate if statement and > the "is_string_nonempty" variable. Applied to 5.16/scsi-staging, thanks!
On Thu, 16 Sep 2021 16:26:05 +0300, Dan Carpenter wrote: > This function is more complicated than necessary. > > If we change from scnprintf() to snprintf() that let's us remove the > if bytes_wrote < sizeof(protocol) checks. Also we can use > bytes_wrote ? "," : "" to print the comma and remove the separate > if statement and the "is_string_nonempty" variable. > > [...] Applied to 5.16/scsi-queue, thanks! [1/1] scsi: mpi3mr: clean up mpi3mr_print_ioc_info() https://git.kernel.org/mkp/scsi/c/76a4f7cc5973
On Tue, Oct 12, 2021 at 04:35:08PM -0400, Martin K. Petersen wrote: > On Thu, 16 Sep 2021 16:26:05 +0300, Dan Carpenter wrote: > > > This function is more complicated than necessary. > > > > If we change from scnprintf() to snprintf() that let's us remove the > > if bytes_wrote < sizeof(protocol) checks. Also we can use > > bytes_wrote ? "," : "" to print the comma and remove the separate > > if statement and the "is_string_nonempty" variable. > > > > [...] > > Applied to 5.16/scsi-queue, thanks! > > [1/1] scsi: mpi3mr: clean up mpi3mr_print_ioc_info() > https://git.kernel.org/mkp/scsi/c/76a4f7cc5973 Martin, I'm really sorry. I'm looking at this now and I'm so confused what I was thinking. Why would we change from scnprintf to snprintf? I clearly intended to do the reverse change and move from snprintf() to scnprintf(). But then the patch doesn't actually do that. What the heck??? This has already been applied. I've can't believe I've messed up so badly twice in a week. :/ The patch doesn't introduce any bugs that weren't there in the original but it's still horribly wrong. I will send a fix that actually changes it to scnprintf(). regards, dan carpenter
On Thu, Sep 16, 2021 at 04:26:05PM +0300, Dan Carpenter wrote: > @@ -3046,34 +3045,21 @@ mpi3mr_print_ioc_info(struct mpi3mr_ioc *mrioc) > for (i = 0; i < ARRAY_SIZE(mpi3mr_protocols); i++) { > if (mrioc->facts.protocol_flags & > mpi3mr_protocols[i].protocol) { > - if (is_string_nonempty && > - (bytes_wrote < sizeof(protocol))) > - bytes_wrote += snprintf(protocol + bytes_wrote, > - (sizeof(protocol) - bytes_wrote), ","); > - > - if (bytes_wrote < sizeof(protocol)) > - bytes_wrote += snprintf(protocol + bytes_wrote, > - (sizeof(protocol) - bytes_wrote), "%s", Part of the reason I sent this patch is because the "bytes_wrote < sizeof(protocol)" comparison is off by one. It should have been "bytes_wrote <= sizeof(protocol)". Being off by one is harmless here. I should have written about this in the commit message. I really messed this one up all sorts of different ways. :/ I'll try do better in the future. regards, dan carpenter
diff --git a/drivers/scsi/mpi3mr/mpi3mr_fw.c b/drivers/scsi/mpi3mr/mpi3mr_fw.c index 4a8316c6bd41..0c3dc9288b36 100644 --- a/drivers/scsi/mpi3mr/mpi3mr_fw.c +++ b/drivers/scsi/mpi3mr/mpi3mr_fw.c @@ -3022,7 +3022,6 @@ mpi3mr_print_ioc_info(struct mpi3mr_ioc *mrioc) char personality[16]; char protocol[50] = {0}; char capabilities[100] = {0}; - bool is_string_nonempty = false; struct mpi3mr_compimg_ver *fwver = &mrioc->facts.fw_ver; switch (mrioc->facts.personality) { @@ -3046,34 +3045,21 @@ mpi3mr_print_ioc_info(struct mpi3mr_ioc *mrioc) for (i = 0; i < ARRAY_SIZE(mpi3mr_protocols); i++) { if (mrioc->facts.protocol_flags & mpi3mr_protocols[i].protocol) { - if (is_string_nonempty && - (bytes_wrote < sizeof(protocol))) - bytes_wrote += snprintf(protocol + bytes_wrote, - (sizeof(protocol) - bytes_wrote), ","); - - if (bytes_wrote < sizeof(protocol)) - bytes_wrote += snprintf(protocol + bytes_wrote, - (sizeof(protocol) - bytes_wrote), "%s", + bytes_wrote += snprintf(protocol + bytes_wrote, + sizeof(protocol) - bytes_wrote, "%s%s", + bytes_wrote ? "," : "", mpi3mr_protocols[i].name); - is_string_nonempty = true; } } bytes_wrote = 0; - is_string_nonempty = false; for (i = 0; i < ARRAY_SIZE(mpi3mr_capabilities); i++) { if (mrioc->facts.protocol_flags & mpi3mr_capabilities[i].capability) { - if (is_string_nonempty && - (bytes_wrote < sizeof(capabilities))) - bytes_wrote += snprintf(capabilities + bytes_wrote, - (sizeof(capabilities) - bytes_wrote), ","); - - if (bytes_wrote < sizeof(capabilities)) - bytes_wrote += snprintf(capabilities + bytes_wrote, - (sizeof(capabilities) - bytes_wrote), "%s", + bytes_wrote += snprintf(capabilities + bytes_wrote, + sizeof(capabilities) - bytes_wrote, "%s%s", + bytes_wrote ? "," : "", mpi3mr_capabilities[i].name); - is_string_nonempty = true; } }
This function is more complicated than necessary. If we change from scnprintf() to snprintf() that let's us remove the if bytes_wrote < sizeof(protocol) checks. Also we can use bytes_wrote ? "," : "" to print the comma and remove the separate if statement and the "is_string_nonempty" variable. Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> --- drivers/scsi/mpi3mr/mpi3mr_fw.c | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-)