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 e51a00f000
commit 3664cab771
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_attach_jte;
isoburn_igopt_destroy; isoburn_igopt_destroy;
isoburn_igopt_detach_jte; isoburn_igopt_detach_jte;
isoburn_igopt_get_appended_as_apm;
isoburn_igopt_get_appended_as_gpt; isoburn_igopt_get_appended_as_gpt;
isoburn_igopt_get_data_start; isoburn_igopt_get_data_start;
isoburn_igopt_get_disc_label; isoburn_igopt_get_disc_label;
@ -42,6 +43,7 @@ isoburn_igopt_get_out_charset;
isoburn_igopt_get_over_mode; isoburn_igopt_get_over_mode;
isoburn_igopt_get_over_ugid; isoburn_igopt_get_over_ugid;
isoburn_igopt_get_part_flags; isoburn_igopt_get_part_flags;
isoburn_igopt_get_part_like_isohybrid;
isoburn_igopt_get_partition_img; isoburn_igopt_get_partition_img;
isoburn_igopt_get_prep_partition; isoburn_igopt_get_prep_partition;
isoburn_igopt_get_pvd_times; isoburn_igopt_get_pvd_times;
@ -55,6 +57,7 @@ isoburn_igopt_get_tail_blocks;
isoburn_igopt_get_untranslated_name_len; isoburn_igopt_get_untranslated_name_len;
isoburn_igopt_get_write_type; isoburn_igopt_get_write_type;
isoburn_igopt_new; isoburn_igopt_new;
isoburn_igopt_set_appended_as_apm;
isoburn_igopt_set_appended_as_gpt; isoburn_igopt_set_appended_as_gpt;
isoburn_igopt_set_disc_label; isoburn_igopt_set_disc_label;
isoburn_igopt_set_efi_bootp; isoburn_igopt_set_efi_bootp;
@ -67,6 +70,7 @@ isoburn_igopt_set_out_charset;
isoburn_igopt_set_over_mode; isoburn_igopt_set_over_mode;
isoburn_igopt_set_over_ugid; isoburn_igopt_set_over_ugid;
isoburn_igopt_set_part_flag; isoburn_igopt_set_part_flag;
isoburn_igopt_set_part_like_isohybrid;
isoburn_igopt_set_partition_img; isoburn_igopt_set_partition_img;
isoburn_igopt_set_prep_partition; isoburn_igopt_set_prep_partition;
isoburn_igopt_set_pvd_times; isoburn_igopt_set_pvd_times;
@ -287,6 +291,7 @@ Xorriso_option_rollback;
Xorriso_option_rom_toc_scan; Xorriso_option_rom_toc_scan;
Xorriso_option_rr_reloc_dir; Xorriso_option_rr_reloc_dir;
Xorriso_option_scdbackup_tag; Xorriso_option_scdbackup_tag;
Xorriso_option_scsi_dev_family;
Xorriso_option_scsi_log; Xorriso_option_scsi_log;
Xorriso_option_session_log; Xorriso_option_session_log;
Xorriso_option_setfacli; Xorriso_option_setfacli;

View File

