Moved sg_log_cmd() to spc.c scsi_log_cmd()

This commit is contained in:
Thomas Schmitt 2009-12-19 14:23:30 +00:00
parent ef8289e6e8
commit 21a1829063
3 changed files with 6 additions and 62 deletions

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2009.12.19.140015" #define Cdrskin_timestamP "2009.12.19.142456"

View File

@ -61,9 +61,6 @@ burn_os_open_track_src() opens a disk file in a way that allows best
throughput with file reading and/or SCSI write command throughput with file reading and/or SCSI write command
transmission. transmission.
burn_os_close_track_src() closes a filedescriptor obtained by
burn_os_open_track_src().
burn_os_alloc_buffer() allocates a memory area that is suitable for file burn_os_alloc_buffer() allocates a memory area that is suitable for file
descriptors issued by burn_os_open_track_src(). descriptors issued by burn_os_open_track_src().
The buffer size may be rounded up for alignment The buffer size may be rounded up for alignment
@ -1682,44 +1679,6 @@ int sg_release(struct burn_drive *d)
} }
/* <<< ts A91111: on its way out */
/** ts A70518:
Debugging log facility. Controlled by existence of macros:
Libburn_log_sg_commandS enables logging to file
/tmp/libburn_sg_command_log
Libburn_fflush_log_sg_commandS enables fflush after each output line
Libburn_log_sg_command_stderR enables additional log to stderr
*/
/*
ts A91111: now enabled by default and controlled burn_sg_log_scsi
*/
#define Libburn_log_sg_commandS 1
#define Libburn_fflush_log_sg_commandS 1
#define Libburn_log_sg_command_stderR 1
#ifdef Libburn_log_sg_commandS
/** Logs command (before execution) */
static int sg_log_cmd(struct command *c, FILE *fp, int flag)
{
if (fp != NULL && (fp == stderr || (burn_sg_log_scsi & 1))) {
scsi_show_cmd_text(c, fp, 0);
#ifdef Libburn_fflush_log_sg_commandS
if (burn_sg_log_scsi & 4)
fflush(fp);
#endif
}
#ifdef Libburn_log_sg_command_stderR
if (fp == stderr || !(burn_sg_log_scsi & 2))
return 1;
sg_log_cmd(c, stderr, flag);
#endif
return 1;
}
/** logs outcome of a sg command. flag&1 causes an error message */ /** logs outcome of a sg command. flag&1 causes an error message */
static int sg_log_err(struct command *c, FILE *fp, static int sg_log_err(struct command *c, FILE *fp,
sg_io_hdr_t *s, sg_io_hdr_t *s,
@ -1734,30 +1693,21 @@ static int sg_log_err(struct command *c, FILE *fp,
scsi_show_cmd_reply(c, fp, 0); scsi_show_cmd_reply(c, fp, 0);
fprintf(fp,"%6d ms\n", s->duration); fprintf(fp,"%6d ms\n", s->duration);
} }
#ifdef Libburn_fflush_log_sg_commandS
if (burn_sg_log_scsi & 4) if (burn_sg_log_scsi & 4)
fflush(fp); fflush(fp);
#endif
} }
#ifdef Libburn_log_sg_command_stderR
if (fp == stderr || !(burn_sg_log_scsi & 2)) if (fp == stderr || !(burn_sg_log_scsi & 2))
return 1; return 1;
sg_log_err(c, stderr, s, flag); sg_log_err(c, stderr, s, flag);
#endif
return 1; return 1;
} }
#endif /* Libburn_log_sg_commandS */
/** Sends a SCSI command to the drive, receives reply and evaluates wether /** Sends a SCSI command to the drive, receives reply and evaluates wether
the command succeeded or shall be retried or finally failed. the command succeeded or shall be retried or finally failed.
Returned SCSI errors shall not lead to a return value indicating failure. Returned SCSI errors shall not lead to a return value indicating failure.
The callers get notified by c->error. An SCSI failure which leads not to The callers get notified by c->error. An SCSI failure which leads not to
a retry shall be notified via scsi_notify_error(). a retry shall be notified via scsi_notify_error().
The Libburn_log_sg_commandS facility might be of help when problems with
a drive have to be examined. It shall stay disabled for normal use.
@return: 1 success , <=0 failure @return: 1 success , <=0 failure
*/ */
int sg_issue_command(struct burn_drive *d, struct command *c) int sg_issue_command(struct burn_drive *d, struct command *c)
@ -1766,11 +1716,8 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
int err; int err;
time_t start_time; time_t start_time;
sg_io_hdr_t s; sg_io_hdr_t s;
#ifdef Libburn_log_sg_commandS
/* ts A61030 */ /* ts A61030 */
static FILE *fp= NULL; static FILE *fp= NULL;
#endif /* Libburn_log_sg_commandS */
/* <<< ts A60821 /* <<< ts A60821
debug: for tracing calls which might use open drive fds */ debug: for tracing calls which might use open drive fds */
@ -1779,7 +1726,6 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
d->fd,d->released); d->fd,d->released);
mmc_function_spy(NULL, buf); mmc_function_spy(NULL, buf);
#ifdef Libburn_log_sg_commandS
/* ts A61030 */ /* ts A61030 */
if (burn_sg_log_scsi & 1) { if (burn_sg_log_scsi & 1) {
if (fp == NULL) { if (fp == NULL) {
@ -1789,9 +1735,7 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
} }
} }
if (burn_sg_log_scsi & 3) if (burn_sg_log_scsi & 3)
sg_log_cmd(c,fp,0); scsi_log_cmd(c,fp,0);
#endif /* Libburn_log_sg_commandS */
/* ts A61010 : with no fd there is no chance to send an ioctl */ /* ts A61010 : with no fd there is no chance to send an ioctl */
if (d->fd < 0) { if (d->fd < 0) {
@ -1931,12 +1875,8 @@ ex:;
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH, LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
msg, 0, 0); msg, 0, 0);
} }
#ifdef Libburn_log_sg_commandS
if (burn_sg_log_scsi & 3) if (burn_sg_log_scsi & 3)
sg_log_err(c, fp, &s, c->error != 0); sg_log_err(c, fp, &s, c->error != 0);
#endif /* Libburn_log_sg_commandS */
return 1; return 1;
} }

View File

@ -65,5 +65,9 @@ int scsi_show_cmd_text(struct command *c, void *fp, int flag);
/* ts A91106 */ /* ts A91106 */
int scsi_show_cmd_reply(struct command *c, void *fp, int flag); int scsi_show_cmd_reply(struct command *c, void *fp, int flag);
/* ts A91218 (former sg_log_cmd ts A70518) */
/** Logs command (before execution) */
int scsi_log_cmd(struct command *c, void *fp, int flag);
#endif /*__SPC*/ #endif /*__SPC*/