Kai's latest patch passes all my tests on the DAT DSS drive Fails on the older LTO3 as it should. (un-partionable) I don't have the new LTO5 yet, arrives end of week I am told. Testing log ----------- [root@srp-server ~]# uname -a Linux srp-server 4.4.0 #1 SMP Thu Jan 28 15:06:45 EST 2016 x86_64 x86_64 x86_64 GNU/Linux Storage Changer /dev/sg3:1 Drives, 6 Slots ( 0 Import/Export ) Data Transfer Element 0:Full (Storage Element 2 Loaded) Storage Element 1:Full Storage Element 2:Empty Storage Element 3:Full Storage Element 4:Full Storage Element 5:Full Storage Element 6:Empty [root@srp-server home]# mtx -f /dev/sg3 unload 2 0 Unloading drive 0 into Storage Element 2...done [root@srp-server home]# mtx -f /dev/sg3 load 3 0 Loading media from Storage Element 3 into drive 0...done [root@srp-server home]# sg_map -st -i /dev/sg2 /dev/nst0 HP DAT72X6 B409 /dev/sg3 HP DAT72X6 B409 [root@srp-server home]# mt -f /dev/st0 stsetoption can-partitions [root@srp-server home]# mt -f /dev/st0 mkpartition 10000 Tape screen shows Format Completed with no errors and I can set to a specific partition Feb 04 13:42:27 srp-server kernel: st: Unloaded. Feb 04 13:43:57 srp-server kernel: st: Version 20160203, fixed bufsize 32768, s/g segs 256 Feb 04 13:43:57 srp-server kernel: st: Debugging enabled debug_flag = 1 Feb 04 13:43:57 srp-server kernel: st 6:0:1:0: Attached scsi tape st0 Feb 04 13:43:57 srp-server kernel: st 6:0:1:0: st0: try direct i/o: yes (alignment 4 B) Feb 04 13:48:30 srp-server kernel: st 6:0:1:0: [st0] Block limits 1 - 16777215 bytes. Feb 04 13:48:30 srp-server kernel: st 6:0:1:0: [st0] Mode sense. Length 11, medium 0, WBS 10, BLL 8 Feb 04 13:48:30 srp-server kernel: st 6:0:1:0: [st0] Density 47, tape length: 0, drv buffer: 1 Feb 04 13:48:30 srp-server kernel: st 6:0:1:0: [st0] Block size: 0, buffer size: 4096 (1 blocks). Feb 04 13:48:30 srp-server kernel: st 6:0:1:0: [st0] Updating partition number in status. Feb 04 13:48:30 srp-server kernel: st 6:0:1:0: [st0] Got tape pos. blk 0 part 0. Feb 04 13:48:30 srp-server kernel: st 6:0:1:0: [st0] Mode 0 options: buffer writes: 1, async writes: 1, read ahead: 1 Feb 04 13:48:30 srp-server kernel: st 6:0:1:0: [st0] can bsr: 1, two FMs: 0, fast mteom: 0, auto lock: 0, Feb 04 13:48:30 srp-server kernel: st 6:0:1:0: [st0] defs for wr: 0, no block limits: 0, partitions: 1, s2 log: 0 Feb 04 13:48:30 srp-server kernel: st 6:0:1:0: [st0] sysv: 0 nowait: 0 sili: 0 nowait_filemark: 0 Feb 04 13:48:30 srp-server kernel: st 6:0:1:0: [st0] debugging: 1 Feb 04 13:48:30 srp-server kernel: st 6:0:1:0: [st0] Rewinding tape. Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] Block limits 1 - 16777215 bytes. Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] Mode sense. Length 11, medium 0, WBS 10, BLL 8 Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] Density 47, tape length: 0, drv buffer: 1 Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] Block size: 0, buffer size: 4096 (1 blocks). Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] Loading tape. Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] Error: 8000002, cmd: 0 0 0 0 0 0 Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] Sense Key : Unit Attention [current] Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] Add. Sense: Not ready to ready change, medium may have changed Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] Block limits 1 - 16777215 bytes. Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] Mode sense. Length 11, medium 0, WBS 10, BLL 8 Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] Density 47, tape length: 0, drv buffer: 1 Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] Block size: 0, buffer size: 4096 (1 blocks). Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] Partition page length is 10 bytes. Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] PP: max 1, add 0, xdp 0, psum 02, pofmetc 0, rec 03, units 00, sizes: 0 65535 Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] MP: 11 08 01 00 10 03 00 00 00 00 ff ff Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] psd_cnt 1, max.parts 1, nbr_parts 0 Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] Formatting tape with two partitions (1 = 10000 MB). Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] Sent partition page length is 10 bytes. needs_format: 0 Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] PP: max 1, add 1, xdp 1, psum 02, pofmetc 0, rec 03, units 00, sizes: 10000 65535 Feb 04 13:48:42 srp-server kernel: st 6:0:1:0: [st0] MP: 11 08 01 01 30 03 00 00 27 10 ff ff Tested-by: Laurence Oberman <loberman@xxxxxxxxxx> Laurence Oberman Principal Software Maintenance Engineer Red Hat Global Support Services Laurence Oberman Principal Software Maintenance Engineer Red Hat Global Support Services ----- Original Message ----- From: "Douglas Gilbert" <dgilbert@xxxxxxxxxxxx> To: "Kai Mäkisara (Kolumbus)" <kai.makisara@xxxxxxxxxxx>, "Shane M Seymour" <shane.seymour@xxxxxxx> Cc: "Laurence Oberman" <loberman@xxxxxxxxxx>, "Emmanuel Florac" <eflorac@xxxxxxxxxxxxxx>, "Laurence Oberman" <oberman.l@xxxxxxxxx>, linux-scsi@xxxxxxxxxxxxxxx Sent: Thursday, February 4, 2016 1:09:30 PM Subject: Re: What partition should the MTMKPART argument specify? Was: Re: st driver doesn't seem to grok LTO partitioning Hi, With a HP Ultrium 3000 tape drive (LTO-5) and a HP C7975A tape cartridge (LTO-5 and partition capable) and mt as patched by Shane: # lsscsi -g [1:0:0:0] disk ATA ST3320620AS K /dev/sda /dev/sg0 [6:0:0:0] tape HP Ultrium 5-SCSI Z64D /dev/st0 /dev/sg1 # sg_read_attr -s 3 /dev/sg1 Partition number list: First partition number: 0 Number of partitions available: 1 # mt -f /dev/st0 stsetoption debug # mt -f /dev/st0 stsetoption can-partitions # mt -f /dev/st0 mkpartition 10000 The following was cut and pasted from /var/log/messages st 6:0:0:0: [st0] Block limits 1 - 16777215 bytes. [st0] Mode sense. Length 11, medium 0, WBS 10, BLL 8 [st0] Density 58, tape length: 0, drv buffer: 1 [st0] Block size: 0, buffer size: 4096 (1 blocks). [st0] Updating partition number in status. [st0] Got tape pos. blk 0 part 0. [st0] Loading tape. [st0] Block limits 1 - 16777215 bytes. [st0] Mode sense. Length 11, medium 0, WBS 10, BLL 8 [st0] Density 58, tape length: 0, drv buffer: 1 [st0] Block size: 0, buffer size: 4096 (1 blocks). [st0] Partition page length is 12 bytes. [st0] PP: max 1, add 0, xdp 1, psum 03, pofmetc 4, rec 03, units 09, sizes: 1529 0 [st0] MP: 11 0a 01 00 3c 03 09 00 05 f9 00 00 [st0] psd_cnt 2, max.parts 1, nbr_parts 0 [st0] Formatting tape with two partitions (1 = 10000 MB). [st0] Sent partition page length is 12 bytes. needs_format: 1 [st0] PP: max 1, add 1, xdp 1, psum 03, pofmetc 4, rec 03, units 09, sizes: 65535 10 [st0] MP: 11 0a 01 01 3c 03 09 00 ff ff 00 0a [st0] Sending FORMAT MEDIUM [st0] Rewinding tape. # sg_read_attr -s 3 /dev/sg1 Partition number list: First partition number: 0 Number of partitions available: 2 Looks good. Tested-by: Douglas Gilbert <dgilbert@xxxxxxxxxxxx> On 16-02-04 12:54 PM, "Kai Mäkisara (Kolumbus)" wrote: > >> 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 > -- 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