@ -207,6 +207,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
m->displacement_sign= 0; m->displacement_sign= 0;
m->read_fs= 0; m->read_fs= 0;
m->drives_exclusive= 1; m->drives_exclusive= 1;
m->linux_scsi_dev_family= 0;
m->early_stdio_test= 0; m->early_stdio_test= 0;
m->cache_num_tiles= 0; m->cache_num_tiles= 0;
m->cache_tile_blocks= 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; aquire_flag|= 64;
if(flag & 128) if(flag & 128)
aquire_flag|= 256; 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)); burn_allow_drive_role_4(1 | (xorriso->early_stdio_test & 14));
ret= isoburn_drive_aquire(&dinfo, libburn_adr, aquire_flag); 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); Xorriso_process_msg_queues(xorriso,0);
if(ret<=0) { if(ret<=0) {
if(flag & 128) if(flag & 128)
@ -3404,3 +3405,10 @@ int Xorriso_pretend_full_disc(struct XorrisO *xorriso, int flag)
return(1); 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-version\tprint version information and exit emulation",
"\t--devices\tprint list of available MMC drives and exit emulation", "\t--devices\tprint list of available MMC drives and exit emulation",
"\tdev=target\tpseudo-SCSI target to use as CD-Recorder", "\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 verbose level by one",
"\t-V\t\tincrement SCSI command transport 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", "\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=", "gracetime=",
"assert_write_lba=", "fifo_start_at=", "dev_translation=", "assert_write_lba=", "fifo_start_at=", "dev_translation=",
"drive_scsi_dev_family=", "fallback_program=", "fallback_program=",
"tao_to_sao_tsize=", "tao_to_sao_tsize=",
"direct_write_amount=", "msifile=", "direct_write_amount=", "msifile=",
@ -346,6 +347,11 @@ no_volunteer:;
cpt= strchr(argpt, '=') + 1; cpt= strchr(argpt, '=') + 1;
Xorriso_option_modesty_on_drive(xorriso, cpt, 0); 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 || } else if(strncmp(argpt, "-stdio_sync=", 12)==0 ||
strncmp(argpt, "stdio_sync=", 11)==0) { strncmp(argpt, "stdio_sync=", 11)==0) {
cpt= strchr(argpt, '=') + 1; 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) strncmp(dev, "mmc:", 4) != 0)
sprintf(libburn_adr, "stdio:%s", dev); sprintf(libburn_adr, "stdio:%s", dev);
burn_preset_device_open( 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; aquire_flag= 1;
if((xorriso->toc_emulation_flag & 2) && adr_mode == 3) if((xorriso->toc_emulation_flag & 2) && adr_mode == 3)
aquire_flag|= 16; aquire_flag|= 16;
@ -1099,7 +1100,7 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
if(xorriso->toc_emulation_flag & 8) if(xorriso->toc_emulation_flag & 8)
aquire_flag|= 512; aquire_flag|= 512;
ret= isoburn_drive_aquire(&dinfo, libburn_adr, aquire_flag); 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); Xorriso_process_msg_queues(xorriso,0);
if(ret <= 0) if(ret <= 0)
{ret= 0; goto ex;} {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\".", " those lists empty. Defaulty entry in \"risky\" is \"/dev\".",
" -grow_blindly \"off\"|predicted_nwa", " -grow_blindly \"off\"|predicted_nwa",
" Switch between modifying and blind growing.", " 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\"]", " -read_speed number[\"k/s\"|\"m/s\"|\"[x]CD\"|\"[x]DVD\"|\"[x]BD\"]",
" Set the read speed. Default is \"none\" = do not set speed", " Set the read speed. Default is \"none\" = do not set speed",
" before reading.", " before reading.",

View File

@ -1,7 +1,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. /* 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. 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 */ /* Option -scsi_log */
int Xorriso_option_scsi_log(struct XorrisO *xorriso, char *mode, int flag) 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", "prog","prog_help","publisher","quoted_not_list","quoted_path_list",
"read_fs","read_speed","reassure","report_about", "read_fs","read_speed","reassure","report_about",
"report_el_torito","report_system_area","rockridge", "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", "session_log","sh_style_result","signal_handling","sleep",
"speed","split_size","status","status_history_max", "speed","split_size","status","status_history_max",
"stdio_sync","stream_recording","system_id","temp_mem_limit","toc_of", "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", "ecma119_map",
"disk_dev_ino", "rom_toc_scan", "calm_drive", "ban_stdio_write", "disk_dev_ino", "rom_toc_scan", "calm_drive", "ban_stdio_write",
"early_stdio_test", "data_cache_size", "early_stdio_test", "data_cache_size",
"scsi_dev_family",
"* Character sets:", "* Character sets:",
"charset", "local_charset", "charset", "local_charset",
@ -1721,6 +1722,10 @@ next_command:;
(*idx)+= 2; (*idx)+= 2;
ret= Xorriso_option_scdbackup_tag(xorriso, arg1, arg2, 0); 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) { } else if(strcmp(cmd, "scsi_log") == 0) {
(*idx)++; (*idx)++;
ret= Xorriso_option_scsi_log(xorriso, arg1, 0); 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 channel_prefixes[4][4]= {".","R","I","M"};
static char load_names[][20]= {"auto", "session", "track", "lba", "volid"}; static char load_names[][20]= {"auto", "session", "track", "lba", "volid"};
static int max_load_mode= 4; 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; struct Xorriso_lsT *paths, *leafs, *s, *plst, *vlst;
Xorriso_alloc_meM(sfe, char, 5 * SfileadrL + 80); 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; do_single= 0;
dev_filter= filter; dev_filter= filter;
if(dev_filter != NULL) { if(dev_filter != NULL) {

View File

@ -9,7 +9,7 @@
.\" First parameter, NAME, should be all caps .\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1) .\" 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. .\" Please adjust this date whenever revising the manpage.
.\" .\"
.\" Some roff macros, for reference: .\" 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 Only if used as first command line argument this option
prevents reading and interpretation of startup files. See section FILES below. prevents reading and interpretation of startup files. See section FILES below.
.TP .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 \fB--grow_overwriteable_iso\fR
Enable emulation of multi\-session writing on overwriteable media which Enable emulation of multi\-session writing on overwriteable media which
contain an ISO 9660 filesystem. This emulation is learned from growisofs \-M 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 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 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 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. the risk of buffer underflow and thus reduced write speed.
.br .br
Some burners are not suitable because they 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 Only if used as first command line argument this option prevents
reading and interpretation of startup files. See section FILES reading and interpretation of startup files. See section FILES
below. 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 --grow_overwriteable_iso
Enable emulation of multi-session writing on overwriteable media Enable emulation of multi-session writing on overwriteable media
which contain an ISO 9660 filesystem. This emulation is learned 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 thus help with achieving better input bandwidth if disk and burner
are not on independent controllers (like hda and hdb). It may also are not on independent controllers (like hda and hdb). It may also
help with simultaneous burns on different burners with Linux help with simultaneous burns on different burners with Linux
kernels like 3.16. On the other hand it increases the risk of kernels like 3.16, if one has reason not to fix the problem by
buffer underflow and thus reduced write speed. 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 Some burners are not suitable because they report buffer fill with
granularity too coarse in size or time, or expect their buffer to granularity too coarse in size or time, or expect their buffer to
be filled to the top before they go to full speed. 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) * --devices get list of drives: DriveAddr. (line 8)
* --grow_overwriteable_iso emulate ISO 9660 multi-session: NonCdrecord. * --grow_overwriteable_iso emulate ISO 9660 multi-session: NonCdrecord.
(line 12) (line 29)
* --multi_if_possible apply -multi if medium is suitable: NonCdrecord. * --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) * --no_rc do not execute xorriso startup files: NonCdrecord. (line 8)
* -atip inquire medium state: Inquire. (line 14) * -atip inquire medium state: Inquire. (line 14)
* -checkdrive inquire drive CD capabilities: Inquire. (line 11) * -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) * -inq inquire drive identifiers: Inquire. (line 8)
* -isosize obtain track size from ISO 9660 superblock: SetBurn. * -isosize obtain track size from ISO 9660 superblock: SetBurn.
(line 137) (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) * -msinfo retrieve multi-session info: Inquire. (line 43)
* -multi keep media appendable after burn run: SetBurn. (line 89) * -multi keep media appendable after burn run: SetBurn. (line 89)
* -nopad disable adding of bytes to end of track: SetBurn. (line 151) * -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) (line 113)
* blank= make media re-usabable or format media: SetBurn. (line 28) * blank= make media re-usabable or format media: SetBurn. (line 28)
* dev= address the drive to be used: DriveAddr. (line 21) * 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) * fs= set program fifo size: SetBurn. (line 174)
* minbuf= keep drive buffer hungry: SetBurn. (line 205) * minbuf= keep drive buffer hungry: SetBurn. (line 205)
* padsize= add bytes to end of track: SetBurn. (line 144) * padsize= add bytes to end of track: SetBurn. (line 144)
* speed= set write speed: SetBurn. (line 189) * 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. * 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) * tsize= set a fixed track size: SetBurn. (line 126)
* write_start_address= set block address for write start: NonCdrecord. * write_start_address= set block address for write start: NonCdrecord.
(line 92) (line 110)
 
