I have JBOD in FL-port and if I unplug the cable or disable the switch
port, the qla2xxx driver doesn't fail the I/O soon. The remote port
status is 'online' all the time. The I/O's usually timeout after the
usual scsi timeout. Based on the existing structure, al_pa is at the
lowest addressed byte, so the b24 field's interpretation as an integer
is *incorrect* on big endinan systems. You should be able to print the
b24 as an integer and see what you get is incorrect on big endian
systems.

Thanks, Malahal.

Seokmann Ju [EMAIL PROTECTED] wrote:
> On Monday, February 19, 2007 10:19 AM, Malahal Naineni wrote:
> > qla2xxx driver fails to handle RSCN events affecting area or 
> > domain due to an endian issue on big endian systems.  This 
> > fixes the port_id_t structure on big endian systems.
> <NEED MORE INFORMATION>
> Can you provide more details on the fails you are getting?
> In my opinion, those fields in the structure should not get affected by
> byte ordering.
> 
> Thank you,
> 
> Seokmann
> 
> > -----Original Message-----
> > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
> > Sent: Monday, February 19, 2007 10:19 AM
> > To: [email protected]; Linux Driver
> > Subject: [PATCH] qla2xxx: fix RSCN handling on big-endian systems
> > 
> > qla2xxx driver fails to handle RSCN events affecting area or 
> > domain due to an endian issue on big endian systems.  This 
> > fixes the port_id_t structure on big endian systems.
> > 
> > Signed-off-by: Malahal Naineni <[EMAIL PROTECTED]>
> > 
> > diff -r c860739bb0f4 drivers/scsi/qla2xxx/qla_def.h
> > --- a/drivers/scsi/qla2xxx/qla_def.h        Fri Feb 16 14:19:34 2007 -0800
> > +++ b/drivers/scsi/qla2xxx/qla_def.h        Fri Feb 16 14:21:29 2007 -0800
> > @@ -1478,14 +1478,17 @@ typedef union {
> >     uint32_t b24 : 24;
> >  
> >     struct {
> > -           uint8_t d_id[3];
> > -           uint8_t rsvd_1;
> > -   } r;
> > -
> > -   struct {
> > +#ifdef __BIG_ENDIAN
> > +           uint8_t domain;
> > +           uint8_t area;
> > +           uint8_t al_pa;
> > +#elif __LITTLE_ENDIAN
> >             uint8_t al_pa;
> >             uint8_t area;
> >             uint8_t domain;
> > +#else
> > +#error "__BIG_ENDIAN or __LITTLE_ENDIAN must be defined!"
> > +#endif
> >             uint8_t rsvd_1;
> >     } b;
> >  } port_id_t;
> > 
> -
> 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
-
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