Re: What partition should the MTMKPART argument specify? Was: Re: st driver doesn't seem to grok LTO partitioning

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

 



> On 4.2.2016, at 3.43, Seymour, Shane M <shane.seymour@xxxxxxx> wrote:
> 
> Hi Kai,
> 
> Tested with patched kernel 4.5.0-rc2-next-20160202+. It's looking good everything partition related passed with DDS5 and LTO6. You can definitely add me as a tested-by. I did find one issue below but it's not related to the partitioning changes.
> 
Thanks for testing. It would be interesting to get confirmation from a LTO-5 user that partitioning
works. Even without that I will make the final patch within a few days (remove some debugging
and update the documentation).

...
> I did find one issue in testing unrelated to the changes, the tell option didn't work with my LTO-6 drive:
> 
> # ./mt -f /dev/st0 tell
> /dev/st0: Input/output error
> 
> [ 2045.974642] st 3:0:0:0: [st0] Block limits 1 - 16777215 bytes.
> [ 2045.975221] st 3:0:0:0: [st0] Mode sense. Length 11, medium 0, WBS 10, BLL 8
> [ 2045.975224] st 3:0:0:0: [st0] Density 5a, tape length: 0, drv buffer: 1
> [ 2045.975226] st 3:0:0:0: [st0] Block size: 0, buffer size: 4096 (1 blocks).
> [ 2045.975718] st 3:0:0:0: [st0] Error: 8000002, cmd: 34 1 0 0 0 0
> [ 2045.975723] st 3:0:0:0: [st0] Sense Key : Illegal Request [current]
> [ 2045.975726] st 3:0:0:0: [st0] Add. Sense: Invalid field in cdb
> [ 2045.975729] st 3:0:0:0: [st0]  Can't read tape position.
> [ 2045.975857] st 3:0:0:0: [st0] Rewinding tape.
> 
> I believe that in get_location() we're doing this:
> 
> static int get_location(struct scsi_tape *STp, unsigned int *block, int *partition,
>                        int logical)
> {
>        int result;
>        unsigned char scmd[MAX_COMMAND_SIZE];
>        struct st_request *SRpnt;
> 
>        if (STp->ready != ST_READY)
>                return (-EIO);
> 
>        memset(scmd, 0, MAX_COMMAND_SIZE);
>        if ((STp->device)->scsi_level < SCSI_2) {
>                scmd[0] = QFA_REQUEST_BLOCK;
>                scmd[4] = 3;
>        } else {
>                scmd[0] = READ_POSITION;
>                if (!logical && !STp->scsi2_logical)
>                        scmd[1] = 1; <<<<<<<<<<<<<<
>        }
> 
> When called from the ioctl that the tell option uses the variable logical is passed in as 0 (from what I could see everything else sets it to 1). For a READ_POSITION the drive I'm using only supports 0, 6, or 8 in the service action field of the second byte:
> 
I think you have not set the scsi2_logical option bit with mt or stinit or some other tool.
The default of device-specific addresses is a historical mistake but we have to live with
it. I don’t see this as a big problem because any user of current drives should enable
some driver options anyway.

Thanks,
Kai

--
To unsubscribe from this list: 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