New command -scsi_dev_family, new -as cdrecord option drive_scsi_dev_family=

This commit is contained in:
Thomas Schmitt 2016-03-18 13:55:09 +00:00
parent 0cc08e00c0
commit 027e401ef9
19 changed files with 337 additions and 119 deletions

View File

@ -28,6 +28,7 @@ isoburn_get_mount_params;
isoburn_igopt_attach_jte;
isoburn_igopt_destroy;
isoburn_igopt_detach_jte;
isoburn_igopt_get_appended_as_apm;
isoburn_igopt_get_appended_as_gpt;
isoburn_igopt_get_data_start;
isoburn_igopt_get_disc_label;
@ -42,6 +43,7 @@ isoburn_igopt_get_out_charset;
isoburn_igopt_get_over_mode;
isoburn_igopt_get_over_ugid;
isoburn_igopt_get_part_flags;
isoburn_igopt_get_part_like_isohybrid;
isoburn_igopt_get_partition_img;
isoburn_igopt_get_prep_partition;
isoburn_igopt_get_pvd_times;
@ -55,6 +57,7 @@ isoburn_igopt_get_tail_blocks;
isoburn_igopt_get_untranslated_name_len;
isoburn_igopt_get_write_type;
isoburn_igopt_new;
isoburn_igopt_set_appended_as_apm;
isoburn_igopt_set_appended_as_gpt;
isoburn_igopt_set_disc_label;
isoburn_igopt_set_efi_bootp;
@ -67,6 +70,7 @@ isoburn_igopt_set_out_charset;
isoburn_igopt_set_over_mode;
isoburn_igopt_set_over_ugid;
isoburn_igopt_set_part_flag;
isoburn_igopt_set_part_like_isohybrid;
isoburn_igopt_set_partition_img;
isoburn_igopt_set_prep_partition;
isoburn_igopt_set_pvd_times;
@ -287,6 +291,7 @@ Xorriso_option_rollback;
Xorriso_option_rom_toc_scan;
Xorriso_option_rr_reloc_dir;
Xorriso_option_scdbackup_tag;
Xorriso_option_scsi_dev_family;
Xorriso_option_scsi_log;
Xorriso_option_session_log;
Xorriso_option_setfacli;

View File

@ -207,6 +207,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
m->displacement_sign= 0;
m->read_fs= 0;
m->drives_exclusive= 1;
m->linux_scsi_dev_family= 0;
m->early_stdio_test= 0;
m->cache_num_tiles= 0;
m->cache_tile_blocks= 0;

View File

@ -329,10 +329,11 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, char *show_adr,
aquire_flag|= 64;
if(flag & 128)
aquire_flag|= 256;
burn_preset_device_open(xorriso->drives_exclusive, 0, 0);
burn_preset_device_open(xorriso->drives_exclusive |
(xorriso->linux_scsi_dev_family << 2), 0, 0);
burn_allow_drive_role_4(1 | (xorriso->early_stdio_test & 14));
ret= isoburn_drive_aquire(&dinfo, libburn_adr, aquire_flag);
burn_preset_device_open(1, 0, 0);
burn_preset_device_open(1 | (xorriso->linux_scsi_dev_family << 2), 0, 0);
Xorriso_process_msg_queues(xorriso,0);
if(ret<=0) {
if(flag & 128)
@ -3404,3 +3405,10 @@ int Xorriso_pretend_full_disc(struct XorrisO *xorriso, int flag)
return(1);
}
int Xorriso_scsi_dev_family(struct XorrisO *xorriso, int flag)
{
burn_preset_device_open(xorriso->drives_exclusive | (xorriso->linux_scsi_dev_family << 2), 0, 0);
return(1);
}

View File

@ -54,6 +54,7 @@ int Xorriso_cdrskin_help(struct XorrisO *xorriso, int flag)
"\t-version\tprint version information and exit emulation",
"\t--devices\tprint list of available MMC drives and exit emulation",
"\tdev=target\tpseudo-SCSI target to use as CD-Recorder",
"\tdrive_scsi_dev_family=sr|scd|sg\t\tselect Linux device type",
"\t-v\t\tincrement verbose level by one",
"\t-V\t\tincrement SCSI command transport verbose level by one",
"\t-checkdrive\tcheck if a driver for the drive is present",
@ -126,7 +127,7 @@ int Xorriso_cdrskin(struct XorrisO *xorriso, char *whom, int argc, char **argv,
"gracetime=",
"assert_write_lba=", "fifo_start_at=", "dev_translation=",
"drive_scsi_dev_family=", "fallback_program=",
"fallback_program=",
"tao_to_sao_tsize=",
"direct_write_amount=", "msifile=",
@ -346,6 +347,11 @@ no_volunteer:;
cpt= strchr(argpt, '=') + 1;
Xorriso_option_modesty_on_drive(xorriso, cpt, 0);
} else if(strncmp(argpt, "-drive_scsi_dev_family=", 23) == 0 ||
strncmp(argpt, "drive_scsi_dev_family=", 22) == 0) {
cpt= strchr(argpt, '=') + 1;
Xorriso_option_scsi_dev_family(xorriso, cpt, 0);
} else if(strncmp(argpt, "-stdio_sync=", 12)==0 ||
strncmp(argpt, "stdio_sync=", 11)==0) {
cpt= strchr(argpt, '=') + 1;

View File

@ -1090,7 +1090,8 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
strncmp(dev, "mmc:", 4) != 0)
sprintf(libburn_adr, "stdio:%s", dev);
burn_preset_device_open(
xorriso->drives_exclusive && !(xorriso->mount_opts_flag & 1), 0, 0);
(xorriso->drives_exclusive && !(xorriso->mount_opts_flag & 1)) |
(xorriso->linux_scsi_dev_family << 2), 0, 0);
aquire_flag= 1;
if((xorriso->toc_emulation_flag & 2) && adr_mode == 3)
aquire_flag|= 16;
@ -1099,7 +1100,7 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
if(xorriso->toc_emulation_flag & 8)
aquire_flag|= 512;
ret= isoburn_drive_aquire(&dinfo, libburn_adr, aquire_flag);
burn_preset_device_open(1, 0, 0);
burn_preset_device_open(1 | (xorriso->linux_scsi_dev_family << 2), 0, 0);
Xorriso_process_msg_queues(xorriso,0);
if(ret <= 0)
{ret= 0; goto ex;}

