2008-11-06 20:12:25

by Tim Gardner

[permalink] [raw]
Subject: [PATCH] cciss: firmware version is invalid

>From b659b0b0e14f5e3c049bf5c8d2883587cdbfe344 Mon Sep 17 00:00:00 2001
From: Tim Gardner <[email protected]>
Date: Thu, 6 Nov 2008 12:34:25 -0700
Subject: [PATCH] cciss: Firmware Version is invalid
OriginalAuthor: [email protected]
OriginalLocation: http://launchpadlibrarian.net/18582511/cciss_firmware_version_fix.patch
Bug: https://bugs.launchpad.net/bugs/284031

Emit a CISS_INQUIRY command to read the firmware version.

Signed-off-by: Tim Gardner <[email protected]>
Cc: [email protected]
---
drivers/block/cciss.c | 21 +++++++++++++++++++++
1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index b73116e..844b806 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -1631,6 +1631,7 @@ static int rebuild_lun_table(ctlr_info_t *h, int first_time)
int ctlr = h->ctlr;
int num_luns;
ReportLunData_struct *ld_buff = NULL;
+ InquiryData_struct *inq_buff = NULL;
int return_code;
int listlength = 0;
int i;
@@ -1651,6 +1652,26 @@ static int rebuild_lun_table(ctlr_info_t *h, int first_time)
h->busy_configuring = 1;
spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);

+ inq_buff = kzalloc(sizeof(InquiryData_struct), GFP_KERNEL);
+ if (inq_buff == NULL) {
+ printk(KERN_ERR "cciss: out of memory\n");
+ return ENOMEM;
+ }
+
+ /* Get the firmware version */
+ return_code = sendcmd_withirq(CISS_INQUIRY, ctlr, inq_buff,
+ sizeof(InquiryData_struct), 0, 0 ,0, TYPE_CMD);
+ if (return_code == IO_OK) {
+ h->firm_ver[0] = inq_buff->data_byte[32];
+ h->firm_ver[1] = inq_buff->data_byte[33];
+ h->firm_ver[2] = inq_buff->data_byte[34];
+ h->firm_ver[3] = inq_buff->data_byte[35];
+ } else { /* send command failed */
+ printk(KERN_WARNING "cciss: unable to determine firmware"
+ " version of controller\n");
+ }
+
+ /* Get the number of logical volumes */
ld_buff = kzalloc(sizeof(ReportLunData_struct), GFP_KERNEL);
if (ld_buff == NULL)
goto mem_msg;
--
1.5.6.3


2008-11-06 21:11:41

by Stillwell, Bryan

[permalink] [raw]
Subject: Re: [PATCH] cciss: firmware version is invalid

Tim,

Thanks for getting this merged, but I believe this patch is preferred
over the original one I attached:

http://userweb.kernel.org/~akpm/mmotm/broken-out/cciss-fix-regression-firmware-not-displayed-in-procfs-again-and-again.patch

The reason for this according to Mike Miller is: "The first fix could be
called anytime something changed on the controller such as number of
logical volumes, etc. This patch will get called only once for each
controller."

Thanks,
Bryan

On Thu, 2008-11-06 at 20:12 +0000, Tim Gardner wrote:
> >From b659b0b0e14f5e3c049bf5c8d2883587cdbfe344 Mon Sep 17 00:00:00 2001
> From: Tim Gardner <[email protected]>
> Date: Thu, 6 Nov 2008 12:34:25 -0700
> Subject: [PATCH] cciss: Firmware Version is invalid
> OriginalAuthor: [email protected]
> OriginalLocation: http://launchpadlibrarian.net/18582511/cciss_firmware_version_fix.patch
> Bug: https://bugs.launchpad.net/bugs/284031
>
> Emit a CISS_INQUIRY command to read the firmware version.
>
> Signed-off-by: Tim Gardner <[email protected]>
> Cc: [email protected]
> ---
> drivers/block/cciss.c | 21 +++++++++++++++++++++
> 1 files changed, 21 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
> index b73116e..844b806 100644
> --- a/drivers/block/cciss.c
> +++ b/drivers/block/cciss.c
> @@ -1631,6 +1631,7 @@ static int rebuild_lun_table(ctlr_info_t *h, int first_time)
> int ctlr = h->ctlr;
> int num_luns;
> ReportLunData_struct *ld_buff = NULL;
> + InquiryData_struct *inq_buff = NULL;
> int return_code;
> int listlength = 0;
> int i;
> @@ -1651,6 +1652,26 @@ static int rebuild_lun_table(ctlr_info_t *h, int first_time)
> h->busy_configuring = 1;
> spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
>
> + inq_buff = kzalloc(sizeof(InquiryData_struct), GFP_KERNEL);
> + if (inq_buff == NULL) {
> + printk(KERN_ERR "cciss: out of memory\n");
> + return ENOMEM;
> + }
> +
> + /* Get the firmware version */
> + return_code = sendcmd_withirq(CISS_INQUIRY, ctlr, inq_buff,
> + sizeof(InquiryData_struct), 0, 0 ,0, TYPE_CMD);
> + if (return_code == IO_OK) {
> + h->firm_ver[0] = inq_buff->data_byte[32];
> + h->firm_ver[1] = inq_buff->data_byte[33];
> + h->firm_ver[2] = inq_buff->data_byte[34];
> + h->firm_ver[3] = inq_buff->data_byte[35];
> + } else { /* send command failed */
> + printk(KERN_WARNING "cciss: unable to determine firmware"
> + " version of controller\n");
> + }
> +
> + /* Get the number of logical volumes */
> ld_buff = kzalloc(sizeof(ReportLunData_struct), GFP_KERNEL);
> if (ld_buff == NULL)
> goto mem_msg;
> --
> 1.5.6.3
>