File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top 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) * Accessing drive, wait for stdin, -waiti: SetBurn. (line 113)
* Bugs, reporting: Bugreport. (line 6) * Bugs, reporting: Bugreport. (line 6)
* Data track, announce, -data: SetBurn. (line 157) * 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, address, dev=: DriveAddr. (line 21)
* Drive, get list of, --devices: DriveAddr. (line 8) * Drive, get list of, --devices: DriveAddr. (line 8)
* Drive, inquire CD capabilities, -checkdrive: Inquire. (line 11) * Drive, inquire CD capabilities, -checkdrive: Inquire. (line 11)
* Drive, inquire identifiers, -inq: Inquire. (line 8) * 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) * Eject, the tray, -eject: SetBurn. (line 211)
* Examples: Examples. (line 6) * Examples: Examples. (line 6)
* Fifo, set size, fs=: SetBurn. (line 174) * Fifo, set size, fs=: SetBurn. (line 174)
* Full speed, on DVD-RAM and BD, stream_recording=: NonCdrecord. * Full speed, on DVD-RAM and BD, stream_recording=: NonCdrecord.
(line 39) (line 56)
* Media types, _definiton: Standards. (line 23) * Media types, _definiton: Standards. (line 23)
* Media, blank, blank=: SetBurn. (line 28) * Media, blank, blank=: SetBurn. (line 28)
* Media, format, 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, keep appendable, -multi: SetBurn. (line 89)
* Media, make re-usable, blank=: SetBurn. (line 28) * Media, make re-usable, blank=: SetBurn. (line 28)
* medium content, inquire, -toc: Inquire. (line 22) * 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) * MMC, _definiton: Standards. (line 6)
* multi-session info, retrieve, -msinfo: Inquire. (line 43) * multi-session info, retrieve, -msinfo: Inquire. (line 43)
* Multi-session, emulate ISO 9660, --grow_overwriteable_iso: NonCdrecord. * Multi-session, emulate ISO 9660, --grow_overwriteable_iso: NonCdrecord.
(line 12) (line 29)
* Options, overview, -help: Verbous. (line 30) * Options, overview, -help: Verbous. (line 30)
* Overwritable media, _definiton: Standards. (line 30) * Overwritable media, _definiton: Standards. (line 30)
* Padding, at end of track, padsize=: SetBurn. (line 144) * 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, obtain from ISO 9660, -isosize: SetBurn. (line 137)
* Track size, set fixed, tsize=: SetBurn. (line 126) * Track size, set fixed, tsize=: SetBurn. (line 126)
* Track, _definiton: Standards. (line 13) * 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) * Tray, eject, -eject: SetBurn. (line 211)
* Verbosity, increase, -v: Verbous. (line 16) * Verbosity, increase, -v: Verbous. (line 16)
* Verbosity, SCSI commands, -V: Verbous. (line 20) * Verbosity, SCSI commands, -V: Verbous. (line 20)
* Version, report, -version: Verbous. (line 8) * Version, report, -version: Verbous. (line 8)
* Write simulation , control, -dummy: SetBurn. (line 106) * Write simulation , control, -dummy: SetBurn. (line 106)
* Write start address, set, write_start_address=: NonCdrecord. * Write start address, set, write_start_address=: NonCdrecord.
(line 92) (line 110)
* Write type, SAO/DAO, -dao: SetBurn. (line 172) * Write type, SAO/DAO, -dao: SetBurn. (line 172)
* Write type, SAO/DAO, -sao: SetBurn. (line 168) * Write type, SAO/DAO, -sao: SetBurn. (line 168)
* Write type, TAO, -tao: SetBurn. (line 162) * 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, -immed: SetBurn. (line 208)
* Write, drive buffer, minbuf=: SetBurn. (line 205) * 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, mkisofs emulation: Xorriso. (line 6)
* xorriso, options: Options. (line 6) * xorriso, options: Options. (line 6)
@ -973,21 +995,21 @@ Node: Inquire7618
Node: SetBurn10487 Node: SetBurn10487
Node: Verbous20938 Node: Verbous20938
Node: NonCdrecord22488 Node: NonCdrecord22488
Node: Examples28246 Node: Examples29314
Node: ExDevices28907 Node: ExDevices29975
Node: ExMedium29125 Node: ExMedium30193
Node: ExBlank29388 Node: ExBlank30456
Node: ExFormat29609 Node: ExFormat30677
Node: ExDeformat30127 Node: ExDeformat31195
Node: ExIsoSingle30394 Node: ExIsoSingle31462
Node: ExIsoMulti30678 Node: ExIsoMulti31746
Node: ExIsoFly32312 Node: ExIsoFly33380
Node: ExAfio32983 Node: ExAfio34051
Node: Files33981 Node: Files35049
Node: Seealso34537 Node: Seealso35605
Node: Bugreport34900 Node: Bugreport35968
Node: Legal35491 Node: Legal36559
Node: CommandIdx36420 Node: CommandIdx37488
Node: ConceptIdx39696 Node: ConceptIdx40905
 
