[PATCH] sgioread: Use correct cdb len
authorJens Axboe <axboe@suse.de>
Wed, 23 Nov 2005 11:24:23 +0000 (12:24 +0100)
committerJens Axboe <axboe@suse.de>
Wed, 23 Nov 2005 11:24:23 +0000 (12:24 +0100)
sgioread.c

index 8670148a131dd53be6e36ed2a9f316275b88ca7a..f678fd6d63ca8b91af80964da225186f59efd314 100644 (file)
@@ -147,6 +147,20 @@ int write_the_crap(int fd_out, char *buffer, int length)
        return ret;
 }
 
+void hdr_init(struct sg_io_hdr *hdr, char *p, char *cdb)
+{
+       memset(hdr, 0, sizeof(*hdr));
+
+       hdr->cmdp = cdb;
+       memset(hdr->cmdp, 0, 10);
+
+       hdr->interface_id = 'S';
+       hdr->cmd_len = 10;
+       hdr->dxfer_direction = SG_DXFER_FROM_DEV;
+       hdr->dxferp = p;
+       hdr->cmdp[0] = GPCMD_READ_10;
+}
+
 int main(int argc, char *argv[])
 {
        struct sg_io_hdr *hdr;
@@ -194,7 +208,6 @@ int main(int argc, char *argv[])
                blocks = MAX_XFER / block_size;
 
        hdr = malloc(sizeof(*hdr));
-       memset(hdr, 0, sizeof(*hdr));
 
        ptr = malloc(blocks * block_size + block_size - 1);
        if (force_unaligned) {
@@ -204,15 +217,6 @@ int main(int argc, char *argv[])
        } else
                buffer = ALIGN(ptr);
 
-       hdr->cmdp = cdb;
-       memset(hdr->cmdp, 0, sizeof(cdb));
-
-       hdr->interface_id = 'S';
-       hdr->cmd_len = sizeof(cdb);
-       hdr->dxfer_direction = SG_DXFER_FROM_DEV;
-       hdr->dxferp = buffer;
-       hdr->cmdp[0] = GPCMD_READ_10;
-
        lba = start_lba;
                nr_blocks = end_lba - lba + 1;
 
@@ -226,6 +230,8 @@ int main(int argc, char *argv[])
                if (blocks > nr_blocks)
                        blocks = nr_blocks;
 
+               hdr_init(hdr, buffer, cdb);
+
                hdr->dxfer_len = blocks * block_size;
                hdr->cmdp[2] = (lba >> 24) & 0xff;
                hdr->cmdp[3] = (lba >> 16) & 0xff;