diff options
-rw-r--r-- | drivers/scsi/st.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c index e016e0906e1a..488ec7948a57 100644 --- a/drivers/scsi/st.c +++ b/drivers/scsi/st.c | |||
@@ -2816,15 +2816,18 @@ static int st_int_ioctl(struct scsi_tape *STp, unsigned int cmd_in, unsigned lon | |||
2816 | 2816 | ||
2817 | if (cmd_in == MTWEOF && | 2817 | if (cmd_in == MTWEOF && |
2818 | cmdstatp->have_sense && | 2818 | cmdstatp->have_sense && |
2819 | (cmdstatp->flags & SENSE_EOM) && | 2819 | (cmdstatp->flags & SENSE_EOM)) { |
2820 | (cmdstatp->sense_hdr.sense_key == NO_SENSE || | 2820 | if (cmdstatp->sense_hdr.sense_key == NO_SENSE || |
2821 | cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) && | 2821 | cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) { |
2822 | undone == 0) { | 2822 | ioctl_result = 0; /* EOF(s) written successfully at EOM */ |
2823 | ioctl_result = 0; /* EOF written successfully at EOM */ | 2823 | STps->eof = ST_NOEOF; |
2824 | if (fileno >= 0) | 2824 | } else { /* Writing EOF(s) failed */ |
2825 | fileno++; | 2825 | if (fileno >= 0) |
2826 | fileno -= undone; | ||
2827 | if (undone < arg) | ||
2828 | STps->eof = ST_NOEOF; | ||
2829 | } | ||
2826 | STps->drv_file = fileno; | 2830 | STps->drv_file = fileno; |
2827 | STps->eof = ST_NOEOF; | ||
2828 | } else if ((cmd_in == MTFSF) || (cmd_in == MTFSFM)) { | 2831 | } else if ((cmd_in == MTFSF) || (cmd_in == MTFSFM)) { |
2829 | if (fileno >= 0) | 2832 | if (fileno >= 0) |
2830 | STps->drv_file = fileno - undone; | 2833 | STps->drv_file = fileno - undone; |