End Tag Table End Tag Table

View File

@ -50,7 +50,7 @@
@c man .\" First parameter, NAME, should be all caps @c man .\" First parameter, NAME, should be all caps
@c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection @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 .\" 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 .\" Please adjust this date whenever revising the manpage.
@c man .\" @c man .\"
@c man .\" Some roff macros, for reference: @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 Only if used as first command line argument this option
prevents reading and interpretation of startup files. See section FILES below. prevents reading and interpretation of startup files. See section FILES below.
@c man .TP @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 @item @minus{}@minus{}grow_overwriteable_iso
@kindex @minus{}@minus{}grow_overwriteable_iso emulate ISO 9660 multi-session @kindex @minus{}@minus{}grow_overwriteable_iso emulate ISO 9660 multi-session
@cindex Multi-session, emulate ISO 9660, @minus{}@minus{}grow_overwriteable_iso @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 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 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 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. the risk of buffer underflow and thus reduced write speed.
@* @*
Some burners are not suitable because they Some burners are not suitable because they

View File

@ -9,7 +9,7 @@
.\" First parameter, NAME, should be all caps .\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1) .\" 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. .\" Please adjust this date whenever revising the manpage.
.\" .\"
.\" Some roff macros, for reference: .\" Some roff macros, for reference:
@ -304,6 +304,12 @@ the path of their block device or of their generic character device. E.g.
.br .br
\-dev /dev/sg2 \-dev /dev/sg2
.br .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 On FreeBSD the device files have names like
.br .br
\-dev /dev/cd0 \-dev /dev/cd0
@ -678,6 +684,26 @@ apply. See above paragraph "Libburn drives".
An empty address string "" gives up the current output drive An empty address string "" gives up the current output drive
without acquiring a new one. No writing is possible without an output drive. without acquiring a new one. No writing is possible without an output drive.
.TP .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 \fB\-grow_blindly\fR "off"|predicted_nwa
If predicted_nwa is a non\-negative number then perform blind growing rather If predicted_nwa is a non\-negative number then perform blind growing rather
than modifying if \-indev and \-outdev are set to different drives. than modifying if \-indev and \-outdev are set to different drives.
@ -2940,9 +2966,11 @@ reaches a given low percentage value.
.br .br
This can ease the load on operating system and drive controller and thus help 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 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 controllers (like hda and hdb). It may also help with throughput problems of
different burners with Linux kernels like 3.16. On the other hand it increases simultaneous burns on different burners with Linux kernels like 3.16, if one
the risk of buffer underflow and thus reduced write speed. 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 .br
Some burners are not suitable because they Some burners are not suitable because they
report buffer fill with granularity too coarse in size or time, 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 */ /* @since 0.4.4 */
int Xorriso_option_scdbackup_tag(struct XorrisO *xorriso, char *list_path, int Xorriso_option_scdbackup_tag(struct XorrisO *xorriso, char *list_path,
char *record_name, int flag); 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 */ /* Command -scsi_log */
/* @since 0.5.0 */ /* @since 0.5.0 */
int Xorriso_option_scsi_log(struct XorrisO *xorriso, char *mode, int flag); 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/sr0
-dev /dev/hdc -dev /dev/hdc
-dev /dev/sg2 -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 On FreeBSD the device files have names like
-dev /dev/cd0 -dev /dev/cd0
On NetBSD: On NetBSD:
@ -626,6 +632,23 @@ acquire the drive.
An empty address string "" gives up the current output drive An empty address string "" gives up the current output drive
without acquiring a new one. No writing is possible without an without acquiring a new one. No writing is possible without an
output drive. 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 -grow_blindly "off"|predicted_nwa
If predicted_nwa is a non-negative number then perform blind If predicted_nwa is a non-negative number then perform blind
growing rather than modifying if -indev and -outdev are set to 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 This can ease the load on operating system and drive controller and
thus help with achieving better input bandwidth if disk and burner thus help with achieving better input bandwidth if disk and burner
are not on independent controllers (like hda and hdb). It may also are not on independent controllers (like hda and hdb). It may also
help with simultaneous burns on different burners with Linux help with throughput problems of simultaneous burns on different
kernels like 3.16. On the other hand it increases the risk of burners with Linux kernels like 3.16, if one has reason not to fix
buffer underflow and thus reduced write speed. 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 Some burners are not suitable because they report buffer fill with
granularity too coarse in size or time, or expect their buffer to granularity too coarse in size or time, or expect their buffer to
be filled to the top before they go to full speed. 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 sets ownership in ISO image: Manip. (line 43)
* -chown_r sets ownership in ISO image: Manip. (line 47) * -chown_r sets ownership in ISO image: Manip. (line 47)
* -clone copies ISO directory tree: Insert. (line 170) * -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_damaged closes damaged track and session: Writing. (line 164)
* -close_filter_list bans filter registration: Filter. (line 50) * -close_filter_list bans filter registration: Filter. (line 50)
* -commit writes pending ISO image: Writing. (line 27) * -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) (line 57)
* -drive_class controls drive accessability: Loading. (line 73) * -drive_class controls drive accessability: Loading. (line 73)
* -du show directory size in ISO image: Navigate. (line 75) * -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) * -dus show directory size in ISO image: Navigate. (line 78)
* -dusx show directory size on disk: Navigate. (line 85) * -dusx show directory size on disk: Navigate. (line 85)
* -dux show directory size on disk: Navigate. (line 81) * -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) * -follow softlinks and mount points: SetInsert. (line 69)
* -format formats media: Writing. (line 87) * -format formats media: Writing. (line 87)
* -for_backup -acl,-xattr,-hardlinks,-md5: Loading. (line 210) * -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 shows ACL in ISO image: Navigate. (line 60)
* -getfacl_r shows ACL in ISO image: Navigate. (line 66) * -getfacl_r shows ACL in ISO image: Navigate. (line 66)
* -getfattr shows xattr in ISO image: Navigate. (line 69) * -getfattr shows xattr in ISO image: Navigate. (line 69)
* -getfattr_r shows xattr in ISO image: Navigate. (line 72) * -getfattr_r shows xattr in ISO image: Navigate. (line 72)
* -gid sets global ownership: SetWrite. (line 271) * -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) * -hardlinks controls handling of hard links: Loading. (line 134)
* -help prints help text: Scripting. (line 19) * -help prints help text: Scripting. (line 19)
* -hfsplus enables production of HFS+ partition: SetWrite. (line 14) * -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) * -out_charset sets output character set: SetWrite. (line 263)
* -overwrite enables overwriting in ISO: SetInsert. (line 131) * -overwrite enables overwriting in ISO: SetInsert. (line 131)
* -pacifier controls pacifier text form: Emulation. (line 166) * -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) * -page set terminal geometry: DialogCtl. (line 18)
* -paste_in copies file into disk file: Restore. (line 114) * -paste_in copies file into disk file: Restore. (line 114)
* -pathspecs sets meaning of = with -add: SetInsert. (line 115) * -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) * -rom_toc_scan searches for sessions: Loading. (line 278)
* -rr_reloc_dir sets name of relocation directory: SetWrite. (line 144) * -rr_reloc_dir sets name of relocation directory: SetWrite. (line 144)
* -scdbackup_tag enables scdbackup checksum tag: Emulation. (line 179) * -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) * -scsi_log reports SCSI commands: Scripting. (line 143)
* -session_log logs written sessions: Scripting. (line 134) * -session_log logs written sessions: Scripting. (line 134)
* -session_string composes session info line: Inquiry. (line 73) * -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) * -split_size enables large file splitting: SetInsert. (line 143)
* -status shows current settings: Scripting. (line 44) * -status shows current settings: Scripting. (line 44)
* -status_history_max curbs -status history: Scripting. (line 52) * -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) * -stream_recording controls defect management: SetWrite. (line 303)
* -system_id sets system id: SetWrite. (line 199) * -system_id sets system id: SetWrite. (line 199)
* -tell_media_space reports free space: Inquiry. (line 97) * -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) * -volid sets volume id: SetWrite. (line 162)
* -volset_id sets volume set id: SetWrite. (line 182) * -volset_id sets volume set id: SetWrite. (line 182)
* -volume_date sets volume timestamp: SetWrite. (line 205) * -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) * -x enables automatic execution order of arguments: ArgSort. (line 16)
* -xattr controls handling of xattr (EA): Loading. (line 178) * -xattr controls handling of xattr (EA): Loading. (line 178)
* -zisofs controls zisofs production: SetWrite. (line 274) * -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, -jigdo: Jigdo. (line 33)
* Jigdo Template Extraction, _definition: Jigdo. (line 6) * Jigdo Template Extraction, _definition: Jigdo. (line 6)
* LBA, _definition: Drives. (line 17) * LBA, _definition: Drives. (line 17)
* Linux device type, -scsi_dev_family: AqDrive. (line 43)
* List delimiter, _definition: Processing. (line 9) * List delimiter, _definition: Processing. (line 9)
* Local Character Set, _definition: Charset. (line 11) * Local Character Set, _definition: Charset. (line 11)
* MBR bootable/active flag, enforce: Bootable. (line 306) * 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, set ISO working directory, -cd: Navigate. (line 7)
* Navigate, tell disk working directory, -pwdx: Navigate. (line 21) * Navigate, tell disk working directory, -pwdx: Navigate. (line 21)
* Navigate, tell ISO working directory, -pwd: Navigate. (line 19) * 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) * Output Character Set, _definition: Charset. (line 26)
* Overwriteable media, _definition: Media. (line 14) * Overwriteable media, _definition: Media. (line 14)
* Ownership, global in ISO image, -uid: SetWrite. (line 268) * 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) * Verify, preset -check_media, -check_media_defaults: Verify. (line 40)
* Write, block size, -dvd_obs: SetWrite. (line 314) * Write, block size, -dvd_obs: SetWrite. (line 314)
* Write, bootability, -boot_image: Bootable. (line 65) * Write, bootability, -boot_image: Bootable. (line 65)
* Write, buffer syncing, -stdio_sync: SetWrite. (line 356) * Write, buffer syncing, -stdio_sync: SetWrite. (line 358)
* Write, close media, -close: SetWrite. (line 371) * Write, close media, -close: SetWrite. (line 373)
* Write, compliance to specs, -compliance: SetWrite. (line 56) * Write, compliance to specs, -compliance: SetWrite. (line 56)
* Write, defect management, -stream_recording: SetWrite. (line 303) * Write, defect management, -stream_recording: SetWrite. (line 303)
* Write, disable Rock Ridge, -rockridge: SetWrite. (line 51) * Write, disable Rock Ridge, -rockridge: SetWrite. (line 51)
* Write, drive buffer, -modesty_on_drive: SetWrite. (line 320) * Write, drive buffer, -modesty_on_drive: SetWrite. (line 320)
* Write, enable HFS+, -hfsplus: SetWrite. (line 14) * Write, enable HFS+, -hfsplus: SetWrite. (line 14)
* Write, enable Joliet, -joliet: SetWrite. (line 10) * 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, free space, -tell_media_space: Inquiry. (line 97)
* Write, log problematic disk files, -errfile_log: Scripting. (line 116) * Write, log problematic disk files, -errfile_log: Scripting. (line 116)
* Write, log written sessions, -session_log: Scripting. (line 134) * 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, pending ISO image, -commit: Writing. (line 27)
* Write, predict image size, -print_size: Inquiry. (line 85) * Write, predict image size, -print_size: Inquiry. (line 85)
* Write, set speed, -speed: SetWrite. (line 285) * Write, set speed, -speed: SetWrite. (line 285)
* Write, simulation, -dummy: SetWrite. (line 363) * Write, simulation, -dummy: SetWrite. (line 365)
* Write, TAO or SAO/DAO, -write_type: SetWrite. (line 387) * Write, TAO or SAO/DAO, -write_type: SetWrite. (line 389)
* xattr, control handling, -xattr: Loading. (line 178) * xattr, control handling, -xattr: Loading. (line 178)
* xattr, set in ISO image, -setfattr: Manip. (line 103) * xattr, set in ISO image, -setfattr: Manip. (line 103)
* xattr, set in ISO image, -setfattr_list: Manip. (line 117) * xattr, set in ISO image, -setfattr_list: Manip. (line 117)
@ -5613,54 +5640,54 @@ Node: Model3406
Node: Media6310 Node: Media6310
Node: Methods8997 Node: Methods8997
Node: Drives11583 Node: Drives11583
Node: Extras15160 Node: Extras15525
Node: Processing19628 Node: Processing19993
Node: Dialog23263 Node: Dialog23628
Node: Commands24952 Node: Commands25317
Node: ArgSort26629 Node: ArgSort26994
Node: AqDrive28123 Node: AqDrive28488
Node: Loading31178 Node: Loading32589
Node: Insert51285 Node: Insert52696
Node: SetInsert61869 Node: SetInsert63280
Node: Manip71188 Node: Manip72599
Node: CmdFind80971 Node: CmdFind82382
Node: Filter99274 Node: Filter100685
Node: Writing103896 Node: Writing105307
Node: SetWrite114053 Node: SetWrite115464
Node: Bootable136997 Node: Bootable138508
Node: Jigdo160791 Node: Jigdo162302
Node: Charset165050 Node: Charset166561
Node: Exception168377 Node: Exception169888
Node: DialogCtl174506 Node: DialogCtl176017
Node: Inquiry177108 Node: Inquiry178619
Node: Navigate185558 Node: Navigate187069
Node: Verify193853 Node: Verify195364
Node: Restore203730 Node: Restore205241
Node: Emulation212343 Node: Emulation213854
Node: Scripting222753 Node: Scripting224264
Node: Frontend230535 Node: Frontend232046
Node: Examples240170 Node: Examples241681
Node: ExDevices241348 Node: ExDevices242859
Node: ExCreate242009 Node: ExCreate243520
Node: ExDialog243309 Node: ExDialog244820
Node: ExGrowing244580 Node: ExGrowing246091
Node: ExModifying245389 Node: ExModifying246900
Node: ExBootable245899 Node: ExBootable247410
Node: ExCharset246454 Node: ExCharset247965
Node: ExPseudo247350 Node: ExPseudo248861
Node: ExCdrecord248277 Node: ExCdrecord249788
Node: ExMkisofs248597 Node: ExMkisofs250108
Node: ExGrowisofs249954 Node: ExGrowisofs251465
Node: ExException251108 Node: ExException252619
Node: ExTime251566 Node: ExTime253077
Node: ExIncBackup252024 Node: ExIncBackup253535
Node: ExRestore256050 Node: ExRestore257561
Node: ExRecovery256996 Node: ExRecovery258507
Node: Files257568 Node: Files259079
Node: Seealso258902 Node: Seealso260413
Node: Bugreport259617 Node: Bugreport261128
Node: Legal260208 Node: Legal261719
Node: CommandIdx261220 Node: CommandIdx262731
Node: ConceptIdx278262 Node: ConceptIdx279846
 
