Re: [PATCH RFC] more struct scsi_lun

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Oct 24, 2005, at 3:03 PM, Stefan Richter wrote:

Luben Tuikov wrote:

On 10/23/05 12:49, Jeff Garzik wrote:

Stefan Richter wrote:

               sprintf(s+2*i, "%02x", lun.scsi_lun[i]);

There is obviously room for improvement. Any naive representation is sub-optimal, be it for small luns (my current code) or larger luns (your example).

For situations with smaller luns, we should probably continue to use the current scsilun_to_int() conversion, while using your example for larger luns, i.e.

    if (upper 4 bytes zero)
        scsilun to int
        printk %d
    else
        for each byte
            printk %x

But Douglas's code suggested that if we are more motivated, we could provide an even better representation.

A plain, non-interpreted representation should suffice. Compact but
easily parseable, i.e. uniform.

If a LUN is u8[8], then,
#define SAS_ADDR(_sa) ((unsigned long long) be64_to_cpu(*(__be64 *)(_sa)))

This could be a problem because if a LUN is u8[8], it may not be aligned, so casting to __be64 and such could be a problem in some architectures.

"%016llx", SAS_ADDR(LUN)  prints it like this (e.g.):
sas: 5000c50000513329 probing LUN:0000000000000000
sas: device 500000e000031c12 LUN: 0000000000000000 powering up or not ready yet, sleeping...
sas: 500000e000031c12 probing LUN:0000000000000000
sas: device 50001c171601060d LUN: 0000000000000000 powering up or not ready yet, sleeping...
This is from drivers/scsi/sas/sas_discover.c.
    Luben

What about an 64bit integer as carrier of LUN in the first place? The
most frequent occurrence of LUN data is when it is passed through in
function calls but it seems rarely to be manipulated.

--- linux/include/scsi/scsi.h.orig 2005-10-20 08:23:05.000000000 +0200
+++ linux/include/scsi/scsi.h   2005-10-24 21:45:41.000000000 +0200
@@ -238,9 +238,7 @@
 /*
  * ScsiLun: 8 byte LUN.
  */
-struct scsi_lun {
-       __u8 scsi_lun[8];
-};
+typedef __be64 scsi_lun;

 /*
  *  MESSAGE CODES

Typedef-ing to __be64 would seem to avoid the likely alignment problem that the casting solution above could run into. I have to say that I don't know enough about SCSI to make a recommendation, but I know enough about alignment problems in some architectures to worry about that.

--
Mark Rustad, MRustad@xxxxxxx

-
: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux