diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-22 20:34:15 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-22 20:34:15 -0400 |
commit | c70b5296e775cde46cfcb2d860ba160108a5ec7a (patch) | |
tree | 30419cb982acca44499236adcca65f2f87698c74 /drivers/scsi/st.c | |
parent | 80c226fbef56576946c9655fcb2ab62e63404d12 (diff) | |
parent | 58ff4bd042adf8013c8f70fd03c2c0f8d022e387 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (84 commits)
[SCSI] be2iscsi: SGE Len == 64K
[SCSI] be2iscsi: Remove premature free of cid
[SCSI] be2iscsi: More time for FW
[SCSI] libsas: fix bug for vacant phy
[SCSI] sd: Fix overflow with big physical blocks
[SCSI] st: add MTWEOFI to write filemarks without flushing drive buffer
[SCSI] libsas: Don't issue commands to devices that have been hot-removed
[SCSI] megaraid_sas: Add Online Controller Reset to MegaRAID SAS drive
[SCSI] lpfc 8.3.17: Update lpfc driver version to 8.3.17
[SCSI] lpfc 8.3.17: Replace function reset methodology
[SCSI] lpfc 8.3.17: SCSI fixes
[SCSI] lpfc 8.3.17: BSG fixes
[SCSI] lpfc 8.3.17: SLI Additions and Fixes
[SCSI] lpfc 8.3.17: Code Cleanup and Locking fixes
[SCSI] zfcp: Remove scsi_cmnd->serial_number from debug traces
[SCSI] ipr: fix array error logging
[SCSI] aha152x: enable PCMCIA on 64bit
[SCSI] scsi_dh_alua: Handle all states correctly
[SCSI] cxgb4i: connection and ddp setting update
[SCSI] cxgb3i: fixed connection over vlan
...
Diffstat (limited to 'drivers/scsi/st.c')
-rw-r--r-- | drivers/scsi/st.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c index afdc3f5d915c..5b7388f1c835 100644 --- a/drivers/scsi/st.c +++ b/drivers/scsi/st.c | |||
@@ -9,7 +9,7 @@ | |||
9 | Steve Hirsch, Andreas Koppenh"ofer, Michael Leodolter, Eyal Lebedinsky, | 9 | Steve Hirsch, Andreas Koppenh"ofer, Michael Leodolter, Eyal Lebedinsky, |
10 | Michael Schaefer, J"org Weule, and Eric Youngdale. | 10 | Michael Schaefer, J"org Weule, and Eric Youngdale. |
11 | 11 | ||
12 | Copyright 1992 - 2008 Kai Makisara | 12 | Copyright 1992 - 2010 Kai Makisara |
13 | email Kai.Makisara@kolumbus.fi | 13 | email Kai.Makisara@kolumbus.fi |
14 | 14 | ||
15 | Some small formal changes - aeb, 950809 | 15 | Some small formal changes - aeb, 950809 |
@@ -17,7 +17,7 @@ | |||
17 | Last modified: 18-JAN-1998 Richard Gooch <rgooch@atnf.csiro.au> Devfs support | 17 | Last modified: 18-JAN-1998 Richard Gooch <rgooch@atnf.csiro.au> Devfs support |
18 | */ | 18 | */ |
19 | 19 | ||
20 | static const char *verstr = "20081215"; | 20 | static const char *verstr = "20100829"; |
21 | 21 | ||
22 | #include <linux/module.h> | 22 | #include <linux/module.h> |
23 | 23 | ||
@@ -2696,18 +2696,21 @@ static int st_int_ioctl(struct scsi_tape *STp, unsigned int cmd_in, unsigned lon | |||
2696 | } | 2696 | } |
2697 | break; | 2697 | break; |
2698 | case MTWEOF: | 2698 | case MTWEOF: |
2699 | case MTWEOFI: | ||
2699 | case MTWSM: | 2700 | case MTWSM: |
2700 | if (STp->write_prot) | 2701 | if (STp->write_prot) |
2701 | return (-EACCES); | 2702 | return (-EACCES); |
2702 | cmd[0] = WRITE_FILEMARKS; | 2703 | cmd[0] = WRITE_FILEMARKS; |
2703 | if (cmd_in == MTWSM) | 2704 | if (cmd_in == MTWSM) |
2704 | cmd[1] = 2; | 2705 | cmd[1] = 2; |
2706 | if (cmd_in == MTWEOFI) | ||
2707 | cmd[1] |= 1; | ||
2705 | cmd[2] = (arg >> 16); | 2708 | cmd[2] = (arg >> 16); |
2706 | cmd[3] = (arg >> 8); | 2709 | cmd[3] = (arg >> 8); |
2707 | cmd[4] = arg; | 2710 | cmd[4] = arg; |
2708 | timeout = STp->device->request_queue->rq_timeout; | 2711 | timeout = STp->device->request_queue->rq_timeout; |
2709 | DEBC( | 2712 | DEBC( |
2710 | if (cmd_in == MTWEOF) | 2713 | if (cmd_in != MTWSM) |
2711 | printk(ST_DEB_MSG "%s: Writing %d filemarks.\n", name, | 2714 | printk(ST_DEB_MSG "%s: Writing %d filemarks.\n", name, |
2712 | cmd[2] * 65536 + cmd[3] * 256 + cmd[4]); | 2715 | cmd[2] * 65536 + cmd[3] * 256 + cmd[4]); |
2713 | else | 2716 | else |
@@ -2883,8 +2886,8 @@ static int st_int_ioctl(struct scsi_tape *STp, unsigned int cmd_in, unsigned lon | |||
2883 | else if (chg_eof) | 2886 | else if (chg_eof) |
2884 | STps->eof = ST_NOEOF; | 2887 | STps->eof = ST_NOEOF; |
2885 | 2888 | ||
2886 | if (cmd_in == MTWEOF) | 2889 | if (cmd_in == MTWEOF || cmd_in == MTWEOFI) |
2887 | STps->rw = ST_IDLE; | 2890 | STps->rw = ST_IDLE; /* prevent automatic WEOF at close */ |
2888 | } else { /* SCSI command was not completely successful. Don't return | 2891 | } else { /* SCSI command was not completely successful. Don't return |
2889 | from this block without releasing the SCSI command block! */ | 2892 | from this block without releasing the SCSI command block! */ |
2890 | struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat; | 2893 | struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat; |
@@ -2901,7 +2904,7 @@ static int st_int_ioctl(struct scsi_tape *STp, unsigned int cmd_in, unsigned lon | |||
2901 | else | 2904 | else |
2902 | undone = 0; | 2905 | undone = 0; |
2903 | 2906 | ||
2904 | if (cmd_in == MTWEOF && | 2907 | if ((cmd_in == MTWEOF || cmd_in == MTWEOFI) && |
2905 | cmdstatp->have_sense && | 2908 | cmdstatp->have_sense && |
2906 | (cmdstatp->flags & SENSE_EOM)) { | 2909 | (cmdstatp->flags & SENSE_EOM)) { |
2907 | if (cmdstatp->sense_hdr.sense_key == NO_SENSE || | 2910 | if (cmdstatp->sense_hdr.sense_key == NO_SENSE || |