End Tag Table End Tag Table

View File

@ -50,7 +50,7 @@
@c man .\" First parameter, NAME, should be all caps @c man .\" First parameter, NAME, should be all caps
@c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection @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 .\" 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 .\" Please adjust this date whenever revising the manpage.
@c man .\" @c man .\"
@c man .\" Some roff macros, for reference: @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 -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 On FreeBSD the device files have names like
@* @*
-dev /dev/cd0 -dev /dev/cd0
@ -890,6 +896,29 @@ apply. See above paragraph "Libburn drives".
An empty address string "" gives up the current output drive An empty address string "" gives up the current output drive
without acquiring a new one. No writing is possible without an output drive. without acquiring a new one. No writing is possible without an output drive.
@c man .TP @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 @item -grow_blindly "off"|predicted_nwa
@kindex -grow_blindly overides next writeable address @kindex -grow_blindly overides next writeable address
@cindex Next writeable address, -grow_blindly @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 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 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 controllers (like hda and hdb). It may also help with throughput problems of
different burners with Linux kernels like 3.16. On the other hand it increases simultaneous burns on different burners with Linux kernels like 3.16, if one
the risk of buffer underflow and thus reduced write speed. 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 Some burners are not suitable because they
report buffer fill with granularity too coarse in size or time, 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 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(): int early_stdio_test; /* For burn_allow_drive_role_4():
bit1= Test whether a stdio drive can be opened for bit1= Test whether a stdio drive can be opened for
read-write resp. read-only resp. write only. 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_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); int Xorriso_apply_sort_file(struct XorrisO *xorriso, char *path, int flag);