View File

@ -1710,6 +1710,8 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" those lists empty. Defaulty entry in \"risky\" is \"/dev\".",
" -grow_blindly \"off\"|predicted_nwa",
" Switch between modifying and blind growing.",
" -scsi_dev_family \"default\"|\"sr\"|\"scd\"|\"sg\"",
" Linux specific: Choose device file type.",
" -read_speed number[\"k/s\"|\"m/s\"|\"[x]CD\"|\"[x]DVD\"|\"[x]BD\"]",
" Set the read speed. Default is \"none\" = do not set speed",
" before reading.",

View File

@ -1,7 +1,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2015 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2016 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -779,6 +779,28 @@ int Xorriso_option_scdbackup_tag(struct XorrisO *xorriso, char *listname,
}
/* Command -scsi_dev_family */
int Xorriso_option_scsi_dev_family(struct XorrisO *xorriso, char *mode,
int flag)
{
if(strcmp(mode, "default") == 0)
xorriso->linux_scsi_dev_family= 0;
else if(strcmp(mode, "sr") == 0)
xorriso->linux_scsi_dev_family= 1;
else if(strcmp(mode, "scd") == 0)
xorriso->linux_scsi_dev_family= 2;
else if(strcmp(mode, "sg") == 0)
xorriso->linux_scsi_dev_family= 4;
else {
sprintf(xorriso->info_text, "-scsi_dev_family: unknown family '%s'", mode);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
}
Xorriso_scsi_dev_family(xorriso, 0);
return(1);
}
/* Option -scsi_log */
int Xorriso_option_scsi_log(struct XorrisO *xorriso, char *mode, int flag)
{

View File

@ -541,7 +541,7 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
"prog","prog_help","publisher","quoted_not_list","quoted_path_list",
"read_fs","read_speed","reassure","report_about",
"report_el_torito","report_system_area","rockridge",
"rom_toc_scan","rr_reloc_dir","scsi_log",
"rom_toc_scan","rr_reloc_dir","scsi_dev_family","scsi_log",
"session_log","sh_style_result","signal_handling","sleep",
"speed","split_size","status","status_history_max",
"stdio_sync","stream_recording","system_id","temp_mem_limit","toc_of",
@ -680,6 +680,7 @@ int Xorriso_cmd_sorting_rank(struct XorrisO *xorriso,
"ecma119_map",
"disk_dev_ino", "rom_toc_scan", "calm_drive", "ban_stdio_write",
"early_stdio_test", "data_cache_size",
"scsi_dev_family",
"* Character sets:",
"charset", "local_charset",
@ -1721,6 +1722,10 @@ next_command:;
(*idx)+= 2;
ret= Xorriso_option_scdbackup_tag(xorriso, arg1, arg2, 0);
} else if(strcmp(cmd, "scsi_dev_family") == 0) {
(*idx)++;
ret= Xorriso_option_scsi_dev_family(xorriso, arg1, 0);
} else if(strcmp(cmd, "scsi_log") == 0) {
(*idx)++;
ret= Xorriso_option_scsi_log(xorriso, arg1, 0);

View File

@ -2775,6 +2775,8 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
static char channel_prefixes[4][4]= {".","R","I","M"};
static char load_names[][20]= {"auto", "session", "track", "lba", "volid"};
static int max_load_mode= 4;
static char scsi_family[8][8]=
{"default", "sr", "scd", "st", "sg", "", "", ""};
struct Xorriso_lsT *paths, *leafs, *s, *plst, *vlst;
Xorriso_alloc_meM(sfe, char, 5 * SfileadrL + 80);
@ -3750,6 +3752,12 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
}
}
is_default= (xorriso->linux_scsi_dev_family == 0);
sprintf(line, "-scsi_dev_family %s\n",
scsi_family[xorriso->linux_scsi_dev_family & 7]);
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
do_single= 0;
dev_filter= filter;
if(dev_filter != NULL) {

View File

@ -9,7 +9,7 @@
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH XORRECORD 1 "Version 1.4.3, Feb 05, 2016"
.TH XORRECORD 1 "Version 1.4.3, Mar 18, 2016"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@ -527,6 +527,25 @@ Afterwards end emulation without performing any drive operation.
Only if used as first command line argument this option
prevents reading and interpretation of startup files. See section FILES below.
.TP
\fBdrive_scsi_dev_family=sr|sdc|sg|default\fR
GNU/Linux specific:
.br
By default, cdrskin tries to map Linux drive addresses to /dev/sr* before
they get opened for operating the drive. This coordinates well with
other use cases of optical drives, like mount(8). But since year 2010
all /dev/sr* share a global lock which allows only one drive to process
an SCSI command while all others have to wait for its completion.
This yields awful throughput if more than one drive is writing or reading
simultaneously.
.br
The global lock is not applied to device files /dev/sg* and also not with
the system calls read(2), write(2). But ioctl(SG_IO) is affected, which is
needed to perform the SCSI commands for optical burning.
.br
So for simultaneous burn runs on modern GNU/Linux it is advisable to use
drive_scsi_dev_family="sg". The drive addresses may then well be given as
/dev/sr* but will nevertheless get used as /dev/sg*.
.TP
\fB--grow_overwriteable_iso\fR
Enable emulation of multi\-session writing on overwriteable media which
contain an ISO 9660 filesystem. This emulation is learned from growisofs \-M
@ -589,7 +608,8 @@ reaches a given low percentage value.
This can ease the load on operating system and drive controller and thus help
with achieving better input bandwidth if disk and burner are not on independent
controllers (like hda and hdb). It may also help with simultaneous burns on
different burners with Linux kernels like 3.16. On the other hand it increases
different burners with Linux kernels like 3.16, if one has reason not to fix
the problem by drive_scsi_dev_family="sg". On the other hand it increases
the risk of buffer underflow and thus reduced write speed.
.br
Some burners are not suitable because they

View File

@ -498,6 +498,23 @@ File: xorrecord.info, Node: NonCdrecord, Next: ExDevices, Prev: Verbous, Up:
Only if used as first command line argument this option prevents
reading and interpretation of startup files. See section FILES
below.
drive_scsi_dev_family=sr|sdc|sg|default
GNU/Linux specific:
By default, cdrskin tries to map Linux drive addresses to /dev/sr*
before they get opened for operating the drive. This coordinates
well with other use cases of optical drives, like mount(8). But
since year 2010 all /dev/sr* share a global lock which allows only
one drive to process an SCSI command while all others have to wait
for its completion. This yields awful throughput if more than one
drive is writing or reading simultaneously.
The global lock is not applied to device files /dev/sg* and also
not with the system calls read(2), write(2). But ioctl(SG_IO) is
affected, which is needed to perform the SCSI commands for optical
burning.
So for simultaneous burn runs on modern GNU/Linux it is advisable
to use drive_scsi_dev_family="sg". The drive addresses may then
well be given as /dev/sr* but will nevertheless get used as
/dev/sg*.
--grow_overwriteable_iso
Enable emulation of multi-session writing on overwriteable media
which contain an ISO 9660 filesystem. This emulation is learned
@ -553,8 +570,9 @@ modesty_on_drive=parameter[:parameters]
thus help with achieving better input bandwidth if disk and burner
are not on independent controllers (like hda and hdb). It may also
help with simultaneous burns on different burners with Linux
kernels like 3.16. On the other hand it increases the risk of
buffer underflow and thus reduced write speed.
kernels like 3.16, if one has reason not to fix the problem by
drive_scsi_dev_family="sg". On the other hand it increases the
risk of buffer underflow and thus reduced write speed.
Some burners are not suitable because they report buffer fill with
granularity too coarse in size or time, or expect their buffer to
be filled to the top before they go to full speed.
@ -851,9 +869,9 @@ File: xorrecord.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T
* --devices get list of drives: DriveAddr. (line 8)
* --grow_overwriteable_iso emulate ISO 9660 multi-session: NonCdrecord.
(line 12)
(line 29)
* --multi_if_possible apply -multi if medium is suitable: NonCdrecord.
(line 32)
(line 49)
* --no_rc do not execute xorriso startup files: NonCdrecord. (line 8)
* -atip inquire medium state: Inquire. (line 14)
* -checkdrive inquire drive CD capabilities: Inquire. (line 11)
@ -866,7 +884,7 @@ File: xorrecord.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T
* -inq inquire drive identifiers: Inquire. (line 8)
* -isosize obtain track size from ISO 9660 superblock: SetBurn.
(line 137)
* -modesty_on_drive keep drive buffer hungry: NonCdrecord. (line 56)
* -modesty_on_drive keep drive buffer hungry: NonCdrecord. (line 73)
* -msinfo retrieve multi-session info: Inquire. (line 43)
* -multi keep media appendable after burn run: SetBurn. (line 89)
* -nopad disable adding of bytes to end of track: SetBurn. (line 151)
@ -881,17 +899,19 @@ File: xorrecord.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T
(line 113)
* blank= make media re-usabable or format media: SetBurn. (line 28)
* dev= address the drive to be used: DriveAddr. (line 21)
* dvd_obs= set write transaction payload size: NonCdrecord. (line 49)
* drive_scsi_dev_family= Linux device type to be used: NonCdrecord.
(line 12)
* dvd_obs= set write transaction payload size: NonCdrecord. (line 66)
* fs= set program fifo size: SetBurn. (line 174)
* minbuf= keep drive buffer hungry: SetBurn. (line 205)
* padsize= add bytes to end of track: SetBurn. (line 144)
* speed= set write speed: SetBurn. (line 189)
* stdio_sync= control stdio buffer: NonCdrecord. (line 98)
* stdio_sync= control stdio buffer: NonCdrecord. (line 116)
* stream_recording= try to get full speed on DVD-RAM, BD: NonCdrecord.
(line 39)
(line 56)
* tsize= set a fixed track size: SetBurn. (line 126)
* write_start_address= set block address for write start: NonCdrecord.
(line 92)
(line 110)

File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
@ -905,20 +925,22 @@ File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Accessing drive, wait for stdin, -waiti: SetBurn. (line 113)
* Bugs, reporting: Bugreport. (line 6)
* Data track, announce, -data: SetBurn. (line 157)
* Defect management, control, stream_recording=: NonCdrecord. (line 39)
* Defect management, control, stream_recording=: NonCdrecord. (line 56)
* Drive, address, dev=: DriveAddr. (line 21)
* Drive, get list of, --devices: DriveAddr. (line 8)
* Drive, inquire CD capabilities, -checkdrive: Inquire. (line 11)
* Drive, inquire identifiers, -inq: Inquire. (line 8)
* Drive, Linux device type, drive_scsi_dev_family: NonCdrecord.
(line 12)
* Eject, the tray, -eject: SetBurn. (line 211)
* Examples: Examples. (line 6)
* Fifo, set size, fs=: SetBurn. (line 174)
* Full speed, on DVD-RAM and BD, stream_recording=: NonCdrecord.
(line 39)
(line 56)
* Media types, _definiton: Standards. (line 23)
* Media, blank, blank=: SetBurn. (line 28)
* Media, format, blank=: SetBurn. (line 28)
* Media, keep appendable, --multi_if_possible: NonCdrecord. (line 32)
* Media, keep appendable, --multi_if_possible: NonCdrecord. (line 49)
* Media, keep appendable, -multi: SetBurn. (line 89)
* Media, make re-usable, blank=: SetBurn. (line 28)
* medium content, inquire, -toc: Inquire. (line 22)
@ -926,7 +948,7 @@ File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* MMC, _definiton: Standards. (line 6)
* multi-session info, retrieve, -msinfo: Inquire. (line 43)
* Multi-session, emulate ISO 9660, --grow_overwriteable_iso: NonCdrecord.
(line 12)
(line 29)
* Options, overview, -help: Verbous. (line 30)
* Overwritable media, _definiton: Standards. (line 30)
* Padding, at end of track, padsize=: SetBurn. (line 144)
@ -941,21 +963,21 @@ File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Track size, obtain from ISO 9660, -isosize: SetBurn. (line 137)
* Track size, set fixed, tsize=: SetBurn. (line 126)
* Track, _definiton: Standards. (line 13)
* Transaction size, set, dvd_obs=: NonCdrecord. (line 49)
* Transaction size, set, dvd_obs=: NonCdrecord. (line 66)
* Tray, eject, -eject: SetBurn. (line 211)
* Verbosity, increase, -v: Verbous. (line 16)
* Verbosity, SCSI commands, -V: Verbous. (line 20)
* Version, report, -version: Verbous. (line 8)
* Write simulation , control, -dummy: SetBurn. (line 106)
* Write start address, set, write_start_address=: NonCdrecord.
(line 92)
(line 110)
* Write type, SAO/DAO, -dao: SetBurn. (line 172)
* Write type, SAO/DAO, -sao: SetBurn. (line 168)
* Write type, TAO, -tao: SetBurn. (line 162)
* Write, buffer syncing, stdio_sync=: NonCdrecord. (line 98)
* Write, buffer syncing, stdio_sync=: NonCdrecord. (line 116)
* Write, drive buffer, -immed: SetBurn. (line 208)
* Write, drive buffer, minbuf=: SetBurn. (line 205)
* Write, drive buffer, modesty_on_drive=: NonCdrecord. (line 56)
* Write, drive buffer, modesty_on_drive=: NonCdrecord. (line 73)
* xorriso, mkisofs emulation: Xorriso. (line 6)
* xorriso, options: Options. (line 6)
@ -973,21 +995,21 @@ Node: Inquire7618
Node: SetBurn10487
Node: Verbous20938
Node: NonCdrecord22488
Node: Examples28246
Node: ExDevices28907
Node: ExMedium29125
Node: ExBlank29388
Node: ExFormat29609
Node: ExDeformat30127
Node: ExIsoSingle30394
Node: ExIsoMulti30678
Node: ExIsoFly32312
Node: ExAfio32983
Node: Files33981
Node: Seealso34537
Node: Bugreport34900
Node: Legal35491
Node: CommandIdx36420
Node: ConceptIdx39696
Node: Examples29314
Node: ExDevices29975
Node: ExMedium30193
Node: ExBlank30456
Node: ExFormat30677
Node: ExDeformat31195
Node: ExIsoSingle31462
Node: ExIsoMulti31746
Node: ExIsoFly33380
Node: ExAfio34051
Node: Files35049
Node: Seealso35605
Node: Bugreport35968
Node: Legal36559
Node: CommandIdx37488
Node: ConceptIdx40905

End Tag Table

View File

@ -50,7 +50,7 @@
@c man .\" First parameter, NAME, should be all caps
@c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
@c man .\" other parameters are allowed: see man(7), man(1)
@c man .TH XORRECORD 1 "Version 1.4.3, Feb 05, 2016"
@c man .TH XORRECORD 1 "Version 1.4.3, Mar 18, 2016"
@c man .\" Please adjust this date whenever revising the manpage.
@c man .\"
@c man .\" Some roff macros, for reference:
@ -732,6 +732,27 @@ Afterwards end emulation without performing any drive operation.
Only if used as first command line argument this option
prevents reading and interpretation of startup files. See section FILES below.
@c man .TP
@item drive_scsi_dev_family=sr|sdc|sg|default
@kindex drive_scsi_dev_family= Linux device type to be used
@cindex Drive, Linux device type, drive_scsi_dev_family
GNU/Linux specific:
@*
By default, cdrskin tries to map Linux drive addresses to /dev/sr* before
they get opened for operating the drive. This coordinates well with
other use cases of optical drives, like mount(8). But since year 2010
all /dev/sr* share a global lock which allows only one drive to process
an SCSI command while all others have to wait for its completion.
This yields awful throughput if more than one drive is writing or reading
simultaneously.
@*
The global lock is not applied to device files /dev/sg* and also not with
the system calls read(2), write(2). But ioctl(SG_IO) is affected, which is
needed to perform the SCSI commands for optical burning.
@*
So for simultaneous burn runs on modern GNU/Linux it is advisable to use
drive_scsi_dev_family="sg". The drive addresses may then well be given as
/dev/sr* but will nevertheless get used as /dev/sg*.
@c man .TP
@item @minus{}@minus{}grow_overwriteable_iso
@kindex @minus{}@minus{}grow_overwriteable_iso emulate ISO 9660 multi-session
@cindex Multi-session, emulate ISO 9660, @minus{}@minus{}grow_overwriteable_iso
@ -805,7 +826,8 @@ reaches a given low percentage value.
This can ease the load on operating system and drive controller and thus help
with achieving better input bandwidth if disk and burner are not on independent
controllers (like hda and hdb). It may also help with simultaneous burns on
different burners with Linux kernels like 3.16. On the other hand it increases
different burners with Linux kernels like 3.16, if one has reason not to fix
the problem by drive_scsi_dev_family="sg". On the other hand it increases
the risk of buffer underflow and thus reduced write speed.
@*
Some burners are not suitable because they

View File

@ -9,7 +9,7 @@
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH XORRISO 1 "Version 1.4.3, Feb 05, 2016"
.TH XORRISO 1 "Version 1.4.3, Mar 18, 2016"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@ -304,6 +304,12 @@ the path of their block device or of their generic character device. E.g.
.br
\-dev /dev/sg2
.br
By default xorriso will try to map the given address to /dev/hd* and /dev/sr*.
The command \-scsi_dev_family can redirect the mapping from sr to scd or sg.
The latter does not suffer from the concurrency problems which plague /dev/sr
of Linux kernels since version 3. But it does not yield the same addresses
which are used by mount(8) or by open(2) for read(2).
.br
On FreeBSD the device files have names like
.br
\-dev /dev/cd0
@ -678,6 +684,26 @@ apply. See above paragraph "Libburn drives".
An empty address string "" gives up the current output drive
without acquiring a new one. No writing is possible without an output drive.
.TP
\fB\-scsi_dev_family\fR "default"|"sr"|"scd"|"sg"
GNU/Linux specific:
.br
By default, xorriso tries to map Linux drive addresses to /dev/sr* before
they get opened for operating the drive. This coordinates well with
other use cases of optical drives, like mount(8). But since year 2010
all /dev/sr* share a global lock which allows only one drive to process
an SCSI command while all others have to wait for its completion.
This yields awful throughput if more than one drive is writing or reading
simultaneously.
The global lock is not applied to device files /dev/sg* and also not if
the xorriso drive address is prepended by "stdio:".
.br
So for simultaneous burn runs on modern GNU/Linux it is advisable to perform
\-scsi_dev_family "sg" before any \-dev, \-indev, or \-outdev. The drive addresses
may then well be given as /dev/sr* but will nevertheless get used as /dev/sg*.
.br
If you decide so, consider to put the command into a global startup file like
/etc/opt/xorriso/rc.
.TP
\fB\-grow_blindly\fR "off"|predicted_nwa
If predicted_nwa is a non\-negative number then perform blind growing rather
than modifying if \-indev and \-outdev are set to different drives.
@ -2940,9 +2966,11 @@ reaches a given low percentage value.
.br
This can ease the load on operating system and drive controller and thus help
with achieving better input bandwidth if disk and burner are not on independent
controllers (like hda and hdb). It may also help with simultaneous burns on
different burners with Linux kernels like 3.16. On the other hand it increases
the risk of buffer underflow and thus reduced write speed.
controllers (like hda and hdb). It may also help with throughput problems of
simultaneous burns on different burners with Linux kernels like 3.16, if one
has reason not to fix the problem by \-scsi_dev_family "sg".
On the other hand it increases the risk of buffer underflow and thus
reduced write speed.
.br
Some burners are not suitable because they
report buffer fill with granularity too coarse in size or time,

View File

@ -1998,6 +1998,12 @@ int Xorriso_option_rr_reloc_dir(struct XorrisO *xorriso, char *name, int flag);
/* @since 0.4.4 */
int Xorriso_option_scdbackup_tag(struct XorrisO *xorriso, char *list_path,
char *record_name, int flag);
/* Command -scsi_dev_family */
/* @since 1.4.4 */
int Xorriso_option_scsi_dev_family(struct XorrisO *xorriso, char *mode,
int flag);
/* Command -scsi_log */
/* @since 0.5.0 */
int Xorriso_option_scsi_log(struct XorrisO *xorriso, char *mode, int flag);

View File

@ -278,6 +278,12 @@ character device. E.g.
-dev /dev/sr0
-dev /dev/hdc
-dev /dev/sg2
By default xorriso will try to map the given address to /dev/hd* and
/dev/sr*. The command -scsi_dev_family can redirect the mapping from sr
to scd or sg. The latter does not suffer from the concurrency problems
which plague /dev/sr of Linux kernels since version 3. But it does not
yield the same addresses which are used by mount(8) or by open(2) for
read(2).
On FreeBSD the device files have names like
-dev /dev/cd0
On NetBSD:
@ -626,6 +632,23 @@ acquire the drive.
An empty address string "" gives up the current output drive
without acquiring a new one. No writing is possible without an
output drive.
-scsi_dev_family "default"|"sr"|"scd"|"sg"
GNU/Linux specific:
By default, xorriso tries to map Linux drive addresses to /dev/sr*
before they get opened for operating the drive. This coordinates
well with other use cases of optical drives, like mount(8). But
since year 2010 all /dev/sr* share a global lock which allows only
one drive to process an SCSI command while all others have to wait
for its completion. This yields awful throughput if more than one
drive is writing or reading simultaneously. The global lock is not
applied to device files /dev/sg* and also not if the xorriso drive
address is prepended by "stdio:".
So for simultaneous burn runs on modern GNU/Linux it is advisable
to perform -scsi_dev_family "sg" before any -dev, -indev, or
-outdev. The drive addresses may then well be given as /dev/sr*
but will nevertheless get used as /dev/sg*.
If you decide so, consider to put the command into a global startup
file like /etc/opt/xorriso/rc.
-grow_blindly "off"|predicted_nwa
If predicted_nwa is a non-negative number then perform blind
growing rather than modifying if -indev and -outdev are set to
@ -2491,9 +2514,11 @@ according to the setting of command -acl.
This can ease the load on operating system and drive controller and
thus help with achieving better input bandwidth if disk and burner
are not on independent controllers (like hda and hdb). It may also
help with simultaneous burns on different burners with Linux
kernels like 3.16. On the other hand it increases the risk of
buffer underflow and thus reduced write speed.
help with throughput problems of simultaneous burns on different
burners with Linux kernels like 3.16, if one has reason not to fix
the problem by -scsi_dev_family "sg". On the other hand it
increases the risk of buffer underflow and thus reduced write
speed.
Some burners are not suitable because they report buffer fill with
granularity too coarse in size or time, or expect their buffer to
be filled to the top before they go to full speed.
@ -5096,7 +5121,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -chown sets ownership in ISO image: Manip. (line 43)
* -chown_r sets ownership in ISO image: Manip. (line 47)
* -clone copies ISO directory tree: Insert. (line 170)
* -close controls media closing: SetWrite. (line 371)
* -close controls media closing: SetWrite. (line 373)
* -close_damaged closes damaged track and session: Writing. (line 164)
* -close_filter_list bans filter registration: Filter. (line 50)
* -commit writes pending ISO image: Writing. (line 27)
@ -5125,7 +5150,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
(line 57)
* -drive_class controls drive accessability: Loading. (line 73)
* -du show directory size in ISO image: Navigate. (line 75)
* -dummy controls write simulation: SetWrite. (line 363)
* -dummy controls write simulation: SetWrite. (line 365)
* -dus show directory size in ISO image: Navigate. (line 78)
* -dusx show directory size on disk: Navigate. (line 85)
* -dux show directory size on disk: Navigate. (line 81)
@ -5149,13 +5174,13 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -follow softlinks and mount points: SetInsert. (line 69)
* -format formats media: Writing. (line 87)
* -for_backup -acl,-xattr,-hardlinks,-md5: Loading. (line 210)
* -fs sets size of fifo: SetWrite. (line 366)
* -fs sets size of fifo: SetWrite. (line 368)
* -getfacl shows ACL in ISO image: Navigate. (line 60)
* -getfacl_r shows ACL in ISO image: Navigate. (line 66)
* -getfattr shows xattr in ISO image: Navigate. (line 69)
* -getfattr_r shows xattr in ISO image: Navigate. (line 72)
* -gid sets global ownership: SetWrite. (line 271)
* -grow_blindly overides next writeable address: AqDrive. (line 43)
* -grow_blindly overides next writeable address: AqDrive. (line 60)
* -hardlinks controls handling of hard links: Loading. (line 134)
* -help prints help text: Scripting. (line 19)
* -hfsplus enables production of HFS+ partition: SetWrite. (line 14)
@ -5211,7 +5236,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -out_charset sets output character set: SetWrite. (line 263)
* -overwrite enables overwriting in ISO: SetInsert. (line 131)
* -pacifier controls pacifier text form: Emulation. (line 166)
* -padding sets amount or mode of image padding: SetWrite. (line 394)
* -padding sets amount or mode of image padding: SetWrite. (line 396)
* -page set terminal geometry: DialogCtl. (line 18)
* -paste_in copies file into disk file: Restore. (line 114)
* -pathspecs sets meaning of = with -add: SetInsert. (line 115)
@ -5250,6 +5275,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -rom_toc_scan searches for sessions: Loading. (line 278)
* -rr_reloc_dir sets name of relocation directory: SetWrite. (line 144)
* -scdbackup_tag enables scdbackup checksum tag: Emulation. (line 179)
* -scsi_dev_family choose Linux device file type: AqDrive. (line 43)
* -scsi_log reports SCSI commands: Scripting. (line 143)
* -session_log logs written sessions: Scripting. (line 134)
* -session_string composes session info line: Inquiry. (line 73)
@ -5272,7 +5298,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -split_size enables large file splitting: SetInsert. (line 143)
* -status shows current settings: Scripting. (line 44)
* -status_history_max curbs -status history: Scripting. (line 52)
* -stdio_sync controls stdio buffer: SetWrite. (line 356)
* -stdio_sync controls stdio buffer: SetWrite. (line 358)
* -stream_recording controls defect management: SetWrite. (line 303)
* -system_id sets system id: SetWrite. (line 199)
* -tell_media_space reports free space: Inquiry. (line 97)
@ -5288,7 +5314,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -volid sets volume id: SetWrite. (line 162)
* -volset_id sets volume set id: SetWrite. (line 182)
* -volume_date sets volume timestamp: SetWrite. (line 205)
* -write_type chooses TAO or SAO/DAO: SetWrite. (line 387)
* -write_type chooses TAO or SAO/DAO: SetWrite. (line 389)
* -x enables automatic execution order of arguments: ArgSort. (line 16)
* -xattr controls handling of xattr (EA): Loading. (line 178)
* -zisofs controls zisofs production: SetWrite. (line 274)
@ -5453,6 +5479,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Jigdo Template Extraction, -jigdo: Jigdo. (line 33)
* Jigdo Template Extraction, _definition: Jigdo. (line 6)
* LBA, _definition: Drives. (line 17)
* Linux device type, -scsi_dev_family: AqDrive. (line 43)
* List delimiter, _definition: Processing. (line 9)
* Local Character Set, _definition: Charset. (line 11)
* MBR bootable/active flag, enforce: Bootable. (line 306)
@ -5484,7 +5511,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Navigate, set ISO working directory, -cd: Navigate. (line 7)
* Navigate, tell disk working directory, -pwdx: Navigate. (line 21)
* Navigate, tell ISO working directory, -pwd: Navigate. (line 19)
* Next writeable address, -grow_blindly: AqDrive. (line 43)
* Next writeable address, -grow_blindly: AqDrive. (line 60)
* Output Character Set, _definition: Charset. (line 26)
* Overwriteable media, _definition: Media. (line 14)
* Ownership, global in ISO image, -uid: SetWrite. (line 268)
@ -5578,24 +5605,24 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Verify, preset -check_media, -check_media_defaults: Verify. (line 40)
* Write, block size, -dvd_obs: SetWrite. (line 314)
* Write, bootability, -boot_image: Bootable. (line 65)
* Write, buffer syncing, -stdio_sync: SetWrite. (line 356)
* Write, close media, -close: SetWrite. (line 371)
* Write, buffer syncing, -stdio_sync: SetWrite. (line 358)
* Write, close media, -close: SetWrite. (line 373)
* Write, compliance to specs, -compliance: SetWrite. (line 56)
* Write, defect management, -stream_recording: SetWrite. (line 303)
* Write, disable Rock Ridge, -rockridge: SetWrite. (line 51)
* Write, drive buffer, -modesty_on_drive: SetWrite. (line 320)
* Write, enable HFS+, -hfsplus: SetWrite. (line 14)
* Write, enable Joliet, -joliet: SetWrite. (line 10)
* Write, fifo size, -fs: SetWrite. (line 366)
* Write, fifo size, -fs: SetWrite. (line 368)
* Write, free space, -tell_media_space: Inquiry. (line 97)
* Write, log problematic disk files, -errfile_log: Scripting. (line 116)
* Write, log written sessions, -session_log: Scripting. (line 134)
* Write, padding image, -padding: SetWrite. (line 394)
* Write, padding image, -padding: SetWrite. (line 396)
* Write, pending ISO image, -commit: Writing. (line 27)
* Write, predict image size, -print_size: Inquiry. (line 85)
* Write, set speed, -speed: SetWrite. (line 285)
* Write, simulation, -dummy: SetWrite. (line 363)
* Write, TAO or SAO/DAO, -write_type: SetWrite. (line 387)
* Write, simulation, -dummy: SetWrite. (line 365)
* Write, TAO or SAO/DAO, -write_type: SetWrite. (line 389)
* xattr, control handling, -xattr: Loading. (line 178)
* xattr, set in ISO image, -setfattr: Manip. (line 103)
* xattr, set in ISO image, -setfattr_list: Manip. (line 117)
@ -5613,54 +5640,54 @@ Node: Model3406
Node: Media6310
Node: Methods8997
Node: Drives11583
Node: Extras15160
Node: Processing19628
Node: Dialog23263
Node: Commands24952
Node: ArgSort26629
Node: AqDrive28123
Node: Loading31178
Node: Insert51285
Node: SetInsert61869
Node: Manip71188
Node: CmdFind80971
Node: Filter99274
Node: Writing103896
Node: SetWrite114053
Node: Bootable136997
Node: Jigdo160791
Node: Charset165050
Node: Exception168377
Node: DialogCtl174506
Node: Inquiry177108
Node: Navigate185558
Node: Verify193853
Node: Restore203730
Node: Emulation212343
Node: Scripting222753
Node: Frontend230535
Node: Examples240170
Node: ExDevices241348
Node: ExCreate242009
Node: ExDialog243309
Node: ExGrowing244580
Node: ExModifying245389
Node: ExBootable245899
Node: ExCharset246454
Node: ExPseudo247350
Node: ExCdrecord248277
Node: ExMkisofs248597
Node: ExGrowisofs249954
Node: ExException251108
Node: ExTime251566
Node: ExIncBackup252024
Node: ExRestore256050
Node: ExRecovery256996
Node: Files257568
Node: Seealso258902
Node: Bugreport259617
Node: Legal260208
Node: CommandIdx261220
Node: ConceptIdx278262
Node: Extras15525
Node: Processing19993
Node: Dialog23628
Node: Commands25317
Node: ArgSort26994
Node: AqDrive28488
Node: Loading32589
Node: Insert52696
Node: SetInsert63280
Node: Manip72599
Node: CmdFind82382
Node: Filter100685
Node: Writing105307
Node: SetWrite115464
Node: Bootable138508
Node: Jigdo162302
Node: Charset166561
Node: Exception169888
Node: DialogCtl176017
Node: Inquiry178619
Node: Navigate187069
Node: Verify195364
Node: Restore205241
Node: Emulation213854
Node: Scripting224264
Node: Frontend232046
Node: Examples241681
Node: ExDevices242859
Node: ExCreate243520
Node: ExDialog244820
Node: ExGrowing246091
Node: ExModifying246900
Node: ExBootable247410
Node: ExCharset247965
Node: ExPseudo248861
Node: ExCdrecord249788
Node: ExMkisofs250108
Node: ExGrowisofs251465
Node: ExException252619
Node: ExTime253077
Node: ExIncBackup253535
Node: ExRestore257561
Node: ExRecovery258507
Node: Files259079
Node: Seealso260413
Node: Bugreport261128
Node: Legal261719
Node: CommandIdx262731
Node: ConceptIdx279846

End Tag Table

View File

@ -50,7 +50,7 @@
@c man .\" First parameter, NAME, should be all caps
@c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
@c man .\" other parameters are allowed: see man(7), man(1)
@c man .TH XORRISO 1 "Version 1.4.3, Feb 05, 2016"
@c man .TH XORRISO 1 "Version 1.4.3, Mar 18, 2016"
@c man .\" Please adjust this date whenever revising the manpage.
@c man .\"
@c man .\" Some roff macros, for reference:
@ -434,6 +434,12 @@ the path of their block device or of their generic character device. E.g.
@*
-dev /dev/sg2
@*
By default xorriso will try to map the given address to /dev/hd* and /dev/sr*.
The command -scsi_dev_family can redirect the mapping from sr to scd or sg.
The latter does not suffer from the concurrency problems which plague /dev/sr
of Linux kernels since version 3. But it does not yield the same addresses
which are used by mount(8) or by open(2) for read(2).
@*
On FreeBSD the device files have names like
@*
-dev /dev/cd0
@ -890,6 +896,29 @@ apply. See above paragraph "Libburn drives".
An empty address string "" gives up the current output drive
without acquiring a new one. No writing is possible without an output drive.
@c man .TP
@item -scsi_dev_family "default"|"sr"|"scd"|"sg"
@kindex -scsi_dev_family choose Linux device file type
@cindex Linux device type, -scsi_dev_family
GNU/Linux specific:
@*
By default, xorriso tries to map Linux drive addresses to /dev/sr* before
they get opened for operating the drive. This coordinates well with
other use cases of optical drives, like mount(8). But since year 2010
all /dev/sr* share a global lock which allows only one drive to process
an SCSI command while all others have to wait for its completion.
This yields awful throughput if more than one drive is writing or reading
simultaneously.
The global lock is not applied to device files /dev/sg* and also not if
the xorriso drive address is prepended by "stdio:".
@*
So for simultaneous burn runs on modern GNU/Linux it is advisable to perform
-scsi_dev_family "sg" before any -dev, -indev, or -outdev. The drive addresses
may then well be given as /dev/sr* but will nevertheless get used as
the matching /dev/sg*.
@*
If you decide so, consider to put the command into a global startup file like
/etc/opt/xorriso/rc.
@c man .TP
@item -grow_blindly "off"|predicted_nwa
@kindex -grow_blindly overides next writeable address
@cindex Next writeable address, -grow_blindly
@ -3446,9 +3475,11 @@ reaches a given low percentage value.
@*
This can ease the load on operating system and drive controller and thus help
with achieving better input bandwidth if disk and burner are not on independent
controllers (like hda and hdb). It may also help with simultaneous burns on
different burners with Linux kernels like 3.16. On the other hand it increases
the risk of buffer underflow and thus reduced write speed.
controllers (like hda and hdb). It may also help with throughput problems of
simultaneous burns on different burners with Linux kernels like 3.16, if one
has reason not to fix the problem by -scsi_dev_family "sg".
On the other hand it increases the risk of buffer underflow and thus
reduced write speed.
@*
Some burners are not suitable because they
report buffer fill with granularity too coarse in size or time,

View File

@ -282,6 +282,8 @@ struct XorrisO { /* the global context of xorriso */
int drives_exclusive; /* burn_preset_device_open() param exclusive */
int linux_scsi_dev_family; /* 0= default, 1= sr, 2= scd, (3= st), 4= sg */
int early_stdio_test; /* For burn_allow_drive_role_4():
bit1= Test whether a stdio drive can be opened for
read-write resp. read-only resp. write only.

View File

@ -1 +1 @@
#define Xorriso_timestamP "2016.03.15.203626"
#define Xorriso_timestamP "2016.03.18.135548"

View File

@ -622,6 +622,8 @@ int Xorriso_hfsplus_bless(struct XorrisO *xorriso, char *path,
int Xorriso_pretend_full_disc(struct XorrisO *xorriso, int flag);
int Xorriso_scsi_dev_family(struct XorrisO *xorriso, int flag);
int Xorriso_apply_sort_file(struct XorrisO *xorriso, char *path, int flag);