2008-11-07 14:12:24

by Tim Gardner

[permalink] [raw]
Subject: Re: [PATCH] cciss: firmware version is invalid

Stillwell, Bryan wrote:
> Tim,
>
> Thanks for getting this merged, but I believe this patch is preferred
> over the original one I attached:
>
> http://userweb.kernel.org/~akpm/mmotm/broken-out/cciss-fix-regression-firmware-not-displayed-in-procfs-again-and-again.patch
>
> The reason for this according to Mike Miller is: "The first fix could be
> called anytime something changed on the controller such as number of
> logical volumes, etc. This patch will get called only once for each
> controller."
>
> Thanks,
> Bryan

applied


--
Tim Gardner [email protected]

2008-11-11 00:56:20

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] cciss: firmware version is invalid

On Fri, 07 Nov 2008 07:12:08 -0700
Tim Gardner <[email protected]> wrote:

> Stillwell, Bryan wrote:
> > Tim,
> >
> > Thanks for getting this merged, but I believe this patch is preferred
> > over the original one I attached:
> >
> > http://userweb.kernel.org/~akpm/mmotm/broken-out/cciss-fix-regression-firmware-not-displayed-in-procfs-again-and-again.patch
> >
> > The reason for this according to Mike Miller is: "The first fix could be
> > called anytime something changed on the controller such as number of
> > logical volumes, etc. This patch will get called only once for each
> > controller."
> >
> > Thanks,
> > Bryan
>
> applied
>

I'm all confused here.

cciss-fix-regression-firmware-not-displayed-in-procfs-again-and-again.patch
is now in mainline. Are you saying that "cciss: Firmware Version is
invalid" is preferred? That "cciss: Firmware Version is invalid"
should still be applied?

If so, "cciss: Firmware Version is invalid" will need a better title
and changelog, please. The one you have there is pretty skimpy.
reading between the lines, I'm guessing that the driver emits "Firmware
Version is invalid" messages and that this patch somehow fixes that?

2008-11-11 01:30:41

by Tim Gardner

[permalink] [raw]
Subject: Re: [PATCH] cciss: firmware version is invalid

Andrew Morton wrote:
> On Fri, 07 Nov 2008 07:12:08 -0700
> Tim Gardner <[email protected]> wrote:
>
>> Stillwell, Bryan wrote:
>>> Tim,
>>>
>>> Thanks for getting this merged, but I believe this patch is preferred
>>> over the original one I attached:
>>>
>>> http://userweb.kernel.org/~akpm/mmotm/broken-out/cciss-fix-regression-firmware-not-displayed-in-procfs-again-and-again.patch
>>>
>>> The reason for this according to Mike Miller is: "The first fix could be
>>> called anytime something changed on the controller such as number of
>>> logical volumes, etc. This patch will get called only once for each
>>> controller."
>>>
>>> Thanks,
>>> Bryan
>> applied
>>
>
> I'm all confused here.
>
> cciss-fix-regression-firmware-not-displayed-in-procfs-again-and-again.patch
> is now in mainline. Are you saying that "cciss: Firmware Version is
> invalid" is preferred? That "cciss: Firmware Version is invalid"
> should still be applied?
>
> If so, "cciss: Firmware Version is invalid" will need a better title
> and changelog, please. The one you have there is pretty skimpy.
> reading between the lines, I'm guessing that the driver emits "Firmware
> Version is invalid" messages and that this patch somehow fixes that?
>

Andrew,

The patch in Linus' repo looks correct, so please drop this one. At the
time I sent the original patch I didn't realize there was another
version already staged for Linus.

rtg
--
Tim Gardner [email protected]