On Thu, May 10, 2007 at 11:00:53PM -0700, Andrew Morton wrote:
 > From: Dirk Mueller <[EMAIL PROTECTED]>
 > 
 > This patch corrects a |/|| confusion in mptscsih_copy_sense_data.  Using ||
 > means that the data that ends up being written is (almost always) 1,
 > instead of being bit-wise or'ed.

Andrew, the last time this was posted, Eric picked up on some other
flaws in the same area. James asked him to followup with a patch, but
unless I'm mistaken, that never arrived.
This diff should replace the one in your tree until Eric has an
equivalent or better.

Signed-off-by: Dave Jones <[EMAIL PROTECTED]>

diff --git a/drivers/message/fusion/mptbase.h b/drivers/message/fusion/mptbase.h
index d25d3be..165f81d 100644
--- a/drivers/message/fusion/mptbase.h
+++ b/drivers/message/fusion/mptbase.h
@@ -436,7 +436,7 @@ typedef struct _MPT_SAS_MGMT {
 typedef struct _mpt_ioctl_events {
        u32     event;          /* Specified by define above */
        u32     eventContext;   /* Index or counter */
-       int     data[2];        /* First 8 bytes of Event Data */
+       u32     data[2];        /* First 8 bytes of Event Data */
 } MPT_IOCTL_EVENTS;
 
 /*
diff --git a/drivers/message/fusion/mptscsih.c 
b/drivers/message/fusion/mptscsih.c
index fa0f776..3bd94f1 100644
--- a/drivers/message/fusion/mptscsih.c
+++ b/drivers/message/fusion/mptscsih.c
@@ -2463,11 +2463,11 @@ mptscsih_copy_sense_data(struct scsi_cmnd *sc, 
MPT_SCSI_HOST *hd, MPT_FRAME_HDR
                                ioc->events[idx].event = 
MPI_EVENT_SCSI_DEVICE_STATUS_CHANGE;
                                ioc->events[idx].eventContext = 
ioc->eventContext;
 
-                               ioc->events[idx].data[0] = (pReq->LUN[1] << 24) 
||
-                                       (MPI_EVENT_SCSI_DEV_STAT_RC_SMART_DATA 
<< 16) ||
-                                       (sc->device->channel << 8) || 
sc->device->id;
+                               ioc->events[idx].data[0] = (pReq->LUN[1] << 24) 
|
+                                       (MPI_EVENT_SCSI_DEV_STAT_RC_SMART_DATA 
<< 16) |
+                                       (sc->device->channel << 8) | 
sc->device->id;
 
-                               ioc->events[idx].data[1] = (sense_data[13] << 
8) || sense_data[12];
+                               ioc->events[idx].data[1] = (sense_data[13] << 
8) | sense_data[12];
 
                                ioc->eventContext++;
                                if (hd->ioc->pcidev->vendor ==

-- 
http://www.codemonkey.org.uk
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to