2 SCSI Tape Driver for Linux version 1.1 and newer. See the accompanying
3 file Documentation/scsi/st.txt for more information.
6 Rewritten from Dwayne Forsyth's SCSI tape driver by Kai Makisara.
7 Contribution and ideas from several people including (in alphabetical
8 order) Klaus Ehrenfried, Eugene Exarevsky, Eric Lee Green, Wolfgang Denk,
9 Steve Hirsch, Andreas Koppenh"ofer, Michael Leodolter, Eyal Lebedinsky,
10 Michael Schaefer, J"org Weule, and Eric Youngdale.
12 Copyright 1992 - 2010 Kai Makisara
13 email Kai.Makisara@kolumbus.fi
15 Some small formal changes - aeb, 950809
17 Last modified: 18-JAN-1998 Richard Gooch <rgooch@atnf.csiro.au> Devfs support
20 static const char *verstr
= "20101219";
22 #include <linux/module.h>
25 #include <linux/kernel.h>
26 #include <linux/sched.h>
28 #include <linux/init.h>
29 #include <linux/string.h>
30 #include <linux/slab.h>
31 #include <linux/errno.h>
32 #include <linux/mtio.h>
33 #include <linux/cdrom.h>
34 #include <linux/ioctl.h>
35 #include <linux/fcntl.h>
36 #include <linux/spinlock.h>
37 #include <linux/blkdev.h>
38 #include <linux/moduleparam.h>
39 #include <linux/cdev.h>
40 #include <linux/idr.h>
41 #include <linux/delay.h>
42 #include <linux/mutex.h>
44 #include <asm/uaccess.h>
47 #include <scsi/scsi.h>
48 #include <scsi/scsi_dbg.h>
49 #include <scsi/scsi_device.h>
50 #include <scsi/scsi_driver.h>
51 #include <scsi/scsi_eh.h>
52 #include <scsi/scsi_host.h>
53 #include <scsi/scsi_ioctl.h>
57 /* The driver prints some debugging information on the console if DEBUG
58 is defined and non-zero. */
62 /* The message level for the debug messages is currently set to KERN_NOTICE
63 so that people can easily see the messages. Later when the debugging messages
64 in the drivers are more widely classified, this may be changed to KERN_DEBUG. */
65 #define ST_DEB_MSG KERN_NOTICE
67 #define DEBC(a) if (debugging) { a ; }
73 #define ST_KILOBYTE 1024
75 #include "st_options.h"
78 static int buffer_kbs
;
79 static int max_sg_segs
;
80 static int try_direct_io
= TRY_DIRECT_IO
;
81 static int try_rdio
= 1;
82 static int try_wdio
= 1;
84 static struct class st_sysfs_class
;
85 static const struct attribute_group
*st_dev_groups
[];
87 MODULE_AUTHOR("Kai Makisara");
88 MODULE_DESCRIPTION("SCSI tape (st) driver");
89 MODULE_LICENSE("GPL");
90 MODULE_ALIAS_CHARDEV_MAJOR(SCSI_TAPE_MAJOR
);
91 MODULE_ALIAS_SCSI_DEVICE(TYPE_TAPE
);
93 /* Set 'perm' (4th argument) to 0 to disable module_param's definition
94 * of sysfs parameters (which module_param doesn't yet support).
95 * Sysfs parameters defined explicitly later.
97 module_param_named(buffer_kbs
, buffer_kbs
, int, 0);
98 MODULE_PARM_DESC(buffer_kbs
, "Default driver buffer size for fixed block mode (KB; 32)");
99 module_param_named(max_sg_segs
, max_sg_segs
, int, 0);
100 MODULE_PARM_DESC(max_sg_segs
, "Maximum number of scatter/gather segments to use (256)");
101 module_param_named(try_direct_io
, try_direct_io
, int, 0);
102 MODULE_PARM_DESC(try_direct_io
, "Try direct I/O between user buffer and tape drive (1)");
104 /* Extra parameters for testing */
105 module_param_named(try_rdio
, try_rdio
, int, 0);
106 MODULE_PARM_DESC(try_rdio
, "Try direct read i/o when possible");
107 module_param_named(try_wdio
, try_wdio
, int, 0);
108 MODULE_PARM_DESC(try_wdio
, "Try direct write i/o when possible");
111 static int write_threshold_kbs
; /* retained for compatibility */
112 static struct st_dev_parm
{
115 } parms
[] __initdata
= {
117 "buffer_kbs", &buffer_kbs
119 { /* Retained for compatibility with 2.4 */
120 "write_threshold_kbs", &write_threshold_kbs
126 "try_direct_io", &try_direct_io
131 /* Restrict the number of modes so that names for all are assigned */
132 #if ST_NBR_MODES > 16
133 #error "Maximum number of modes is 16"
135 /* Bit reversed order to get same names for same minors with all
137 static const char *st_formats
[] = {
138 "", "r", "k", "s", "l", "t", "o", "u",
139 "m", "v", "p", "x", "a", "y", "q", "z"};
141 /* The default definitions have been moved to st_options.h */
143 #define ST_FIXED_BUFFER_SIZE (ST_FIXED_BUFFER_BLOCKS * ST_KILOBYTE)
145 /* The buffer size should fit into the 24 bits for length in the
146 6-byte SCSI read and write commands. */
147 #if ST_FIXED_BUFFER_SIZE >= (2 << 24 - 1)
148 #error "Buffer size should not exceed (2 << 24 - 1) bytes!"
151 static int debugging
= DEBUG
;
153 #define MAX_RETRIES 0
154 #define MAX_WRITE_RETRIES 0
155 #define MAX_READY_RETRIES 0
156 #define NO_TAPE NOT_READY
158 #define ST_TIMEOUT (900 * HZ)
159 #define ST_LONG_TIMEOUT (14000 * HZ)
161 /* Remove mode bits and auto-rewind bit (7) */
162 #define TAPE_NR(x) ( ((iminor(x) & ~255) >> (ST_NBR_MODE_BITS + 1)) | \
163 (iminor(x) & ~(-1 << ST_MODE_SHIFT)) )
164 #define TAPE_MODE(x) ((iminor(x) & ST_MODE_MASK) >> ST_MODE_SHIFT)
166 /* Construct the minor number from the device (d), mode (m), and non-rewind (n) data */
167 #define TAPE_MINOR(d, m, n) (((d & ~(255 >> (ST_NBR_MODE_BITS + 1))) << (ST_NBR_MODE_BITS + 1)) | \
168 (d & (255 >> (ST_NBR_MODE_BITS + 1))) | (m << ST_MODE_SHIFT) | ((n != 0) << 7) )
170 /* Internal ioctl to set both density (uppermost 8 bits) and blocksize (lower
172 #define SET_DENS_AND_BLK 0x10001
174 static int st_fixed_buffer_size
= ST_FIXED_BUFFER_SIZE
;
175 static int st_max_sg_segs
= ST_MAX_SG
;
177 static int modes_defined
;
179 static int enlarge_buffer(struct st_buffer
*, int, int);
180 static void clear_buffer(struct st_buffer
*);
181 static void normalize_buffer(struct st_buffer
*);
182 static int append_to_buffer(const char __user
*, struct st_buffer
*, int);
183 static int from_buffer(struct st_buffer
*, char __user
*, int);
184 static void move_buffer_data(struct st_buffer
*, int);
186 static int sgl_map_user_pages(struct st_buffer
*, const unsigned int,
187 unsigned long, size_t, int);
188 static int sgl_unmap_user_pages(struct st_buffer
*, const unsigned int, int);
190 static int st_probe(struct device
*);
191 static int st_remove(struct device
*);
193 static int do_create_sysfs_files(void);
194 static void do_remove_sysfs_files(void);
196 static struct scsi_driver st_template
= {
197 .owner
= THIS_MODULE
,
205 static int st_compression(struct scsi_tape
*, int);
207 static int find_partition(struct scsi_tape
*);
208 static int switch_partition(struct scsi_tape
*);
210 static int st_int_ioctl(struct scsi_tape
*, unsigned int, unsigned long);
212 static void scsi_tape_release(struct kref
*);
214 #define to_scsi_tape(obj) container_of(obj, struct scsi_tape, kref)
216 static DEFINE_MUTEX(st_ref_mutex
);
217 static DEFINE_SPINLOCK(st_index_lock
);
218 static DEFINE_SPINLOCK(st_use_lock
);
219 static DEFINE_IDR(st_index_idr
);
223 #include "osst_detect.h"
224 #ifndef SIGS_FROM_OSST
225 #define SIGS_FROM_OSST \
226 {"OnStream", "SC-", "", "osst"}, \
227 {"OnStream", "DI-", "", "osst"}, \
228 {"OnStream", "DP-", "", "osst"}, \
229 {"OnStream", "USB", "", "osst"}, \
230 {"OnStream", "FW-", "", "osst"}
233 static struct scsi_tape
*scsi_tape_get(int dev
)
235 struct scsi_tape
*STp
= NULL
;
237 mutex_lock(&st_ref_mutex
);
238 spin_lock(&st_index_lock
);
240 STp
= idr_find(&st_index_idr
, dev
);
243 kref_get(&STp
->kref
);
248 if (scsi_device_get(STp
->device
))
254 kref_put(&STp
->kref
, scsi_tape_release
);
257 spin_unlock(&st_index_lock
);
258 mutex_unlock(&st_ref_mutex
);
262 static void scsi_tape_put(struct scsi_tape
*STp
)
264 struct scsi_device
*sdev
= STp
->device
;
266 mutex_lock(&st_ref_mutex
);
267 kref_put(&STp
->kref
, scsi_tape_release
);
268 scsi_device_put(sdev
);
269 mutex_unlock(&st_ref_mutex
);
272 struct st_reject_data
{
276 char *driver_hint
; /* Name of the correct driver, NULL if unknown */
279 static struct st_reject_data reject_list
[] = {
280 /* {"XXX", "Yy-", "", NULL}, example */
284 /* If the device signature is on the list of incompatible drives, the
285 function returns a pointer to the name of the correct driver (if known) */
286 static char * st_incompatible(struct scsi_device
* SDp
)
288 struct st_reject_data
*rp
;
290 for (rp
=&(reject_list
[0]); rp
->vendor
!= NULL
; rp
++)
291 if (!strncmp(rp
->vendor
, SDp
->vendor
, strlen(rp
->vendor
)) &&
292 !strncmp(rp
->model
, SDp
->model
, strlen(rp
->model
)) &&
293 !strncmp(rp
->rev
, SDp
->rev
, strlen(rp
->rev
))) {
295 return rp
->driver_hint
;
303 static inline char *tape_name(struct scsi_tape
*tape
)
305 return tape
->disk
->disk_name
;
309 static void st_analyze_sense(struct st_request
*SRpnt
, struct st_cmdstatus
*s
)
312 const u8
*sense
= SRpnt
->sense
;
314 s
->have_sense
= scsi_normalize_sense(SRpnt
->sense
,
315 SCSI_SENSE_BUFFERSIZE
, &s
->sense_hdr
);
321 scsi_get_sense_info_fld(sense
, SCSI_SENSE_BUFFERSIZE
, &s
->uremainder64
);
322 switch (sense
[0] & 0x7f) {
327 s
->flags
= sense
[2] & 0xe0;
333 ucp
= scsi_sense_desc_find(sense
, SCSI_SENSE_BUFFERSIZE
, 4);
334 s
->flags
= ucp
? (ucp
[3] & 0xe0) : 0;
341 /* Convert the result to success code */
342 static int st_chk_result(struct scsi_tape
*STp
, struct st_request
* SRpnt
)
344 int result
= SRpnt
->result
;
346 DEB(const char *stp
;)
347 char *name
= tape_name(STp
);
348 struct st_cmdstatus
*cmdstatp
;
353 cmdstatp
= &STp
->buffer
->cmdstat
;
354 st_analyze_sense(SRpnt
, cmdstatp
);
356 if (cmdstatp
->have_sense
)
357 scode
= STp
->buffer
->cmdstat
.sense_hdr
.sense_key
;
363 printk(ST_DEB_MSG
"%s: Error: %x, cmd: %x %x %x %x %x %x\n",
365 SRpnt
->cmd
[0], SRpnt
->cmd
[1], SRpnt
->cmd
[2],
366 SRpnt
->cmd
[3], SRpnt
->cmd
[4], SRpnt
->cmd
[5]);
367 if (cmdstatp
->have_sense
)
368 __scsi_print_sense(name
, SRpnt
->sense
, SCSI_SENSE_BUFFERSIZE
);
370 if (!debugging
) { /* Abnormal conditions for tape */
371 if (!cmdstatp
->have_sense
)
373 "%s: Error %x (driver bt 0x%x, host bt 0x%x).\n",
374 name
, result
, driver_byte(result
),
376 else if (cmdstatp
->have_sense
&&
378 scode
!= RECOVERED_ERROR
&&
379 /* scode != UNIT_ATTENTION && */
380 scode
!= BLANK_CHECK
&&
381 scode
!= VOLUME_OVERFLOW
&&
382 SRpnt
->cmd
[0] != MODE_SENSE
&&
383 SRpnt
->cmd
[0] != TEST_UNIT_READY
) {
385 __scsi_print_sense(name
, SRpnt
->sense
, SCSI_SENSE_BUFFERSIZE
);
389 if (cmdstatp
->fixed_format
&&
390 STp
->cln_mode
>= EXTENDED_SENSE_START
) { /* Only fixed format sense */
391 if (STp
->cln_sense_value
)
392 STp
->cleaning_req
|= ((SRpnt
->sense
[STp
->cln_mode
] &
393 STp
->cln_sense_mask
) == STp
->cln_sense_value
);
395 STp
->cleaning_req
|= ((SRpnt
->sense
[STp
->cln_mode
] &
396 STp
->cln_sense_mask
) != 0);
398 if (cmdstatp
->have_sense
&&
399 cmdstatp
->sense_hdr
.asc
== 0 && cmdstatp
->sense_hdr
.ascq
== 0x17)
400 STp
->cleaning_req
= 1; /* ASC and ASCQ => cleaning requested */
402 STp
->pos_unknown
|= STp
->device
->was_reset
;
404 if (cmdstatp
->have_sense
&&
405 scode
== RECOVERED_ERROR
406 #if ST_RECOVERED_WRITE_FATAL
407 && SRpnt
->cmd
[0] != WRITE_6
408 && SRpnt
->cmd
[0] != WRITE_FILEMARKS
411 STp
->recover_count
++;
416 if (SRpnt
->cmd
[0] == READ_6
)
418 else if (SRpnt
->cmd
[0] == WRITE_6
)
422 printk(ST_DEB_MSG
"%s: Recovered %s error (%d).\n", name
, stp
,
426 if (cmdstatp
->flags
== 0)
432 static struct st_request
*st_allocate_request(struct scsi_tape
*stp
)
434 struct st_request
*streq
;
436 streq
= kzalloc(sizeof(*streq
), GFP_KERNEL
);
440 DEBC(printk(KERN_ERR
"%s: Can't get SCSI request.\n",
442 if (signal_pending(current
))
443 stp
->buffer
->syscall_result
= -EINTR
;
445 stp
->buffer
->syscall_result
= -EBUSY
;
451 static void st_release_request(struct st_request
*streq
)
456 static void st_scsi_execute_end(struct request
*req
, int uptodate
)
458 struct st_request
*SRpnt
= req
->end_io_data
;
459 struct scsi_tape
*STp
= SRpnt
->stp
;
462 STp
->buffer
->cmdstat
.midlevel_result
= SRpnt
->result
= req
->errors
;
463 STp
->buffer
->cmdstat
.residual
= req
->resid_len
;
467 complete(SRpnt
->waiting
);
469 blk_rq_unmap_user(tmp
);
470 __blk_put_request(req
->q
, req
);
473 static int st_scsi_execute(struct st_request
*SRpnt
, const unsigned char *cmd
,
474 int data_direction
, void *buffer
, unsigned bufflen
,
475 int timeout
, int retries
)
478 struct rq_map_data
*mdata
= &SRpnt
->stp
->buffer
->map_data
;
480 int write
= (data_direction
== DMA_TO_DEVICE
);
482 req
= blk_get_request(SRpnt
->stp
->device
->request_queue
, write
,
485 return DRIVER_ERROR
<< 24;
487 req
->cmd_type
= REQ_TYPE_BLOCK_PC
;
488 req
->cmd_flags
|= REQ_QUIET
;
490 mdata
->null_mapped
= 1;
493 err
= blk_rq_map_user(req
->q
, req
, mdata
, NULL
, bufflen
,
496 blk_put_request(req
);
497 return DRIVER_ERROR
<< 24;
501 SRpnt
->bio
= req
->bio
;
502 req
->cmd_len
= COMMAND_SIZE(cmd
[0]);
503 memset(req
->cmd
, 0, BLK_MAX_CDB
);
504 memcpy(req
->cmd
, cmd
, req
->cmd_len
);
505 req
->sense
= SRpnt
->sense
;
507 req
->timeout
= timeout
;
508 req
->retries
= retries
;
509 req
->end_io_data
= SRpnt
;
511 blk_execute_rq_nowait(req
->q
, NULL
, req
, 1, st_scsi_execute_end
);
515 /* Do the scsi command. Waits until command performed if do_wait is true.
516 Otherwise write_behind_check() is used to check that the command
518 static struct st_request
*
519 st_do_scsi(struct st_request
* SRpnt
, struct scsi_tape
* STp
, unsigned char *cmd
,
520 int bytes
, int direction
, int timeout
, int retries
, int do_wait
)
522 struct completion
*waiting
;
523 struct rq_map_data
*mdata
= &STp
->buffer
->map_data
;
526 /* if async, make sure there's no command outstanding */
527 if (!do_wait
&& ((STp
->buffer
)->last_SRpnt
)) {
528 printk(KERN_ERR
"%s: Async command already active.\n",
530 if (signal_pending(current
))
531 (STp
->buffer
)->syscall_result
= (-EINTR
);
533 (STp
->buffer
)->syscall_result
= (-EBUSY
);
538 SRpnt
= st_allocate_request(STp
);
543 /* If async IO, set last_SRpnt. This ptr tells write_behind_check
544 which IO is outstanding. It's nulled out when the IO completes. */
546 (STp
->buffer
)->last_SRpnt
= SRpnt
;
548 waiting
= &STp
->wait
;
549 init_completion(waiting
);
550 SRpnt
->waiting
= waiting
;
552 if (STp
->buffer
->do_dio
) {
553 mdata
->page_order
= 0;
554 mdata
->nr_entries
= STp
->buffer
->sg_segs
;
555 mdata
->pages
= STp
->buffer
->mapped_pages
;
557 mdata
->page_order
= STp
->buffer
->reserved_page_order
;
559 DIV_ROUND_UP(bytes
, PAGE_SIZE
<< mdata
->page_order
);
560 mdata
->pages
= STp
->buffer
->reserved_pages
;
564 memcpy(SRpnt
->cmd
, cmd
, sizeof(SRpnt
->cmd
));
565 STp
->buffer
->cmdstat
.have_sense
= 0;
566 STp
->buffer
->syscall_result
= 0;
568 ret
= st_scsi_execute(SRpnt
, cmd
, direction
, NULL
, bytes
, timeout
,
571 /* could not allocate the buffer or request was too large */
572 (STp
->buffer
)->syscall_result
= (-EBUSY
);
573 (STp
->buffer
)->last_SRpnt
= NULL
;
574 } else if (do_wait
) {
575 wait_for_completion(waiting
);
576 SRpnt
->waiting
= NULL
;
577 (STp
->buffer
)->syscall_result
= st_chk_result(STp
, SRpnt
);
584 /* Handle the write-behind checking (waits for completion). Returns -ENOSPC if
585 write has been correct but EOM early warning reached, -EIO if write ended in
586 error or zero if write successful. Asynchronous writes are used only in
587 variable block mode. */
588 static int write_behind_check(struct scsi_tape
* STp
)
591 struct st_buffer
*STbuffer
;
592 struct st_partstat
*STps
;
593 struct st_cmdstatus
*cmdstatp
;
594 struct st_request
*SRpnt
;
596 STbuffer
= STp
->buffer
;
597 if (!STbuffer
->writing
)
601 if (STp
->write_pending
)
607 wait_for_completion(&(STp
->wait
));
608 SRpnt
= STbuffer
->last_SRpnt
;
609 STbuffer
->last_SRpnt
= NULL
;
610 SRpnt
->waiting
= NULL
;
612 (STp
->buffer
)->syscall_result
= st_chk_result(STp
, SRpnt
);
613 st_release_request(SRpnt
);
615 STbuffer
->buffer_bytes
-= STbuffer
->writing
;
616 STps
= &(STp
->ps
[STp
->partition
]);
617 if (STps
->drv_block
>= 0) {
618 if (STp
->block_size
== 0)
621 STps
->drv_block
+= STbuffer
->writing
/ STp
->block_size
;
624 cmdstatp
= &STbuffer
->cmdstat
;
625 if (STbuffer
->syscall_result
) {
627 if (cmdstatp
->have_sense
&& !cmdstatp
->deferred
&&
628 (cmdstatp
->flags
& SENSE_EOM
) &&
629 (cmdstatp
->sense_hdr
.sense_key
== NO_SENSE
||
630 cmdstatp
->sense_hdr
.sense_key
== RECOVERED_ERROR
)) {
631 /* EOM at write-behind, has all data been written? */
632 if (!cmdstatp
->remainder_valid
||
633 cmdstatp
->uremainder64
== 0)
637 STps
->drv_block
= -1;
639 STbuffer
->writing
= 0;
641 DEB(if (debugging
&& retval
)
642 printk(ST_DEB_MSG
"%s: Async write error %x, return value %d.\n",
643 tape_name(STp
), STbuffer
->cmdstat
.midlevel_result
, retval
);) /* end DEB */
649 /* Step over EOF if it has been inadvertently crossed (ioctl not used because
650 it messes up the block number). */
651 static int cross_eof(struct scsi_tape
* STp
, int forward
)
653 struct st_request
*SRpnt
;
654 unsigned char cmd
[MAX_COMMAND_SIZE
];
657 cmd
[1] = 0x01; /* Space FileMarks */
662 cmd
[2] = cmd
[3] = cmd
[4] = 0xff; /* -1 filemarks */
665 DEBC(printk(ST_DEB_MSG
"%s: Stepping over filemark %s.\n",
666 tape_name(STp
), forward
? "forward" : "backward"));
668 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, 0, DMA_NONE
,
669 STp
->device
->request_queue
->rq_timeout
,
672 return (STp
->buffer
)->syscall_result
;
674 st_release_request(SRpnt
);
677 if ((STp
->buffer
)->cmdstat
.midlevel_result
!= 0)
678 printk(KERN_ERR
"%s: Stepping over filemark %s failed.\n",
679 tape_name(STp
), forward
? "forward" : "backward");
681 return (STp
->buffer
)->syscall_result
;
685 /* Flush the write buffer (never need to write if variable blocksize). */
686 static int st_flush_write_buffer(struct scsi_tape
* STp
)
690 unsigned char cmd
[MAX_COMMAND_SIZE
];
691 struct st_request
*SRpnt
;
692 struct st_partstat
*STps
;
694 result
= write_behind_check(STp
);
699 if (STp
->dirty
== 1) {
701 transfer
= STp
->buffer
->buffer_bytes
;
702 DEBC(printk(ST_DEB_MSG
"%s: Flushing %d bytes.\n",
703 tape_name(STp
), transfer
));
705 memset(cmd
, 0, MAX_COMMAND_SIZE
);
708 blks
= transfer
/ STp
->block_size
;
713 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, transfer
, DMA_TO_DEVICE
,
714 STp
->device
->request_queue
->rq_timeout
,
715 MAX_WRITE_RETRIES
, 1);
717 return (STp
->buffer
)->syscall_result
;
719 STps
= &(STp
->ps
[STp
->partition
]);
720 if ((STp
->buffer
)->syscall_result
!= 0) {
721 struct st_cmdstatus
*cmdstatp
= &STp
->buffer
->cmdstat
;
723 if (cmdstatp
->have_sense
&& !cmdstatp
->deferred
&&
724 (cmdstatp
->flags
& SENSE_EOM
) &&
725 (cmdstatp
->sense_hdr
.sense_key
== NO_SENSE
||
726 cmdstatp
->sense_hdr
.sense_key
== RECOVERED_ERROR
) &&
727 (!cmdstatp
->remainder_valid
||
728 cmdstatp
->uremainder64
== 0)) { /* All written at EOM early warning */
730 (STp
->buffer
)->buffer_bytes
= 0;
731 if (STps
->drv_block
>= 0)
732 STps
->drv_block
+= blks
;
735 printk(KERN_ERR
"%s: Error on flush.\n",
737 STps
->drv_block
= (-1);
741 if (STps
->drv_block
>= 0)
742 STps
->drv_block
+= blks
;
744 (STp
->buffer
)->buffer_bytes
= 0;
746 st_release_request(SRpnt
);
753 /* Flush the tape buffer. The tape will be positioned correctly unless
754 seek_next is true. */
755 static int flush_buffer(struct scsi_tape
*STp
, int seek_next
)
757 int backspace
, result
;
758 struct st_buffer
*STbuffer
;
759 struct st_partstat
*STps
;
761 STbuffer
= STp
->buffer
;
764 * If there was a bus reset, block further access
767 if (STp
->pos_unknown
)
770 if (STp
->ready
!= ST_READY
)
772 STps
= &(STp
->ps
[STp
->partition
]);
773 if (STps
->rw
== ST_WRITING
) /* Writing */
774 return st_flush_write_buffer(STp
);
776 if (STp
->block_size
== 0)
779 backspace
= ((STp
->buffer
)->buffer_bytes
+
780 (STp
->buffer
)->read_pointer
) / STp
->block_size
-
781 ((STp
->buffer
)->read_pointer
+ STp
->block_size
- 1) /
783 (STp
->buffer
)->buffer_bytes
= 0;
784 (STp
->buffer
)->read_pointer
= 0;
787 if (STps
->eof
== ST_FM_HIT
) {
788 result
= cross_eof(STp
, 0); /* Back over the EOF hit */
790 STps
->eof
= ST_NOEOF
;
792 if (STps
->drv_file
>= 0)
797 if (!result
&& backspace
> 0)
798 result
= st_int_ioctl(STp
, MTBSR
, backspace
);
799 } else if (STps
->eof
== ST_FM_HIT
) {
800 if (STps
->drv_file
>= 0)
803 STps
->eof
= ST_NOEOF
;
809 /* Set the mode parameters */
810 static int set_mode_densblk(struct scsi_tape
* STp
, struct st_modedef
* STm
)
814 char *name
= tape_name(STp
);
816 if (!STp
->density_changed
&&
817 STm
->default_density
>= 0 &&
818 STm
->default_density
!= STp
->density
) {
819 arg
= STm
->default_density
;
823 arg
<<= MT_ST_DENSITY_SHIFT
;
824 if (!STp
->blksize_changed
&&
825 STm
->default_blksize
>= 0 &&
826 STm
->default_blksize
!= STp
->block_size
) {
827 arg
|= STm
->default_blksize
;
830 arg
|= STp
->block_size
;
832 st_int_ioctl(STp
, SET_DENS_AND_BLK
, arg
)) {
834 "%s: Can't set default block size to %d bytes and density %x.\n",
835 name
, STm
->default_blksize
, STm
->default_density
);
843 /* Lock or unlock the drive door. Don't use when st_request allocated. */
844 static int do_door_lock(struct scsi_tape
* STp
, int do_lock
)
847 DEB(char *name
= tape_name(STp
);)
850 cmd
= do_lock
? SCSI_IOCTL_DOORLOCK
: SCSI_IOCTL_DOORUNLOCK
;
851 DEBC(printk(ST_DEB_MSG
"%s: %socking drive door.\n", name
,
852 do_lock
? "L" : "Unl"));
853 retval
= scsi_ioctl(STp
->device
, cmd
, NULL
);
855 STp
->door_locked
= do_lock
? ST_LOCKED_EXPLICIT
: ST_UNLOCKED
;
858 STp
->door_locked
= ST_LOCK_FAILS
;
864 /* Set the internal state after reset */
865 static void reset_state(struct scsi_tape
*STp
)
868 struct st_partstat
*STps
;
870 STp
->pos_unknown
= 0;
871 for (i
= 0; i
< ST_NBR_PARTITIONS
; i
++) {
872 STps
= &(STp
->ps
[i
]);
874 STps
->eof
= ST_NOEOF
;
876 STps
->last_block_valid
= 0;
877 STps
->drv_block
= -1;
880 if (STp
->can_partitions
) {
881 STp
->partition
= find_partition(STp
);
882 if (STp
->partition
< 0)
884 STp
->new_partition
= STp
->partition
;
888 /* Test if the drive is ready. Returns either one of the codes below or a negative system
890 #define CHKRES_READY 0
891 #define CHKRES_NEW_SESSION 1
892 #define CHKRES_NOT_READY 2
893 #define CHKRES_NO_TAPE 3
895 #define MAX_ATTENTIONS 10
897 static int test_ready(struct scsi_tape
*STp
, int do_wait
)
899 int attentions
, waits
, max_wait
, scode
;
900 int retval
= CHKRES_READY
, new_session
= 0;
901 unsigned char cmd
[MAX_COMMAND_SIZE
];
902 struct st_request
*SRpnt
= NULL
;
903 struct st_cmdstatus
*cmdstatp
= &STp
->buffer
->cmdstat
;
905 max_wait
= do_wait
? ST_BLOCK_SECONDS
: 0;
907 for (attentions
=waits
=0; ; ) {
908 memset((void *) &cmd
[0], 0, MAX_COMMAND_SIZE
);
909 cmd
[0] = TEST_UNIT_READY
;
910 SRpnt
= st_do_scsi(SRpnt
, STp
, cmd
, 0, DMA_NONE
,
911 STp
->long_timeout
, MAX_READY_RETRIES
, 1);
914 retval
= (STp
->buffer
)->syscall_result
;
918 if (cmdstatp
->have_sense
) {
920 scode
= cmdstatp
->sense_hdr
.sense_key
;
922 if (scode
== UNIT_ATTENTION
) { /* New media? */
924 if (attentions
< MAX_ATTENTIONS
) {
934 if (scode
== NOT_READY
) {
935 if (waits
< max_wait
) {
936 if (msleep_interruptible(1000)) {
944 if ((STp
->device
)->scsi_level
>= SCSI_2
&&
945 cmdstatp
->sense_hdr
.asc
== 0x3a) /* Check ASC */
946 retval
= CHKRES_NO_TAPE
;
948 retval
= CHKRES_NOT_READY
;
954 retval
= (STp
->buffer
)->syscall_result
;
956 retval
= new_session
? CHKRES_NEW_SESSION
: CHKRES_READY
;
961 st_release_request(SRpnt
);
966 /* See if the drive is ready and gather information about the tape. Return values:
967 < 0 negative error code from errno.h
969 1 drive not ready (possibly no tape)
971 static int check_tape(struct scsi_tape
*STp
, struct file
*filp
)
973 int i
, retval
, new_session
= 0, do_wait
;
974 unsigned char cmd
[MAX_COMMAND_SIZE
], saved_cleaning
;
975 unsigned short st_flags
= filp
->f_flags
;
976 struct st_request
*SRpnt
= NULL
;
977 struct st_modedef
*STm
;
978 struct st_partstat
*STps
;
979 char *name
= tape_name(STp
);
980 struct inode
*inode
= file_inode(filp
);
981 int mode
= TAPE_MODE(inode
);
983 STp
->ready
= ST_READY
;
985 if (mode
!= STp
->current_mode
) {
986 DEBC(printk(ST_DEB_MSG
"%s: Mode change from %d to %d.\n",
987 name
, STp
->current_mode
, mode
));
989 STp
->current_mode
= mode
;
991 STm
= &(STp
->modes
[STp
->current_mode
]);
993 saved_cleaning
= STp
->cleaning_req
;
994 STp
->cleaning_req
= 0;
996 do_wait
= ((filp
->f_flags
& O_NONBLOCK
) == 0);
997 retval
= test_ready(STp
, do_wait
);
1002 if (retval
== CHKRES_NEW_SESSION
) {
1003 STp
->pos_unknown
= 0;
1004 STp
->partition
= STp
->new_partition
= 0;
1005 if (STp
->can_partitions
)
1006 STp
->nbr_partitions
= 1; /* This guess will be updated later
1008 for (i
= 0; i
< ST_NBR_PARTITIONS
; i
++) {
1009 STps
= &(STp
->ps
[i
]);
1011 STps
->eof
= ST_NOEOF
;
1013 STps
->last_block_valid
= 0;
1014 STps
->drv_block
= 0;
1020 STp
->cleaning_req
|= saved_cleaning
;
1022 if (retval
== CHKRES_NOT_READY
|| retval
== CHKRES_NO_TAPE
) {
1023 if (retval
== CHKRES_NO_TAPE
)
1024 STp
->ready
= ST_NO_TAPE
;
1026 STp
->ready
= ST_NOT_READY
;
1028 STp
->density
= 0; /* Clear the erroneous "residue" */
1029 STp
->write_prot
= 0;
1030 STp
->block_size
= 0;
1031 STp
->ps
[0].drv_file
= STp
->ps
[0].drv_block
= (-1);
1032 STp
->partition
= STp
->new_partition
= 0;
1033 STp
->door_locked
= ST_UNLOCKED
;
1034 return CHKRES_NOT_READY
;
1038 if (STp
->omit_blklims
)
1039 STp
->min_block
= STp
->max_block
= (-1);
1041 memset((void *) &cmd
[0], 0, MAX_COMMAND_SIZE
);
1042 cmd
[0] = READ_BLOCK_LIMITS
;
1044 SRpnt
= st_do_scsi(SRpnt
, STp
, cmd
, 6, DMA_FROM_DEVICE
,
1045 STp
->device
->request_queue
->rq_timeout
,
1046 MAX_READY_RETRIES
, 1);
1048 retval
= (STp
->buffer
)->syscall_result
;
1052 if (!SRpnt
->result
&& !STp
->buffer
->cmdstat
.have_sense
) {
1053 STp
->max_block
= ((STp
->buffer
)->b_data
[1] << 16) |
1054 ((STp
->buffer
)->b_data
[2] << 8) | (STp
->buffer
)->b_data
[3];
1055 STp
->min_block
= ((STp
->buffer
)->b_data
[4] << 8) |
1056 (STp
->buffer
)->b_data
[5];
1057 if ( DEB( debugging
|| ) !STp
->inited
)
1059 "%s: Block limits %d - %d bytes.\n", name
,
1060 STp
->min_block
, STp
->max_block
);
1062 STp
->min_block
= STp
->max_block
= (-1);
1063 DEBC(printk(ST_DEB_MSG
"%s: Can't read block limits.\n",
1068 memset((void *) &cmd
[0], 0, MAX_COMMAND_SIZE
);
1069 cmd
[0] = MODE_SENSE
;
1072 SRpnt
= st_do_scsi(SRpnt
, STp
, cmd
, 12, DMA_FROM_DEVICE
,
1073 STp
->device
->request_queue
->rq_timeout
,
1074 MAX_READY_RETRIES
, 1);
1076 retval
= (STp
->buffer
)->syscall_result
;
1080 if ((STp
->buffer
)->syscall_result
!= 0) {
1081 DEBC(printk(ST_DEB_MSG
"%s: No Mode Sense.\n", name
));
1082 STp
->block_size
= ST_DEFAULT_BLOCK
; /* Educated guess (?) */
1083 (STp
->buffer
)->syscall_result
= 0; /* Prevent error propagation */
1084 STp
->drv_write_prot
= 0;
1086 DEBC(printk(ST_DEB_MSG
1087 "%s: Mode sense. Length %d, medium %x, WBS %x, BLL %d\n",
1089 (STp
->buffer
)->b_data
[0], (STp
->buffer
)->b_data
[1],
1090 (STp
->buffer
)->b_data
[2], (STp
->buffer
)->b_data
[3]));
1092 if ((STp
->buffer
)->b_data
[3] >= 8) {
1093 STp
->drv_buffer
= ((STp
->buffer
)->b_data
[2] >> 4) & 7;
1094 STp
->density
= (STp
->buffer
)->b_data
[4];
1095 STp
->block_size
= (STp
->buffer
)->b_data
[9] * 65536 +
1096 (STp
->buffer
)->b_data
[10] * 256 + (STp
->buffer
)->b_data
[11];
1097 DEBC(printk(ST_DEB_MSG
1098 "%s: Density %x, tape length: %x, drv buffer: %d\n",
1099 name
, STp
->density
, (STp
->buffer
)->b_data
[5] * 65536 +
1100 (STp
->buffer
)->b_data
[6] * 256 + (STp
->buffer
)->b_data
[7],
1103 STp
->drv_write_prot
= ((STp
->buffer
)->b_data
[2] & 0x80) != 0;
1104 if (!STp
->drv_buffer
&& STp
->immediate_filemark
) {
1106 "%s: non-buffered tape: disabling writing immediate filemarks\n",
1108 STp
->immediate_filemark
= 0;
1111 st_release_request(SRpnt
);
1115 if (STp
->block_size
> 0)
1116 (STp
->buffer
)->buffer_blocks
=
1117 (STp
->buffer
)->buffer_size
/ STp
->block_size
;
1119 (STp
->buffer
)->buffer_blocks
= 1;
1120 (STp
->buffer
)->buffer_bytes
= (STp
->buffer
)->read_pointer
= 0;
1122 DEBC(printk(ST_DEB_MSG
1123 "%s: Block size: %d, buffer size: %d (%d blocks).\n", name
,
1124 STp
->block_size
, (STp
->buffer
)->buffer_size
,
1125 (STp
->buffer
)->buffer_blocks
));
1127 if (STp
->drv_write_prot
) {
1128 STp
->write_prot
= 1;
1130 DEBC(printk(ST_DEB_MSG
"%s: Write protected\n", name
));
1133 ((st_flags
& O_ACCMODE
) == O_WRONLY
||
1134 (st_flags
& O_ACCMODE
) == O_RDWR
)) {
1140 if (STp
->can_partitions
&& STp
->nbr_partitions
< 1) {
1141 /* This code is reached when the device is opened for the first time
1142 after the driver has been initialized with tape in the drive and the
1143 partition support has been enabled. */
1144 DEBC(printk(ST_DEB_MSG
1145 "%s: Updating partition number in status.\n", name
));
1146 if ((STp
->partition
= find_partition(STp
)) < 0) {
1147 retval
= STp
->partition
;
1150 STp
->new_partition
= STp
->partition
;
1151 STp
->nbr_partitions
= 1; /* This guess will be updated when necessary */
1154 if (new_session
) { /* Change the drive parameters for the new mode */
1155 STp
->density_changed
= STp
->blksize_changed
= 0;
1156 STp
->compression_changed
= 0;
1157 if (!(STm
->defaults_for_writes
) &&
1158 (retval
= set_mode_densblk(STp
, STm
)) < 0)
1161 if (STp
->default_drvbuffer
!= 0xff) {
1162 if (st_int_ioctl(STp
, MTSETDRVBUFFER
, STp
->default_drvbuffer
))
1164 "%s: Can't set default drive buffering to %d.\n",
1165 name
, STp
->default_drvbuffer
);
1169 return CHKRES_READY
;
1176 \f/* Open the device. Needs to take the BKL only because of incrementing the SCSI host
1178 static int st_open(struct inode
*inode
, struct file
*filp
)
1180 int i
, retval
= (-EIO
);
1182 struct scsi_tape
*STp
;
1183 struct st_partstat
*STps
;
1184 int dev
= TAPE_NR(inode
);
1188 * We really want to do nonseekable_open(inode, filp); here, but some
1189 * versions of tar incorrectly call lseek on tapes and bail out if that
1190 * fails. So we disallow pread() and pwrite(), but permit lseeks.
1192 filp
->f_mode
&= ~(FMODE_PREAD
| FMODE_PWRITE
);
1194 if (!(STp
= scsi_tape_get(dev
))) {
1198 filp
->private_data
= STp
;
1199 name
= tape_name(STp
);
1201 spin_lock(&st_use_lock
);
1203 spin_unlock(&st_use_lock
);
1205 DEB( printk(ST_DEB_MSG
"%s: Device already in use.\n", name
); )
1210 spin_unlock(&st_use_lock
);
1211 STp
->rew_at_close
= STp
->autorew_dev
= (iminor(inode
) & 0x80) == 0;
1213 if (scsi_autopm_get_device(STp
->device
) < 0) {
1218 if (!scsi_block_when_processing_errors(STp
->device
)) {
1223 /* See that we have at least a one page buffer available */
1224 if (!enlarge_buffer(STp
->buffer
, PAGE_SIZE
, STp
->restr_dma
)) {
1225 printk(KERN_WARNING
"%s: Can't allocate one page tape buffer.\n",
1227 retval
= (-EOVERFLOW
);
1231 (STp
->buffer
)->cleared
= 0;
1232 (STp
->buffer
)->writing
= 0;
1233 (STp
->buffer
)->syscall_result
= 0;
1235 STp
->write_prot
= ((filp
->f_flags
& O_ACCMODE
) == O_RDONLY
);
1238 for (i
= 0; i
< ST_NBR_PARTITIONS
; i
++) {
1239 STps
= &(STp
->ps
[i
]);
1242 STp
->try_dio_now
= STp
->try_dio
;
1243 STp
->recover_count
= 0;
1244 DEB( STp
->nbr_waits
= STp
->nbr_finished
= 0;
1245 STp
->nbr_requests
= STp
->nbr_dio
= STp
->nbr_pages
= 0; )
1247 retval
= check_tape(STp
, filp
);
1250 if ((filp
->f_flags
& O_NONBLOCK
) == 0 &&
1251 retval
!= CHKRES_READY
) {
1252 if (STp
->ready
== NO_TAPE
)
1253 retval
= (-ENOMEDIUM
);
1261 normalize_buffer(STp
->buffer
);
1262 spin_lock(&st_use_lock
);
1264 spin_unlock(&st_use_lock
);
1267 scsi_autopm_put_device(STp
->device
);
1273 /* Flush the tape buffer before close */
1274 static int st_flush(struct file
*filp
, fl_owner_t id
)
1276 int result
= 0, result2
;
1277 unsigned char cmd
[MAX_COMMAND_SIZE
];
1278 struct st_request
*SRpnt
;
1279 struct scsi_tape
*STp
= filp
->private_data
;
1280 struct st_modedef
*STm
= &(STp
->modes
[STp
->current_mode
]);
1281 struct st_partstat
*STps
= &(STp
->ps
[STp
->partition
]);
1282 char *name
= tape_name(STp
);
1284 if (file_count(filp
) > 1)
1287 if (STps
->rw
== ST_WRITING
&& !STp
->pos_unknown
) {
1288 result
= st_flush_write_buffer(STp
);
1289 if (result
!= 0 && result
!= (-ENOSPC
))
1293 if (STp
->can_partitions
&&
1294 (result2
= switch_partition(STp
)) < 0) {
1295 DEBC(printk(ST_DEB_MSG
1296 "%s: switch_partition at close failed.\n", name
));
1302 DEBC( if (STp
->nbr_requests
)
1303 printk(KERN_DEBUG
"%s: Number of r/w requests %d, dio used in %d, pages %d.\n",
1304 name
, STp
->nbr_requests
, STp
->nbr_dio
, STp
->nbr_pages
));
1306 if (STps
->rw
== ST_WRITING
&& !STp
->pos_unknown
) {
1307 struct st_cmdstatus
*cmdstatp
= &STp
->buffer
->cmdstat
;
1309 DEBC(printk(ST_DEB_MSG
"%s: Async write waits %d, finished %d.\n",
1310 name
, STp
->nbr_waits
, STp
->nbr_finished
);
1313 memset(cmd
, 0, MAX_COMMAND_SIZE
);
1314 cmd
[0] = WRITE_FILEMARKS
;
1315 if (STp
->immediate_filemark
)
1317 cmd
[4] = 1 + STp
->two_fm
;
1319 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, 0, DMA_NONE
,
1320 STp
->device
->request_queue
->rq_timeout
,
1321 MAX_WRITE_RETRIES
, 1);
1323 result
= (STp
->buffer
)->syscall_result
;
1327 if (STp
->buffer
->syscall_result
== 0 ||
1328 (cmdstatp
->have_sense
&& !cmdstatp
->deferred
&&
1329 (cmdstatp
->flags
& SENSE_EOM
) &&
1330 (cmdstatp
->sense_hdr
.sense_key
== NO_SENSE
||
1331 cmdstatp
->sense_hdr
.sense_key
== RECOVERED_ERROR
) &&
1332 (!cmdstatp
->remainder_valid
|| cmdstatp
->uremainder64
== 0))) {
1333 /* Write successful at EOM */
1334 st_release_request(SRpnt
);
1336 if (STps
->drv_file
>= 0)
1338 STps
->drv_block
= 0;
1343 else { /* Write error */
1344 st_release_request(SRpnt
);
1346 printk(KERN_ERR
"%s: Error on write filemark.\n", name
);
1351 DEBC(printk(ST_DEB_MSG
"%s: Buffer flushed, %d EOF(s) written\n",
1353 } else if (!STp
->rew_at_close
) {
1354 STps
= &(STp
->ps
[STp
->partition
]);
1355 if (!STm
->sysv
|| STps
->rw
!= ST_READING
) {
1357 result
= flush_buffer(STp
, 0);
1358 else if (STps
->eof
== ST_FM_HIT
) {
1359 result
= cross_eof(STp
, 0);
1361 if (STps
->drv_file
>= 0)
1363 STps
->drv_block
= 0;
1366 STps
->eof
= ST_NOEOF
;
1368 } else if ((STps
->eof
== ST_NOEOF
&&
1369 !(result
= cross_eof(STp
, 1))) ||
1370 STps
->eof
== ST_FM_HIT
) {
1371 if (STps
->drv_file
>= 0)
1373 STps
->drv_block
= 0;
1379 if (STp
->rew_at_close
) {
1380 result2
= st_int_ioctl(STp
, MTREW
, 1);
1388 /* Close the device and release it. BKL is not needed: this is the only thread
1389 accessing this tape. */
1390 static int st_release(struct inode
*inode
, struct file
*filp
)
1393 struct scsi_tape
*STp
= filp
->private_data
;
1395 if (STp
->door_locked
== ST_LOCKED_AUTO
)
1396 do_door_lock(STp
, 0);
1398 normalize_buffer(STp
->buffer
);
1399 spin_lock(&st_use_lock
);
1401 spin_unlock(&st_use_lock
);
1402 scsi_autopm_put_device(STp
->device
);
1408 /* The checks common to both reading and writing */
1409 static ssize_t
rw_checks(struct scsi_tape
*STp
, struct file
*filp
, size_t count
)
1414 * If we are in the middle of error recovery, don't let anyone
1415 * else try and use this device. Also, if error recovery fails, it
1416 * may try and take the device offline, in which case all further
1417 * access to the device is prohibited.
1419 if (!scsi_block_when_processing_errors(STp
->device
)) {
1424 if (STp
->ready
!= ST_READY
) {
1425 if (STp
->ready
== ST_NO_TAPE
)
1426 retval
= (-ENOMEDIUM
);
1432 if (! STp
->modes
[STp
->current_mode
].defined
) {
1439 * If there was a bus reset, block further access
1442 if (STp
->pos_unknown
) {
1452 printk(ST_DEB_MSG
"%s: Incorrect device.\n", tape_name(STp
));
1457 if (STp
->can_partitions
&&
1458 (retval
= switch_partition(STp
)) < 0)
1461 if (STp
->block_size
== 0 && STp
->max_block
> 0 &&
1462 (count
< STp
->min_block
|| count
> STp
->max_block
)) {
1467 if (STp
->do_auto_lock
&& STp
->door_locked
== ST_UNLOCKED
&&
1468 !do_door_lock(STp
, 1))
1469 STp
->door_locked
= ST_LOCKED_AUTO
;
1476 static int setup_buffering(struct scsi_tape
*STp
, const char __user
*buf
,
1477 size_t count
, int is_read
)
1479 int i
, bufsize
, retval
= 0;
1480 struct st_buffer
*STbp
= STp
->buffer
;
1483 i
= STp
->try_dio_now
&& try_rdio
;
1485 i
= STp
->try_dio_now
&& try_wdio
;
1487 if (i
&& ((unsigned long)buf
& queue_dma_alignment(
1488 STp
->device
->request_queue
)) == 0) {
1489 i
= sgl_map_user_pages(STbp
, STbp
->use_sg
, (unsigned long)buf
,
1490 count
, (is_read
? READ
: WRITE
));
1493 STbp
->buffer_bytes
= 0; /* can be used as transfer counter */
1496 STbp
->do_dio
= 0; /* fall back to buffering with any error */
1497 STbp
->sg_segs
= STbp
->do_dio
;
1501 STp
->nbr_pages
+= STbp
->do_dio
;
1506 DEB( STp
->nbr_requests
++; )
1508 if (!STbp
->do_dio
) {
1509 if (STp
->block_size
)
1510 bufsize
= STp
->block_size
> st_fixed_buffer_size
?
1511 STp
->block_size
: st_fixed_buffer_size
;
1514 /* Make sure that data from previous user is not leaked even if
1515 HBA does not return correct residual */
1516 if (is_read
&& STp
->sili
&& !STbp
->cleared
)
1520 if (bufsize
> STbp
->buffer_size
&&
1521 !enlarge_buffer(STbp
, bufsize
, STp
->restr_dma
)) {
1522 printk(KERN_WARNING
"%s: Can't allocate %d byte tape buffer.\n",
1523 tape_name(STp
), bufsize
);
1524 retval
= (-EOVERFLOW
);
1527 if (STp
->block_size
)
1528 STbp
->buffer_blocks
= bufsize
/ STp
->block_size
;
1536 /* Can be called more than once after each setup_buffer() */
1537 static void release_buffering(struct scsi_tape
*STp
, int is_read
)
1539 struct st_buffer
*STbp
;
1543 sgl_unmap_user_pages(STbp
, STbp
->do_dio
, is_read
);
1552 st_write(struct file
*filp
, const char __user
*buf
, size_t count
, loff_t
* ppos
)
1555 ssize_t i
, do_count
, blks
, transfer
;
1557 int undone
, retry_eot
= 0, scode
;
1559 unsigned char cmd
[MAX_COMMAND_SIZE
];
1560 const char __user
*b_point
;
1561 struct st_request
*SRpnt
= NULL
;
1562 struct scsi_tape
*STp
= filp
->private_data
;
1563 struct st_modedef
*STm
;
1564 struct st_partstat
*STps
;
1565 struct st_buffer
*STbp
;
1566 char *name
= tape_name(STp
);
1568 if (mutex_lock_interruptible(&STp
->lock
))
1569 return -ERESTARTSYS
;
1571 retval
= rw_checks(STp
, filp
, count
);
1572 if (retval
|| count
== 0)
1575 /* Write must be integral number of blocks */
1576 if (STp
->block_size
!= 0 && (count
% STp
->block_size
) != 0) {
1577 printk(KERN_WARNING
"%s: Write not multiple of tape block size.\n",
1583 STm
= &(STp
->modes
[STp
->current_mode
]);
1584 STps
= &(STp
->ps
[STp
->partition
]);
1586 if (STp
->write_prot
) {
1592 if (STps
->rw
== ST_READING
) {
1593 retval
= flush_buffer(STp
, 0);
1596 STps
->rw
= ST_WRITING
;
1597 } else if (STps
->rw
!= ST_WRITING
&&
1598 STps
->drv_file
== 0 && STps
->drv_block
== 0) {
1599 if ((retval
= set_mode_densblk(STp
, STm
)) < 0)
1601 if (STm
->default_compression
!= ST_DONT_TOUCH
&&
1602 !(STp
->compression_changed
)) {
1603 if (st_compression(STp
, (STm
->default_compression
== ST_YES
))) {
1604 printk(KERN_WARNING
"%s: Can't set default compression.\n",
1606 if (modes_defined
) {
1615 i
= write_behind_check(STp
);
1618 STps
->eof
= ST_EOM_OK
;
1620 STps
->eof
= ST_EOM_ERROR
;
1623 if (STps
->eof
== ST_EOM_OK
) {
1624 STps
->eof
= ST_EOD_1
; /* allow next write */
1628 else if (STps
->eof
== ST_EOM_ERROR
) {
1633 /* Check the buffer readability in cases where copy_user might catch
1634 the problems after some tape movement. */
1635 if (STp
->block_size
!= 0 &&
1637 (copy_from_user(&i
, buf
, 1) != 0 ||
1638 copy_from_user(&i
, buf
+ count
- 1, 1) != 0)) {
1643 retval
= setup_buffering(STp
, buf
, count
, 0);
1649 memset(cmd
, 0, MAX_COMMAND_SIZE
);
1651 cmd
[1] = (STp
->block_size
!= 0);
1653 STps
->rw
= ST_WRITING
;
1656 while (count
> 0 && !retry_eot
) {
1662 if (STp
->block_size
== 0)
1665 do_count
= STbp
->buffer_blocks
* STp
->block_size
-
1667 if (do_count
> count
)
1671 i
= append_to_buffer(b_point
, STbp
, do_count
);
1678 b_point
+= do_count
;
1680 async_write
= STp
->block_size
== 0 && !STbp
->do_dio
&&
1681 STm
->do_async_writes
&& STps
->eof
< ST_EOM_OK
;
1683 if (STp
->block_size
!= 0 && STm
->do_buffer_writes
&&
1684 !(STp
->try_dio_now
&& try_wdio
) && STps
->eof
< ST_EOM_OK
&&
1685 STbp
->buffer_bytes
< STbp
->buffer_size
) {
1687 /* Don't write a buffer that is not full enough. */
1688 if (!async_write
&& count
== 0)
1693 if (STp
->block_size
== 0)
1694 blks
= transfer
= do_count
;
1697 blks
= STbp
->buffer_bytes
;
1700 blks
/= STp
->block_size
;
1701 transfer
= blks
* STp
->block_size
;
1703 cmd
[2] = blks
>> 16;
1707 SRpnt
= st_do_scsi(SRpnt
, STp
, cmd
, transfer
, DMA_TO_DEVICE
,
1708 STp
->device
->request_queue
->rq_timeout
,
1709 MAX_WRITE_RETRIES
, !async_write
);
1711 retval
= STbp
->syscall_result
;
1714 if (async_write
&& !STbp
->syscall_result
) {
1715 STbp
->writing
= transfer
;
1716 STp
->dirty
= !(STbp
->writing
==
1717 STbp
->buffer_bytes
);
1718 SRpnt
= NULL
; /* Prevent releasing this request! */
1719 DEB( STp
->write_pending
= 1; )
1723 if (STbp
->syscall_result
!= 0) {
1724 struct st_cmdstatus
*cmdstatp
= &STp
->buffer
->cmdstat
;
1726 DEBC(printk(ST_DEB_MSG
"%s: Error on write:\n", name
));
1727 if (cmdstatp
->have_sense
&& (cmdstatp
->flags
& SENSE_EOM
)) {
1728 scode
= cmdstatp
->sense_hdr
.sense_key
;
1729 if (cmdstatp
->remainder_valid
)
1730 undone
= (int)cmdstatp
->uremainder64
;
1731 else if (STp
->block_size
== 0 &&
1732 scode
== VOLUME_OVERFLOW
)
1736 if (STp
->block_size
!= 0)
1737 undone
*= STp
->block_size
;
1738 if (undone
<= do_count
) {
1739 /* Only data from this write is not written */
1743 if (STp
->block_size
)
1744 blks
= (transfer
- undone
) / STp
->block_size
;
1745 STps
->eof
= ST_EOM_OK
;
1746 /* Continue in fixed block mode if all written
1747 in this request but still something left to write
1748 (retval left to zero)
1750 if (STp
->block_size
== 0 ||
1751 undone
> 0 || count
== 0)
1752 retval
= (-ENOSPC
); /* EOM within current request */
1753 DEBC(printk(ST_DEB_MSG
1754 "%s: EOM with %d bytes unwritten.\n",
1757 /* EOT within data buffered earlier (possible only
1758 in fixed block mode without direct i/o) */
1759 if (!retry_eot
&& !cmdstatp
->deferred
&&
1760 (scode
== NO_SENSE
|| scode
== RECOVERED_ERROR
)) {
1761 move_buffer_data(STp
->buffer
, transfer
- undone
);
1763 if (STps
->drv_block
>= 0) {
1764 STps
->drv_block
+= (transfer
- undone
) /
1767 STps
->eof
= ST_EOM_OK
;
1768 DEBC(printk(ST_DEB_MSG
1769 "%s: Retry write of %d bytes at EOM.\n",
1770 name
, STp
->buffer
->buffer_bytes
));
1774 /* Either error within data buffered by driver or
1777 blks
= do_count
= 0;
1778 STps
->eof
= ST_EOM_ERROR
;
1779 STps
->drv_block
= (-1); /* Too cautious? */
1780 retval
= (-EIO
); /* EOM for old data */
1781 DEBC(printk(ST_DEB_MSG
1782 "%s: EOM with lost data.\n",
1788 STps
->drv_block
= (-1); /* Too cautious? */
1789 retval
= STbp
->syscall_result
;
1794 if (STps
->drv_block
>= 0) {
1795 if (STp
->block_size
== 0)
1796 STps
->drv_block
+= (do_count
> 0);
1798 STps
->drv_block
+= blks
;
1801 STbp
->buffer_bytes
= 0;
1804 if (retval
|| retry_eot
) {
1806 retval
= total
- count
;
1811 if (STps
->eof
== ST_EOD_1
)
1812 STps
->eof
= ST_EOM_OK
;
1813 else if (STps
->eof
!= ST_EOM_OK
)
1814 STps
->eof
= ST_NOEOF
;
1815 retval
= total
- count
;
1819 st_release_request(SRpnt
);
1820 release_buffering(STp
, 0);
1821 mutex_unlock(&STp
->lock
);
1826 /* Read data from the tape. Returns zero in the normal case, one if the
1827 eof status has changed, and the negative error code in case of a
1828 fatal error. Otherwise updates the buffer and the eof state.
1830 Does release user buffer mapping if it is set.
1832 static long read_tape(struct scsi_tape
*STp
, long count
,
1833 struct st_request
** aSRpnt
)
1835 int transfer
, blks
, bytes
;
1836 unsigned char cmd
[MAX_COMMAND_SIZE
];
1837 struct st_request
*SRpnt
;
1838 struct st_modedef
*STm
;
1839 struct st_partstat
*STps
;
1840 struct st_buffer
*STbp
;
1842 char *name
= tape_name(STp
);
1847 STm
= &(STp
->modes
[STp
->current_mode
]);
1848 STps
= &(STp
->ps
[STp
->partition
]);
1849 if (STps
->eof
== ST_FM_HIT
)
1853 if (STp
->block_size
== 0)
1854 blks
= bytes
= count
;
1856 if (!(STp
->try_dio_now
&& try_rdio
) && STm
->do_read_ahead
) {
1857 blks
= (STp
->buffer
)->buffer_blocks
;
1858 bytes
= blks
* STp
->block_size
;
1861 if (!STbp
->do_dio
&& bytes
> (STp
->buffer
)->buffer_size
)
1862 bytes
= (STp
->buffer
)->buffer_size
;
1863 blks
= bytes
/ STp
->block_size
;
1864 bytes
= blks
* STp
->block_size
;
1868 memset(cmd
, 0, MAX_COMMAND_SIZE
);
1870 cmd
[1] = (STp
->block_size
!= 0);
1871 if (!cmd
[1] && STp
->sili
)
1873 cmd
[2] = blks
>> 16;
1878 SRpnt
= st_do_scsi(SRpnt
, STp
, cmd
, bytes
, DMA_FROM_DEVICE
,
1879 STp
->device
->request_queue
->rq_timeout
,
1881 release_buffering(STp
, 1);
1884 return STbp
->syscall_result
;
1886 STbp
->read_pointer
= 0;
1889 /* Something to check */
1890 if (STbp
->syscall_result
) {
1891 struct st_cmdstatus
*cmdstatp
= &STp
->buffer
->cmdstat
;
1894 DEBC(printk(ST_DEB_MSG
"%s: Sense: %2x %2x %2x %2x %2x %2x %2x %2x\n",
1896 SRpnt
->sense
[0], SRpnt
->sense
[1],
1897 SRpnt
->sense
[2], SRpnt
->sense
[3],
1898 SRpnt
->sense
[4], SRpnt
->sense
[5],
1899 SRpnt
->sense
[6], SRpnt
->sense
[7]));
1900 if (cmdstatp
->have_sense
) {
1902 if (cmdstatp
->sense_hdr
.sense_key
== BLANK_CHECK
)
1903 cmdstatp
->flags
&= 0xcf; /* No need for EOM in this case */
1905 if (cmdstatp
->flags
!= 0) { /* EOF, EOM, or ILI */
1906 /* Compute the residual count */
1907 if (cmdstatp
->remainder_valid
)
1908 transfer
= (int)cmdstatp
->uremainder64
;
1911 if (STp
->block_size
== 0 &&
1912 cmdstatp
->sense_hdr
.sense_key
== MEDIUM_ERROR
)
1915 if (cmdstatp
->flags
& SENSE_ILI
) { /* ILI */
1916 if (STp
->block_size
== 0) {
1917 if (transfer
<= 0) {
1920 "%s: Failed to read %d byte block with %d byte transfer.\n",
1921 name
, bytes
- transfer
, bytes
);
1922 if (STps
->drv_block
>= 0)
1923 STps
->drv_block
+= 1;
1924 STbp
->buffer_bytes
= 0;
1927 STbp
->buffer_bytes
= bytes
- transfer
;
1929 st_release_request(SRpnt
);
1930 SRpnt
= *aSRpnt
= NULL
;
1931 if (transfer
== blks
) { /* We did not get anything, error */
1932 printk(KERN_NOTICE
"%s: Incorrect block size.\n", name
);
1933 if (STps
->drv_block
>= 0)
1934 STps
->drv_block
+= blks
- transfer
+ 1;
1935 st_int_ioctl(STp
, MTBSR
, 1);
1938 /* We have some data, deliver it */
1939 STbp
->buffer_bytes
= (blks
- transfer
) *
1941 DEBC(printk(ST_DEB_MSG
1942 "%s: ILI but enough data received %ld %d.\n",
1943 name
, count
, STbp
->buffer_bytes
));
1944 if (STps
->drv_block
>= 0)
1945 STps
->drv_block
+= 1;
1946 if (st_int_ioctl(STp
, MTBSR
, 1))
1949 } else if (cmdstatp
->flags
& SENSE_FMK
) { /* FM overrides EOM */
1950 if (STps
->eof
!= ST_FM_HIT
)
1951 STps
->eof
= ST_FM_HIT
;
1953 STps
->eof
= ST_EOD_2
;
1954 if (STp
->block_size
== 0)
1955 STbp
->buffer_bytes
= 0;
1957 STbp
->buffer_bytes
=
1958 bytes
- transfer
* STp
->block_size
;
1959 DEBC(printk(ST_DEB_MSG
1960 "%s: EOF detected (%d bytes read).\n",
1961 name
, STbp
->buffer_bytes
));
1962 } else if (cmdstatp
->flags
& SENSE_EOM
) {
1963 if (STps
->eof
== ST_FM
)
1964 STps
->eof
= ST_EOD_1
;
1966 STps
->eof
= ST_EOM_OK
;
1967 if (STp
->block_size
== 0)
1968 STbp
->buffer_bytes
= bytes
- transfer
;
1970 STbp
->buffer_bytes
=
1971 bytes
- transfer
* STp
->block_size
;
1973 DEBC(printk(ST_DEB_MSG
"%s: EOM detected (%d bytes read).\n",
1974 name
, STbp
->buffer_bytes
));
1977 /* end of EOF, EOM, ILI test */
1978 else { /* nonzero sense key */
1979 DEBC(printk(ST_DEB_MSG
1980 "%s: Tape error while reading.\n", name
));
1981 STps
->drv_block
= (-1);
1982 if (STps
->eof
== ST_FM
&&
1983 cmdstatp
->sense_hdr
.sense_key
== BLANK_CHECK
) {
1984 DEBC(printk(ST_DEB_MSG
1985 "%s: Zero returned for first BLANK CHECK after EOF.\n",
1987 STps
->eof
= ST_EOD_2
; /* First BLANK_CHECK after FM */
1988 } else /* Some other extended sense code */
1992 if (STbp
->buffer_bytes
< 0) /* Caused by bogus sense data */
1993 STbp
->buffer_bytes
= 0;
1995 /* End of extended sense test */
1996 else { /* Non-extended sense */
1997 retval
= STbp
->syscall_result
;
2001 /* End of error handling */
2002 else { /* Read successful */
2003 STbp
->buffer_bytes
= bytes
;
2004 if (STp
->sili
) /* In fixed block mode residual is always zero here */
2005 STbp
->buffer_bytes
-= STp
->buffer
->cmdstat
.residual
;
2008 if (STps
->drv_block
>= 0) {
2009 if (STp
->block_size
== 0)
2012 STps
->drv_block
+= STbp
->buffer_bytes
/ STp
->block_size
;
2020 st_read(struct file
*filp
, char __user
*buf
, size_t count
, loff_t
* ppos
)
2024 ssize_t i
, transfer
;
2025 int special
, do_dio
= 0;
2026 struct st_request
*SRpnt
= NULL
;
2027 struct scsi_tape
*STp
= filp
->private_data
;
2028 struct st_modedef
*STm
;
2029 struct st_partstat
*STps
;
2030 struct st_buffer
*STbp
= STp
->buffer
;
2031 DEB( char *name
= tape_name(STp
); )
2033 if (mutex_lock_interruptible(&STp
->lock
))
2034 return -ERESTARTSYS
;
2036 retval
= rw_checks(STp
, filp
, count
);
2037 if (retval
|| count
== 0)
2040 STm
= &(STp
->modes
[STp
->current_mode
]);
2041 if (STp
->block_size
!= 0 && (count
% STp
->block_size
) != 0) {
2042 if (!STm
->do_read_ahead
) {
2043 retval
= (-EINVAL
); /* Read must be integral number of blocks */
2046 STp
->try_dio_now
= 0; /* Direct i/o can't handle split blocks */
2049 STps
= &(STp
->ps
[STp
->partition
]);
2050 if (STps
->rw
== ST_WRITING
) {
2051 retval
= flush_buffer(STp
, 0);
2054 STps
->rw
= ST_READING
;
2057 if (debugging
&& STps
->eof
!= ST_NOEOF
)
2058 printk(ST_DEB_MSG
"%s: EOF/EOM flag up (%d). Bytes %d\n", name
,
2059 STps
->eof
, STbp
->buffer_bytes
);
2062 retval
= setup_buffering(STp
, buf
, count
, 1);
2065 do_dio
= STbp
->do_dio
;
2067 if (STbp
->buffer_bytes
== 0 &&
2068 STps
->eof
>= ST_EOD_1
) {
2069 if (STps
->eof
< ST_EOD
) {
2074 retval
= (-EIO
); /* EOM or Blank Check */
2079 /* Check the buffer writability before any tape movement. Don't alter
2081 if (copy_from_user(&i
, buf
, 1) != 0 ||
2082 copy_to_user(buf
, &i
, 1) != 0 ||
2083 copy_from_user(&i
, buf
+ count
- 1, 1) != 0 ||
2084 copy_to_user(buf
+ count
- 1, &i
, 1) != 0) {
2090 STps
->rw
= ST_READING
;
2093 /* Loop until enough data in buffer or a special condition found */
2094 for (total
= 0, special
= 0; total
< count
&& !special
;) {
2096 /* Get new data if the buffer is empty */
2097 if (STbp
->buffer_bytes
== 0) {
2098 special
= read_tape(STp
, count
- total
, &SRpnt
);
2099 if (special
< 0) { /* No need to continue read */
2105 /* Move the data from driver buffer to user buffer */
2106 if (STbp
->buffer_bytes
> 0) {
2108 if (debugging
&& STps
->eof
!= ST_NOEOF
)
2110 "%s: EOF up (%d). Left %d, needed %d.\n", name
,
2111 STps
->eof
, STbp
->buffer_bytes
,
2112 (int)(count
- total
));
2114 transfer
= STbp
->buffer_bytes
< count
- total
?
2115 STbp
->buffer_bytes
: count
- total
;
2117 i
= from_buffer(STbp
, buf
, transfer
);
2127 if (STp
->block_size
== 0)
2128 break; /* Read only one variable length block */
2130 } /* for (total = 0, special = 0;
2131 total < count && !special; ) */
2133 /* Change the eof state if no data from tape or buffer */
2135 if (STps
->eof
== ST_FM_HIT
) {
2137 STps
->drv_block
= 0;
2138 if (STps
->drv_file
>= 0)
2140 } else if (STps
->eof
== ST_EOD_1
) {
2141 STps
->eof
= ST_EOD_2
;
2142 STps
->drv_block
= 0;
2143 if (STps
->drv_file
>= 0)
2145 } else if (STps
->eof
== ST_EOD_2
)
2147 } else if (STps
->eof
== ST_FM
)
2148 STps
->eof
= ST_NOEOF
;
2152 if (SRpnt
!= NULL
) {
2153 st_release_request(SRpnt
);
2157 release_buffering(STp
, 1);
2158 STbp
->buffer_bytes
= 0;
2160 mutex_unlock(&STp
->lock
);
2168 /* Set the driver options */
2169 static void st_log_options(struct scsi_tape
* STp
, struct st_modedef
* STm
, char *name
)
2173 "%s: Mode %d options: buffer writes: %d, async writes: %d, read ahead: %d\n",
2174 name
, STp
->current_mode
, STm
->do_buffer_writes
, STm
->do_async_writes
,
2175 STm
->do_read_ahead
);
2177 "%s: can bsr: %d, two FMs: %d, fast mteom: %d, auto lock: %d,\n",
2178 name
, STp
->can_bsr
, STp
->two_fm
, STp
->fast_mteom
, STp
->do_auto_lock
);
2180 "%s: defs for wr: %d, no block limits: %d, partitions: %d, s2 log: %d\n",
2181 name
, STm
->defaults_for_writes
, STp
->omit_blklims
, STp
->can_partitions
,
2182 STp
->scsi2_logical
);
2184 "%s: sysv: %d nowait: %d sili: %d nowait_filemark: %d\n",
2185 name
, STm
->sysv
, STp
->immediate
, STp
->sili
,
2186 STp
->immediate_filemark
);
2187 printk(KERN_INFO
"%s: debugging: %d\n",
2194 static int st_set_options(struct scsi_tape
*STp
, long options
)
2198 struct st_modedef
*STm
;
2199 char *name
= tape_name(STp
);
2200 struct cdev
*cd0
, *cd1
;
2201 struct device
*d0
, *d1
;
2203 STm
= &(STp
->modes
[STp
->current_mode
]);
2204 if (!STm
->defined
) {
2205 cd0
= STm
->cdevs
[0];
2206 cd1
= STm
->cdevs
[1];
2209 memcpy(STm
, &(STp
->modes
[0]), sizeof(struct st_modedef
));
2210 STm
->cdevs
[0] = cd0
;
2211 STm
->cdevs
[1] = cd1
;
2215 DEBC(printk(ST_DEB_MSG
2216 "%s: Initialized mode %d definition from mode 0\n",
2217 name
, STp
->current_mode
));
2220 code
= options
& MT_ST_OPTIONS
;
2221 if (code
== MT_ST_BOOLEANS
) {
2222 STm
->do_buffer_writes
= (options
& MT_ST_BUFFER_WRITES
) != 0;
2223 STm
->do_async_writes
= (options
& MT_ST_ASYNC_WRITES
) != 0;
2224 STm
->defaults_for_writes
= (options
& MT_ST_DEF_WRITES
) != 0;
2225 STm
->do_read_ahead
= (options
& MT_ST_READ_AHEAD
) != 0;
2226 STp
->two_fm
= (options
& MT_ST_TWO_FM
) != 0;
2227 STp
->fast_mteom
= (options
& MT_ST_FAST_MTEOM
) != 0;
2228 STp
->do_auto_lock
= (options
& MT_ST_AUTO_LOCK
) != 0;
2229 STp
->can_bsr
= (options
& MT_ST_CAN_BSR
) != 0;
2230 STp
->omit_blklims
= (options
& MT_ST_NO_BLKLIMS
) != 0;
2231 if ((STp
->device
)->scsi_level
>= SCSI_2
)
2232 STp
->can_partitions
= (options
& MT_ST_CAN_PARTITIONS
) != 0;
2233 STp
->scsi2_logical
= (options
& MT_ST_SCSI2LOGICAL
) != 0;
2234 STp
->immediate
= (options
& MT_ST_NOWAIT
) != 0;
2235 STp
->immediate_filemark
= (options
& MT_ST_NOWAIT_EOF
) != 0;
2236 STm
->sysv
= (options
& MT_ST_SYSV
) != 0;
2237 STp
->sili
= (options
& MT_ST_SILI
) != 0;
2238 DEB( debugging
= (options
& MT_ST_DEBUGGING
) != 0;
2239 st_log_options(STp
, STm
, name
); )
2240 } else if (code
== MT_ST_SETBOOLEANS
|| code
== MT_ST_CLEARBOOLEANS
) {
2241 value
= (code
== MT_ST_SETBOOLEANS
);
2242 if ((options
& MT_ST_BUFFER_WRITES
) != 0)
2243 STm
->do_buffer_writes
= value
;
2244 if ((options
& MT_ST_ASYNC_WRITES
) != 0)
2245 STm
->do_async_writes
= value
;
2246 if ((options
& MT_ST_DEF_WRITES
) != 0)
2247 STm
->defaults_for_writes
= value
;
2248 if ((options
& MT_ST_READ_AHEAD
) != 0)
2249 STm
->do_read_ahead
= value
;
2250 if ((options
& MT_ST_TWO_FM
) != 0)
2251 STp
->two_fm
= value
;
2252 if ((options
& MT_ST_FAST_MTEOM
) != 0)
2253 STp
->fast_mteom
= value
;
2254 if ((options
& MT_ST_AUTO_LOCK
) != 0)
2255 STp
->do_auto_lock
= value
;
2256 if ((options
& MT_ST_CAN_BSR
) != 0)
2257 STp
->can_bsr
= value
;
2258 if ((options
& MT_ST_NO_BLKLIMS
) != 0)
2259 STp
->omit_blklims
= value
;
2260 if ((STp
->device
)->scsi_level
>= SCSI_2
&&
2261 (options
& MT_ST_CAN_PARTITIONS
) != 0)
2262 STp
->can_partitions
= value
;
2263 if ((options
& MT_ST_SCSI2LOGICAL
) != 0)
2264 STp
->scsi2_logical
= value
;
2265 if ((options
& MT_ST_NOWAIT
) != 0)
2266 STp
->immediate
= value
;
2267 if ((options
& MT_ST_NOWAIT_EOF
) != 0)
2268 STp
->immediate_filemark
= value
;
2269 if ((options
& MT_ST_SYSV
) != 0)
2271 if ((options
& MT_ST_SILI
) != 0)
2274 if ((options
& MT_ST_DEBUGGING
) != 0)
2276 st_log_options(STp
, STm
, name
); )
2277 } else if (code
== MT_ST_WRITE_THRESHOLD
) {
2278 /* Retained for compatibility */
2279 } else if (code
== MT_ST_DEF_BLKSIZE
) {
2280 value
= (options
& ~MT_ST_OPTIONS
);
2281 if (value
== ~MT_ST_OPTIONS
) {
2282 STm
->default_blksize
= (-1);
2283 DEBC( printk(KERN_INFO
"%s: Default block size disabled.\n", name
));
2285 STm
->default_blksize
= value
;
2286 DEBC( printk(KERN_INFO
"%s: Default block size set to %d bytes.\n",
2287 name
, STm
->default_blksize
));
2288 if (STp
->ready
== ST_READY
) {
2289 STp
->blksize_changed
= 0;
2290 set_mode_densblk(STp
, STm
);
2293 } else if (code
== MT_ST_TIMEOUTS
) {
2294 value
= (options
& ~MT_ST_OPTIONS
);
2295 if ((value
& MT_ST_SET_LONG_TIMEOUT
) != 0) {
2296 STp
->long_timeout
= (value
& ~MT_ST_SET_LONG_TIMEOUT
) * HZ
;
2297 DEBC( printk(KERN_INFO
"%s: Long timeout set to %d seconds.\n", name
,
2298 (value
& ~MT_ST_SET_LONG_TIMEOUT
)));
2300 blk_queue_rq_timeout(STp
->device
->request_queue
,
2302 DEBC( printk(KERN_INFO
"%s: Normal timeout set to %d seconds.\n",
2305 } else if (code
== MT_ST_SET_CLN
) {
2306 value
= (options
& ~MT_ST_OPTIONS
) & 0xff;
2308 (value
< EXTENDED_SENSE_START
||
2309 value
>= SCSI_SENSE_BUFFERSIZE
))
2311 STp
->cln_mode
= value
;
2312 STp
->cln_sense_mask
= (options
>> 8) & 0xff;
2313 STp
->cln_sense_value
= (options
>> 16) & 0xff;
2315 "%s: Cleaning request mode %d, mask %02x, value %02x\n",
2316 name
, value
, STp
->cln_sense_mask
, STp
->cln_sense_value
);
2317 } else if (code
== MT_ST_DEF_OPTIONS
) {
2318 code
= (options
& ~MT_ST_CLEAR_DEFAULT
);
2319 value
= (options
& MT_ST_CLEAR_DEFAULT
);
2320 if (code
== MT_ST_DEF_DENSITY
) {
2321 if (value
== MT_ST_CLEAR_DEFAULT
) {
2322 STm
->default_density
= (-1);
2323 DEBC( printk(KERN_INFO
"%s: Density default disabled.\n",
2326 STm
->default_density
= value
& 0xff;
2327 DEBC( printk(KERN_INFO
"%s: Density default set to %x\n",
2328 name
, STm
->default_density
));
2329 if (STp
->ready
== ST_READY
) {
2330 STp
->density_changed
= 0;
2331 set_mode_densblk(STp
, STm
);
2334 } else if (code
== MT_ST_DEF_DRVBUFFER
) {
2335 if (value
== MT_ST_CLEAR_DEFAULT
) {
2336 STp
->default_drvbuffer
= 0xff;
2337 DEBC( printk(KERN_INFO
2338 "%s: Drive buffer default disabled.\n", name
));
2340 STp
->default_drvbuffer
= value
& 7;
2341 DEBC( printk(KERN_INFO
2342 "%s: Drive buffer default set to %x\n",
2343 name
, STp
->default_drvbuffer
));
2344 if (STp
->ready
== ST_READY
)
2345 st_int_ioctl(STp
, MTSETDRVBUFFER
, STp
->default_drvbuffer
);
2347 } else if (code
== MT_ST_DEF_COMPRESSION
) {
2348 if (value
== MT_ST_CLEAR_DEFAULT
) {
2349 STm
->default_compression
= ST_DONT_TOUCH
;
2350 DEBC( printk(KERN_INFO
2351 "%s: Compression default disabled.\n", name
));
2353 if ((value
& 0xff00) != 0) {
2354 STp
->c_algo
= (value
& 0xff00) >> 8;
2355 DEBC( printk(KERN_INFO
"%s: Compression algorithm set to 0x%x.\n",
2356 name
, STp
->c_algo
));
2358 if ((value
& 0xff) != 0xff) {
2359 STm
->default_compression
= (value
& 1 ? ST_YES
: ST_NO
);
2360 DEBC( printk(KERN_INFO
"%s: Compression default set to %x\n",
2361 name
, (value
& 1)));
2362 if (STp
->ready
== ST_READY
) {
2363 STp
->compression_changed
= 0;
2364 st_compression(STp
, (STm
->default_compression
== ST_YES
));
2375 #define MODE_HEADER_LENGTH 4
2377 /* Mode header and page byte offsets */
2378 #define MH_OFF_DATA_LENGTH 0
2379 #define MH_OFF_MEDIUM_TYPE 1
2380 #define MH_OFF_DEV_SPECIFIC 2
2381 #define MH_OFF_BDESCS_LENGTH 3
2382 #define MP_OFF_PAGE_NBR 0
2383 #define MP_OFF_PAGE_LENGTH 1
2385 /* Mode header and page bit masks */
2386 #define MH_BIT_WP 0x80
2387 #define MP_MSK_PAGE_NBR 0x3f
2389 /* Don't return block descriptors */
2390 #define MODE_SENSE_OMIT_BDESCS 0x08
2392 #define MODE_SELECT_PAGE_FORMAT 0x10
2394 /* Read a mode page into the tape buffer. The block descriptors are included
2395 if incl_block_descs is true. The page control is ored to the page number
2396 parameter, if necessary. */
2397 static int read_mode_page(struct scsi_tape
*STp
, int page
, int omit_block_descs
)
2399 unsigned char cmd
[MAX_COMMAND_SIZE
];
2400 struct st_request
*SRpnt
;
2402 memset(cmd
, 0, MAX_COMMAND_SIZE
);
2403 cmd
[0] = MODE_SENSE
;
2404 if (omit_block_descs
)
2405 cmd
[1] = MODE_SENSE_OMIT_BDESCS
;
2409 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, cmd
[4], DMA_FROM_DEVICE
,
2410 STp
->device
->request_queue
->rq_timeout
, 0, 1);
2412 return (STp
->buffer
)->syscall_result
;
2414 st_release_request(SRpnt
);
2416 return STp
->buffer
->syscall_result
;
2420 /* Send the mode page in the tape buffer to the drive. Assumes that the mode data
2421 in the buffer is correctly formatted. The long timeout is used if slow is non-zero. */
2422 static int write_mode_page(struct scsi_tape
*STp
, int page
, int slow
)
2425 unsigned char cmd
[MAX_COMMAND_SIZE
];
2426 struct st_request
*SRpnt
;
2429 memset(cmd
, 0, MAX_COMMAND_SIZE
);
2430 cmd
[0] = MODE_SELECT
;
2431 cmd
[1] = MODE_SELECT_PAGE_FORMAT
;
2432 pgo
= MODE_HEADER_LENGTH
+ (STp
->buffer
)->b_data
[MH_OFF_BDESCS_LENGTH
];
2433 cmd
[4] = pgo
+ (STp
->buffer
)->b_data
[pgo
+ MP_OFF_PAGE_LENGTH
] + 2;
2435 /* Clear reserved fields */
2436 (STp
->buffer
)->b_data
[MH_OFF_DATA_LENGTH
] = 0;
2437 (STp
->buffer
)->b_data
[MH_OFF_MEDIUM_TYPE
] = 0;
2438 (STp
->buffer
)->b_data
[MH_OFF_DEV_SPECIFIC
] &= ~MH_BIT_WP
;
2439 (STp
->buffer
)->b_data
[pgo
+ MP_OFF_PAGE_NBR
] &= MP_MSK_PAGE_NBR
;
2442 STp
->long_timeout
: STp
->device
->request_queue
->rq_timeout
;
2443 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, cmd
[4], DMA_TO_DEVICE
,
2446 return (STp
->buffer
)->syscall_result
;
2448 st_release_request(SRpnt
);
2450 return STp
->buffer
->syscall_result
;
2454 #define COMPRESSION_PAGE 0x0f
2455 #define COMPRESSION_PAGE_LENGTH 16
2457 #define CP_OFF_DCE_DCC 2
2458 #define CP_OFF_C_ALGO 7
2460 #define DCE_MASK 0x80
2461 #define DCC_MASK 0x40
2462 #define RED_MASK 0x60
2465 /* Control the compression with mode page 15. Algorithm not changed if zero.
2467 The block descriptors are read and written because Sony SDT-7000 does not
2468 work without this (suggestion from Michael Schaefer <Michael.Schaefer@dlr.de>).
2469 Including block descriptors should not cause any harm to other drives. */
2471 static int st_compression(struct scsi_tape
* STp
, int state
)
2474 int mpoffs
; /* Offset to mode page start */
2475 unsigned char *b_data
= (STp
->buffer
)->b_data
;
2476 DEB( char *name
= tape_name(STp
); )
2478 if (STp
->ready
!= ST_READY
)
2481 /* Read the current page contents */
2482 retval
= read_mode_page(STp
, COMPRESSION_PAGE
, 0);
2484 DEBC(printk(ST_DEB_MSG
"%s: Compression mode page not supported.\n",
2489 mpoffs
= MODE_HEADER_LENGTH
+ b_data
[MH_OFF_BDESCS_LENGTH
];
2490 DEBC(printk(ST_DEB_MSG
"%s: Compression state is %d.\n", name
,
2491 (b_data
[mpoffs
+ CP_OFF_DCE_DCC
] & DCE_MASK
? 1 : 0)));
2493 /* Check if compression can be changed */
2494 if ((b_data
[mpoffs
+ CP_OFF_DCE_DCC
] & DCC_MASK
) == 0) {
2495 DEBC(printk(ST_DEB_MSG
"%s: Compression not supported.\n", name
));
2501 b_data
[mpoffs
+ CP_OFF_DCE_DCC
] |= DCE_MASK
;
2502 if (STp
->c_algo
!= 0)
2503 b_data
[mpoffs
+ CP_OFF_C_ALGO
] = STp
->c_algo
;
2506 b_data
[mpoffs
+ CP_OFF_DCE_DCC
] &= ~DCE_MASK
;
2507 if (STp
->c_algo
!= 0)
2508 b_data
[mpoffs
+ CP_OFF_C_ALGO
] = 0; /* no compression */
2511 retval
= write_mode_page(STp
, COMPRESSION_PAGE
, 0);
2513 DEBC(printk(ST_DEB_MSG
"%s: Compression change failed.\n", name
));
2516 DEBC(printk(ST_DEB_MSG
"%s: Compression state changed to %d.\n",
2519 STp
->compression_changed
= 1;
2524 /* Process the load and unload commands (does unload if the load code is zero) */
2525 static int do_load_unload(struct scsi_tape
*STp
, struct file
*filp
, int load_code
)
2527 int retval
= (-EIO
), timeout
;
2528 DEB( char *name
= tape_name(STp
); )
2529 unsigned char cmd
[MAX_COMMAND_SIZE
];
2530 struct st_partstat
*STps
;
2531 struct st_request
*SRpnt
;
2533 if (STp
->ready
!= ST_READY
&& !load_code
) {
2534 if (STp
->ready
== ST_NO_TAPE
)
2535 return (-ENOMEDIUM
);
2540 memset(cmd
, 0, MAX_COMMAND_SIZE
);
2541 cmd
[0] = START_STOP
;
2545 * If arg >= 1 && arg <= 6 Enhanced load/unload in HP C1553A
2547 if (load_code
>= 1 + MT_ST_HPLOADER_OFFSET
2548 && load_code
<= 6 + MT_ST_HPLOADER_OFFSET
) {
2549 DEBC(printk(ST_DEB_MSG
"%s: Enhanced %sload slot %2d.\n",
2550 name
, (cmd
[4]) ? "" : "un",
2551 load_code
- MT_ST_HPLOADER_OFFSET
));
2552 cmd
[3] = load_code
- MT_ST_HPLOADER_OFFSET
; /* MediaID field of C1553A */
2554 if (STp
->immediate
) {
2555 cmd
[1] = 1; /* Don't wait for completion */
2556 timeout
= STp
->device
->request_queue
->rq_timeout
;
2559 timeout
= STp
->long_timeout
;
2563 printk(ST_DEB_MSG
"%s: Unloading tape.\n", name
);
2565 printk(ST_DEB_MSG
"%s: Loading tape.\n", name
);
2568 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, 0, DMA_NONE
,
2569 timeout
, MAX_RETRIES
, 1);
2571 return (STp
->buffer
)->syscall_result
;
2573 retval
= (STp
->buffer
)->syscall_result
;
2574 st_release_request(SRpnt
);
2576 if (!retval
) { /* SCSI command successful */
2579 STp
->rew_at_close
= 0;
2580 STp
->ready
= ST_NO_TAPE
;
2583 STp
->rew_at_close
= STp
->autorew_dev
;
2584 retval
= check_tape(STp
, filp
);
2590 STps
= &(STp
->ps
[STp
->partition
]);
2591 STps
->drv_file
= STps
->drv_block
= (-1);
2598 #define ST_DEB_FORWARD 0
2599 #define ST_DEB_BACKWARD 1
2600 static void deb_space_print(char *name
, int direction
, char *units
, unsigned char *cmd
)
2604 sc
= cmd
[2] & 0x80 ? 0xff000000 : 0;
2605 sc
|= (cmd
[2] << 16) | (cmd
[3] << 8) | cmd
[4];
2608 printk(ST_DEB_MSG
"%s: Spacing tape %s over %d %s.\n", name
,
2609 direction
? "backward" : "forward", sc
, units
);
2614 /* Internal ioctl function */
2615 static int st_int_ioctl(struct scsi_tape
*STp
, unsigned int cmd_in
, unsigned long arg
)
2621 unsigned char cmd
[MAX_COMMAND_SIZE
];
2622 struct st_request
*SRpnt
;
2623 struct st_partstat
*STps
;
2624 int fileno
, blkno
, at_sm
, undone
;
2625 int datalen
= 0, direction
= DMA_NONE
;
2626 char *name
= tape_name(STp
);
2628 WARN_ON(STp
->buffer
->do_dio
!= 0);
2629 if (STp
->ready
!= ST_READY
) {
2630 if (STp
->ready
== ST_NO_TAPE
)
2631 return (-ENOMEDIUM
);
2635 timeout
= STp
->long_timeout
;
2636 STps
= &(STp
->ps
[STp
->partition
]);
2637 fileno
= STps
->drv_file
;
2638 blkno
= STps
->drv_block
;
2639 at_sm
= STps
->at_sm
;
2641 memset(cmd
, 0, MAX_COMMAND_SIZE
);
2644 chg_eof
= 0; /* Changed from the FSF after this */
2647 cmd
[1] = 0x01; /* Space FileMarks */
2648 cmd
[2] = (arg
>> 16);
2649 cmd
[3] = (arg
>> 8);
2651 DEBC(deb_space_print(name
, ST_DEB_FORWARD
, "filemarks", cmd
);)
2655 at_sm
&= (arg
== 0);
2658 chg_eof
= 0; /* Changed from the FSF after this */
2661 cmd
[1] = 0x01; /* Space FileMarks */
2663 cmd
[2] = (ltmp
>> 16);
2664 cmd
[3] = (ltmp
>> 8);
2666 DEBC(deb_space_print(name
, ST_DEB_BACKWARD
, "filemarks", cmd
);)
2669 blkno
= (-1); /* We can't know the block number */
2670 at_sm
&= (arg
== 0);
2674 cmd
[1] = 0x00; /* Space Blocks */
2675 cmd
[2] = (arg
>> 16);
2676 cmd
[3] = (arg
>> 8);
2678 DEBC(deb_space_print(name
, ST_DEB_FORWARD
, "blocks", cmd
);)
2681 at_sm
&= (arg
== 0);
2685 cmd
[1] = 0x00; /* Space Blocks */
2687 cmd
[2] = (ltmp
>> 16);
2688 cmd
[3] = (ltmp
>> 8);
2690 DEBC(deb_space_print(name
, ST_DEB_BACKWARD
, "blocks", cmd
);)
2693 at_sm
&= (arg
== 0);
2697 cmd
[1] = 0x04; /* Space Setmarks */
2698 cmd
[2] = (arg
>> 16);
2699 cmd
[3] = (arg
>> 8);
2701 DEBC(deb_space_print(name
, ST_DEB_FORWARD
, "setmarks", cmd
);)
2703 blkno
= fileno
= (-1);
2709 cmd
[1] = 0x04; /* Space Setmarks */
2711 cmd
[2] = (ltmp
>> 16);
2712 cmd
[3] = (ltmp
>> 8);
2714 DEBC(deb_space_print(name
, ST_DEB_BACKWARD
, "setmarks", cmd
);)
2716 blkno
= fileno
= (-1);
2723 if (STp
->write_prot
)
2725 cmd
[0] = WRITE_FILEMARKS
;
2726 if (cmd_in
== MTWSM
)
2728 if (cmd_in
== MTWEOFI
||
2729 (cmd_in
== MTWEOF
&& STp
->immediate_filemark
))
2731 cmd
[2] = (arg
>> 16);
2732 cmd
[3] = (arg
>> 8);
2734 timeout
= STp
->device
->request_queue
->rq_timeout
;
2736 if (cmd_in
!= MTWSM
)
2737 printk(ST_DEB_MSG
"%s: Writing %d filemarks.\n", name
,
2738 cmd
[2] * 65536 + cmd
[3] * 256 + cmd
[4]);
2740 printk(ST_DEB_MSG
"%s: Writing %d setmarks.\n", name
,
2741 cmd
[2] * 65536 + cmd
[3] * 256 + cmd
[4]);
2746 at_sm
= (cmd_in
== MTWSM
);
2749 cmd
[0] = REZERO_UNIT
;
2750 if (STp
->immediate
) {
2751 cmd
[1] = 1; /* Don't wait for completion */
2752 timeout
= STp
->device
->request_queue
->rq_timeout
;
2754 DEBC(printk(ST_DEB_MSG
"%s: Rewinding tape.\n", name
));
2755 fileno
= blkno
= at_sm
= 0;
2758 DEBC(printk(ST_DEB_MSG
"%s: No op on tape.\n", name
));
2759 return 0; /* Should do something ? */
2762 cmd
[0] = START_STOP
;
2763 if (STp
->immediate
) {
2764 cmd
[1] = 1; /* Don't wait for completion */
2765 timeout
= STp
->device
->request_queue
->rq_timeout
;
2768 DEBC(printk(ST_DEB_MSG
"%s: Retensioning tape.\n", name
));
2769 fileno
= blkno
= at_sm
= 0;
2772 if (!STp
->fast_mteom
) {
2773 /* space to the end of tape */
2774 ioctl_result
= st_int_ioctl(STp
, MTFSF
, 0x7fffff);
2775 fileno
= STps
->drv_file
;
2776 if (STps
->eof
>= ST_EOD_1
)
2778 /* The next lines would hide the number of spaced FileMarks
2779 That's why I inserted the previous lines. I had no luck
2780 with detecting EOM with FSF, so we go now to EOM.
2786 DEBC(printk(ST_DEB_MSG
"%s: Spacing to end of recorded medium.\n",
2792 if (STp
->write_prot
)
2795 cmd
[1] = (arg
? 1 : 0); /* Long erase with non-zero argument */
2796 if (STp
->immediate
) {
2797 cmd
[1] |= 2; /* Don't wait for completion */
2798 timeout
= STp
->device
->request_queue
->rq_timeout
;
2801 timeout
= STp
->long_timeout
* 8;
2803 DEBC(printk(ST_DEB_MSG
"%s: Erasing tape.\n", name
));
2804 fileno
= blkno
= at_sm
= 0;
2806 case MTSETBLK
: /* Set block length */
2807 case MTSETDENSITY
: /* Set tape density */
2808 case MTSETDRVBUFFER
: /* Set drive buffering */
2809 case SET_DENS_AND_BLK
: /* Set density and block size */
2811 if (STp
->dirty
|| (STp
->buffer
)->buffer_bytes
!= 0)
2812 return (-EIO
); /* Not allowed if data in buffer */
2813 if ((cmd_in
== MTSETBLK
|| cmd_in
== SET_DENS_AND_BLK
) &&
2814 (arg
& MT_ST_BLKSIZE_MASK
) != 0 &&
2815 STp
->max_block
> 0 &&
2816 ((arg
& MT_ST_BLKSIZE_MASK
) < STp
->min_block
||
2817 (arg
& MT_ST_BLKSIZE_MASK
) > STp
->max_block
)) {
2818 printk(KERN_WARNING
"%s: Illegal block size.\n", name
);
2821 cmd
[0] = MODE_SELECT
;
2822 if ((STp
->use_pf
& USE_PF
))
2823 cmd
[1] = MODE_SELECT_PAGE_FORMAT
;
2824 cmd
[4] = datalen
= 12;
2825 direction
= DMA_TO_DEVICE
;
2827 memset((STp
->buffer
)->b_data
, 0, 12);
2828 if (cmd_in
== MTSETDRVBUFFER
)
2829 (STp
->buffer
)->b_data
[2] = (arg
& 7) << 4;
2831 (STp
->buffer
)->b_data
[2] =
2832 STp
->drv_buffer
<< 4;
2833 (STp
->buffer
)->b_data
[3] = 8; /* block descriptor length */
2834 if (cmd_in
== MTSETDENSITY
) {
2835 (STp
->buffer
)->b_data
[4] = arg
;
2836 STp
->density_changed
= 1; /* At least we tried ;-) */
2837 } else if (cmd_in
== SET_DENS_AND_BLK
)
2838 (STp
->buffer
)->b_data
[4] = arg
>> 24;
2840 (STp
->buffer
)->b_data
[4] = STp
->density
;
2841 if (cmd_in
== MTSETBLK
|| cmd_in
== SET_DENS_AND_BLK
) {
2842 ltmp
= arg
& MT_ST_BLKSIZE_MASK
;
2843 if (cmd_in
== MTSETBLK
)
2844 STp
->blksize_changed
= 1; /* At least we tried ;-) */
2846 ltmp
= STp
->block_size
;
2847 (STp
->buffer
)->b_data
[9] = (ltmp
>> 16);
2848 (STp
->buffer
)->b_data
[10] = (ltmp
>> 8);
2849 (STp
->buffer
)->b_data
[11] = ltmp
;
2850 timeout
= STp
->device
->request_queue
->rq_timeout
;
2852 if (cmd_in
== MTSETBLK
|| cmd_in
== SET_DENS_AND_BLK
)
2854 "%s: Setting block size to %d bytes.\n", name
,
2855 (STp
->buffer
)->b_data
[9] * 65536 +
2856 (STp
->buffer
)->b_data
[10] * 256 +
2857 (STp
->buffer
)->b_data
[11]);
2858 if (cmd_in
== MTSETDENSITY
|| cmd_in
== SET_DENS_AND_BLK
)
2860 "%s: Setting density code to %x.\n", name
,
2861 (STp
->buffer
)->b_data
[4]);
2862 if (cmd_in
== MTSETDRVBUFFER
)
2864 "%s: Setting drive buffer code to %d.\n", name
,
2865 ((STp
->buffer
)->b_data
[2] >> 4) & 7);
2872 SRpnt
= st_do_scsi(NULL
, STp
, cmd
, datalen
, direction
,
2873 timeout
, MAX_RETRIES
, 1);
2875 return (STp
->buffer
)->syscall_result
;
2877 ioctl_result
= (STp
->buffer
)->syscall_result
;
2879 if (!ioctl_result
) { /* SCSI command successful */
2880 st_release_request(SRpnt
);
2882 STps
->drv_block
= blkno
;
2883 STps
->drv_file
= fileno
;
2884 STps
->at_sm
= at_sm
;
2886 if (cmd_in
== MTBSFM
)
2887 ioctl_result
= st_int_ioctl(STp
, MTFSF
, 1);
2888 else if (cmd_in
== MTFSFM
)
2889 ioctl_result
= st_int_ioctl(STp
, MTBSF
, 1);
2891 if (cmd_in
== MTSETBLK
|| cmd_in
== SET_DENS_AND_BLK
) {
2892 STp
->block_size
= arg
& MT_ST_BLKSIZE_MASK
;
2893 if (STp
->block_size
!= 0) {
2894 (STp
->buffer
)->buffer_blocks
=
2895 (STp
->buffer
)->buffer_size
/ STp
->block_size
;
2897 (STp
->buffer
)->buffer_bytes
= (STp
->buffer
)->read_pointer
= 0;
2898 if (cmd_in
== SET_DENS_AND_BLK
)
2899 STp
->density
= arg
>> MT_ST_DENSITY_SHIFT
;
2900 } else if (cmd_in
== MTSETDRVBUFFER
)
2901 STp
->drv_buffer
= (arg
& 7);
2902 else if (cmd_in
== MTSETDENSITY
)
2905 if (cmd_in
== MTEOM
)
2907 else if (cmd_in
== MTFSF
)
2910 STps
->eof
= ST_NOEOF
;
2912 if (cmd_in
== MTWEOF
|| cmd_in
== MTWEOFI
)
2913 STps
->rw
= ST_IDLE
; /* prevent automatic WEOF at close */
2914 } else { /* SCSI command was not completely successful. Don't return
2915 from this block without releasing the SCSI command block! */
2916 struct st_cmdstatus
*cmdstatp
= &STp
->buffer
->cmdstat
;
2918 if (cmdstatp
->flags
& SENSE_EOM
) {
2919 if (cmd_in
!= MTBSF
&& cmd_in
!= MTBSFM
&&
2920 cmd_in
!= MTBSR
&& cmd_in
!= MTBSS
)
2921 STps
->eof
= ST_EOM_OK
;
2922 STps
->drv_block
= 0;
2925 if (cmdstatp
->remainder_valid
)
2926 undone
= (int)cmdstatp
->uremainder64
;
2930 if ((cmd_in
== MTWEOF
|| cmd_in
== MTWEOFI
) &&
2931 cmdstatp
->have_sense
&&
2932 (cmdstatp
->flags
& SENSE_EOM
)) {
2933 if (cmdstatp
->sense_hdr
.sense_key
== NO_SENSE
||
2934 cmdstatp
->sense_hdr
.sense_key
== RECOVERED_ERROR
) {
2935 ioctl_result
= 0; /* EOF(s) written successfully at EOM */
2936 STps
->eof
= ST_NOEOF
;
2937 } else { /* Writing EOF(s) failed */
2941 STps
->eof
= ST_NOEOF
;
2943 STps
->drv_file
= fileno
;
2944 } else if ((cmd_in
== MTFSF
) || (cmd_in
== MTFSFM
)) {
2946 STps
->drv_file
= fileno
- undone
;
2948 STps
->drv_file
= fileno
;
2949 STps
->drv_block
= -1;
2950 STps
->eof
= ST_NOEOF
;
2951 } else if ((cmd_in
== MTBSF
) || (cmd_in
== MTBSFM
)) {
2952 if (arg
> 0 && undone
< 0) /* Some drives get this wrong */
2954 if (STps
->drv_file
>= 0)
2955 STps
->drv_file
= fileno
+ undone
;
2956 STps
->drv_block
= 0;
2957 STps
->eof
= ST_NOEOF
;
2958 } else if (cmd_in
== MTFSR
) {
2959 if (cmdstatp
->flags
& SENSE_FMK
) { /* Hit filemark */
2960 if (STps
->drv_file
>= 0)
2962 STps
->drv_block
= 0;
2965 if (blkno
>= undone
)
2966 STps
->drv_block
= blkno
- undone
;
2968 STps
->drv_block
= (-1);
2969 STps
->eof
= ST_NOEOF
;
2971 } else if (cmd_in
== MTBSR
) {
2972 if (cmdstatp
->flags
& SENSE_FMK
) { /* Hit filemark */
2974 STps
->drv_block
= (-1);
2976 if (arg
> 0 && undone
< 0) /* Some drives get this wrong */
2978 if (STps
->drv_block
>= 0)
2979 STps
->drv_block
= blkno
+ undone
;
2981 STps
->eof
= ST_NOEOF
;
2982 } else if (cmd_in
== MTEOM
) {
2983 STps
->drv_file
= (-1);
2984 STps
->drv_block
= (-1);
2986 } else if (cmd_in
== MTSETBLK
||
2987 cmd_in
== MTSETDENSITY
||
2988 cmd_in
== MTSETDRVBUFFER
||
2989 cmd_in
== SET_DENS_AND_BLK
) {
2990 if (cmdstatp
->sense_hdr
.sense_key
== ILLEGAL_REQUEST
&&
2991 !(STp
->use_pf
& PF_TESTED
)) {
2992 /* Try the other possible state of Page Format if not
2994 STp
->use_pf
= (STp
->use_pf
^ USE_PF
) | PF_TESTED
;
2995 st_release_request(SRpnt
);
2997 return st_int_ioctl(STp
, cmd_in
, arg
);
3000 STps
->eof
= ST_NOEOF
;
3002 if (cmdstatp
->sense_hdr
.sense_key
== BLANK_CHECK
)
3005 st_release_request(SRpnt
);
3009 return ioctl_result
;
3013 /* Get the tape position. If bt == 2, arg points into a kernel space mt_loc
3016 static int get_location(struct scsi_tape
*STp
, unsigned int *block
, int *partition
,
3020 unsigned char scmd
[MAX_COMMAND_SIZE
];
3021 struct st_request
*SRpnt
;
3022 DEB( char *name
= tape_name(STp
); )
3024 if (STp
->ready
!= ST_READY
)
3027 memset(scmd
, 0, MAX_COMMAND_SIZE
);
3028 if ((STp
->device
)->scsi_level
< SCSI_2
) {
3029 scmd
[0] = QFA_REQUEST_BLOCK
;
3032 scmd
[0] = READ_POSITION
;
3033 if (!logical
&& !STp
->scsi2_logical
)
3036 SRpnt
= st_do_scsi(NULL
, STp
, scmd
, 20, DMA_FROM_DEVICE
,
3037 STp
->device
->request_queue
->rq_timeout
,
3038 MAX_READY_RETRIES
, 1);
3040 return (STp
->buffer
)->syscall_result
;
3042 if ((STp
->buffer
)->syscall_result
!= 0 ||
3043 (STp
->device
->scsi_level
>= SCSI_2
&&
3044 ((STp
->buffer
)->b_data
[0] & 4) != 0)) {
3045 *block
= *partition
= 0;
3046 DEBC(printk(ST_DEB_MSG
"%s: Can't read tape position.\n", name
));
3050 if ((STp
->device
)->scsi_level
< SCSI_2
) {
3051 *block
= ((STp
->buffer
)->b_data
[0] << 16)
3052 + ((STp
->buffer
)->b_data
[1] << 8)
3053 + (STp
->buffer
)->b_data
[2];
3056 *block
= ((STp
->buffer
)->b_data
[4] << 24)
3057 + ((STp
->buffer
)->b_data
[5] << 16)
3058 + ((STp
->buffer
)->b_data
[6] << 8)
3059 + (STp
->buffer
)->b_data
[7];
3060 *partition
= (STp
->buffer
)->b_data
[1];
3061 if (((STp
->buffer
)->b_data
[0] & 0x80) &&
3062 (STp
->buffer
)->b_data
[1] == 0) /* BOP of partition 0 */
3063 STp
->ps
[0].drv_block
= STp
->ps
[0].drv_file
= 0;
3065 DEBC(printk(ST_DEB_MSG
"%s: Got tape pos. blk %d part %d.\n", name
,
3066 *block
, *partition
));
3068 st_release_request(SRpnt
);
3075 /* Set the tape block and partition. Negative partition means that only the
3076 block should be set in vendor specific way. */
3077 static int set_location(struct scsi_tape
*STp
, unsigned int block
, int partition
,
3080 struct st_partstat
*STps
;
3084 unsigned char scmd
[MAX_COMMAND_SIZE
];
3085 struct st_request
*SRpnt
;
3086 DEB( char *name
= tape_name(STp
); )
3088 if (STp
->ready
!= ST_READY
)
3090 timeout
= STp
->long_timeout
;
3091 STps
= &(STp
->ps
[STp
->partition
]);
3093 DEBC(printk(ST_DEB_MSG
"%s: Setting block to %d and partition to %d.\n",
3094 name
, block
, partition
));
3095 DEB(if (partition
< 0)
3098 /* Update the location at the partition we are leaving */
3099 if ((!STp
->can_partitions
&& partition
!= 0) ||
3100 partition
>= ST_NBR_PARTITIONS
)
3102 if (partition
!= STp
->partition
) {
3103 if (get_location(STp
, &blk
, &p
, 1))
3104 STps
->last_block_valid
= 0;
3106 STps
->last_block_valid
= 1;
3107 STps
->last_block_visited
= blk
;
3108 DEBC(printk(ST_DEB_MSG
3109 "%s: Visited block %d for partition %d saved.\n",
3110 name
, blk
, STp
->partition
));
3114 memset(scmd
, 0, MAX_COMMAND_SIZE
);
3115 if ((STp
->device
)->scsi_level
< SCSI_2
) {
3116 scmd
[0] = QFA_SEEK_BLOCK
;
3117 scmd
[2] = (block
>> 16);
3118 scmd
[3] = (block
>> 8);
3123 scmd
[3] = (block
>> 24);
3124 scmd
[4] = (block
>> 16);
3125 scmd
[5] = (block
>> 8);
3127 if (!logical
&& !STp
->scsi2_logical
)
3129 if (STp
->partition
!= partition
) {
3131 scmd
[8] = partition
;
3132 DEBC(printk(ST_DEB_MSG
3133 "%s: Trying to change partition from %d to %d\n",
3134 name
, STp
->partition
, partition
));
3137 if (STp
->immediate
) {
3138 scmd
[1] |= 1; /* Don't wait for completion */
3139 timeout
= STp
->device
->request_queue
->rq_timeout
;
3142 SRpnt
= st_do_scsi(NULL
, STp
, scmd
, 0, DMA_NONE
,
3143 timeout
, MAX_READY_RETRIES
, 1);
3145 return (STp
->buffer
)->syscall_result
;
3147 STps
->drv_block
= STps
->drv_file
= (-1);
3148 STps
->eof
= ST_NOEOF
;
3149 if ((STp
->buffer
)->syscall_result
!= 0) {
3151 if (STp
->can_partitions
&&
3152 (STp
->device
)->scsi_level
>= SCSI_2
&&
3153 (p
= find_partition(STp
)) >= 0)
3156 if (STp
->can_partitions
) {
3157 STp
->partition
= partition
;
3158 STps
= &(STp
->ps
[partition
]);
3159 if (!STps
->last_block_valid
||
3160 STps
->last_block_visited
!= block
) {
3167 STps
->drv_block
= STps
->drv_file
= 0;
3171 st_release_request(SRpnt
);
3178 /* Find the current partition number for the drive status. Called from open and
3179 returns either partition number of negative error code. */
3180 static int find_partition(struct scsi_tape
*STp
)
3185 if ((i
= get_location(STp
, &block
, &partition
, 1)) < 0)
3187 if (partition
>= ST_NBR_PARTITIONS
)
3193 /* Change the partition if necessary */
3194 static int switch_partition(struct scsi_tape
*STp
)
3196 struct st_partstat
*STps
;
3198 if (STp
->partition
== STp
->new_partition
)
3200 STps
= &(STp
->ps
[STp
->new_partition
]);
3201 if (!STps
->last_block_valid
)
3202 STps
->last_block_visited
= 0;
3203 return set_location(STp
, STps
->last_block_visited
, STp
->new_partition
, 1);
3206 /* Functions for reading and writing the medium partition mode page. */
3208 #define PART_PAGE 0x11
3209 #define PART_PAGE_FIXED_LENGTH 8
3211 #define PP_OFF_MAX_ADD_PARTS 2
3212 #define PP_OFF_NBR_ADD_PARTS 3
3213 #define PP_OFF_FLAGS 4
3214 #define PP_OFF_PART_UNITS 6
3215 #define PP_OFF_RESERVED 7
3217 #define PP_BIT_IDP 0x20
3218 #define PP_MSK_PSUM_MB 0x10
3220 /* Get the number of partitions on the tape. As a side effect reads the
3221 mode page into the tape buffer. */
3222 static int nbr_partitions(struct scsi_tape
*STp
)
3225 DEB( char *name
= tape_name(STp
); )
3227 if (STp
->ready
!= ST_READY
)
3230 result
= read_mode_page(STp
, PART_PAGE
, 1);
3233 DEBC(printk(ST_DEB_MSG
"%s: Can't read medium partition page.\n",
3237 result
= (STp
->buffer
)->b_data
[MODE_HEADER_LENGTH
+
3238 PP_OFF_NBR_ADD_PARTS
] + 1;
3239 DEBC(printk(ST_DEB_MSG
"%s: Number of partitions %d.\n", name
, result
));
3246 /* Partition the tape into two partitions if size > 0 or one partition if
3249 The block descriptors are read and written because Sony SDT-7000 does not
3250 work without this (suggestion from Michael Schaefer <Michael.Schaefer@dlr.de>).
3252 My HP C1533A drive returns only one partition size field. This is used to
3253 set the size of partition 1. There is no size field for the default partition.
3254 Michael Schaefer's Sony SDT-7000 returns two descriptors and the second is
3255 used to set the size of partition 1 (this is what the SCSI-3 standard specifies).
3256 The following algorithm is used to accommodate both drives: if the number of
3257 partition size fields is greater than the maximum number of additional partitions
3258 in the mode page, the second field is used. Otherwise the first field is used.
3260 For Seagate DDS drives the page length must be 8 when no partitions is defined
3261 and 10 when 1 partition is defined (information from Eric Lee Green). This is
3262 is acceptable also to some other old drives and enforced if the first partition
3263 size field is used for the first additional partition size.
3265 static int partition_tape(struct scsi_tape
*STp
, int size
)
3267 char *name
= tape_name(STp
);
3269 int pgo
, psd_cnt
, psdo
;
3272 result
= read_mode_page(STp
, PART_PAGE
, 0);
3274 DEBC(printk(ST_DEB_MSG
"%s: Can't read partition mode page.\n", name
));
3277 /* The mode page is in the buffer. Let's modify it and write it. */
3278 bp
= (STp
->buffer
)->b_data
;
3279 pgo
= MODE_HEADER_LENGTH
+ bp
[MH_OFF_BDESCS_LENGTH
];
3280 DEBC(printk(ST_DEB_MSG
"%s: Partition page length is %d bytes.\n",
3281 name
, bp
[pgo
+ MP_OFF_PAGE_LENGTH
] + 2));
3283 psd_cnt
= (bp
[pgo
+ MP_OFF_PAGE_LENGTH
] + 2 - PART_PAGE_FIXED_LENGTH
) / 2;
3284 psdo
= pgo
+ PART_PAGE_FIXED_LENGTH
;
3285 if (psd_cnt
> bp
[pgo
+ PP_OFF_MAX_ADD_PARTS
]) {
3286 bp
[psdo
] = bp
[psdo
+ 1] = 0xff; /* Rest of the tape */
3289 memset(bp
+ psdo
, 0, bp
[pgo
+ PP_OFF_NBR_ADD_PARTS
] * 2);
3291 DEBC(printk("%s: psd_cnt %d, max.parts %d, nbr_parts %d\n", name
,
3292 psd_cnt
, bp
[pgo
+ PP_OFF_MAX_ADD_PARTS
],
3293 bp
[pgo
+ PP_OFF_NBR_ADD_PARTS
]));
3296 bp
[pgo
+ PP_OFF_NBR_ADD_PARTS
] = 0;
3297 if (psd_cnt
<= bp
[pgo
+ PP_OFF_MAX_ADD_PARTS
])
3298 bp
[pgo
+ MP_OFF_PAGE_LENGTH
] = 6;
3299 DEBC(printk(ST_DEB_MSG
"%s: Formatting tape with one partition.\n",
3302 bp
[psdo
] = (size
>> 8) & 0xff;
3303 bp
[psdo
+ 1] = size
& 0xff;
3305 if (bp
[pgo
+ MP_OFF_PAGE_LENGTH
] < 8)
3306 bp
[pgo
+ MP_OFF_PAGE_LENGTH
] = 8;
3307 DEBC(printk(ST_DEB_MSG
3308 "%s: Formatting tape with two partitions (1 = %d MB).\n",
3311 bp
[pgo
+ PP_OFF_PART_UNITS
] = 0;
3312 bp
[pgo
+ PP_OFF_RESERVED
] = 0;
3313 bp
[pgo
+ PP_OFF_FLAGS
] = PP_BIT_IDP
| PP_MSK_PSUM_MB
;
3315 result
= write_mode_page(STp
, PART_PAGE
, 1);
3317 printk(KERN_INFO
"%s: Partitioning of tape failed.\n", name
);
3326 /* The ioctl command */
3327 static long st_ioctl(struct file
*file
, unsigned int cmd_in
, unsigned long arg
)
3329 int i
, cmd_nr
, cmd_type
, bt
;
3332 struct scsi_tape
*STp
= file
->private_data
;
3333 struct st_modedef
*STm
;
3334 struct st_partstat
*STps
;
3335 char *name
= tape_name(STp
);
3336 void __user
*p
= (void __user
*)arg
;
3338 if (mutex_lock_interruptible(&STp
->lock
))
3339 return -ERESTARTSYS
;
3342 if (debugging
&& !STp
->in_use
) {
3343 printk(ST_DEB_MSG
"%s: Incorrect device.\n", name
);
3348 STm
= &(STp
->modes
[STp
->current_mode
]);
3349 STps
= &(STp
->ps
[STp
->partition
]);
3352 * If we are in the middle of error recovery, don't let anyone
3353 * else try and use this device. Also, if error recovery fails, it
3354 * may try and take the device offline, in which case all further
3355 * access to the device is prohibited.
3357 retval
= scsi_nonblockable_ioctl(STp
->device
, cmd_in
, p
,
3358 file
->f_flags
& O_NDELAY
);
3359 if (!scsi_block_when_processing_errors(STp
->device
) || retval
!= -ENODEV
)
3363 cmd_type
= _IOC_TYPE(cmd_in
);
3364 cmd_nr
= _IOC_NR(cmd_in
);
3366 if (cmd_type
== _IOC_TYPE(MTIOCTOP
) && cmd_nr
== _IOC_NR(MTIOCTOP
)) {
3369 if (_IOC_SIZE(cmd_in
) != sizeof(mtc
)) {
3374 i
= copy_from_user(&mtc
, p
, sizeof(struct mtop
));
3380 if (mtc
.mt_op
== MTSETDRVBUFFER
&& !capable(CAP_SYS_ADMIN
)) {
3382 "%s: MTSETDRVBUFFER only allowed for root.\n", name
);
3386 if (!STm
->defined
&&
3387 (mtc
.mt_op
!= MTSETDRVBUFFER
&&
3388 (mtc
.mt_count
& MT_ST_OPTIONS
) == 0)) {
3393 if (!STp
->pos_unknown
) {
3395 if (STps
->eof
== ST_FM_HIT
) {
3396 if (mtc
.mt_op
== MTFSF
|| mtc
.mt_op
== MTFSFM
||
3397 mtc
.mt_op
== MTEOM
) {
3399 if (STps
->drv_file
>= 0)
3400 STps
->drv_file
+= 1;
3401 } else if (mtc
.mt_op
== MTBSF
|| mtc
.mt_op
== MTBSFM
) {
3403 if (STps
->drv_file
>= 0)
3404 STps
->drv_file
+= 1;
3408 if (mtc
.mt_op
== MTSEEK
) {
3409 /* Old position must be restored if partition will be
3411 i
= !STp
->can_partitions
||
3412 (STp
->new_partition
!= STp
->partition
);
3414 i
= mtc
.mt_op
== MTREW
|| mtc
.mt_op
== MTOFFL
||
3415 mtc
.mt_op
== MTRETEN
|| mtc
.mt_op
== MTEOM
||
3416 mtc
.mt_op
== MTLOCK
|| mtc
.mt_op
== MTLOAD
||
3417 mtc
.mt_op
== MTFSF
|| mtc
.mt_op
== MTFSFM
||
3418 mtc
.mt_op
== MTBSF
|| mtc
.mt_op
== MTBSFM
||
3419 mtc
.mt_op
== MTCOMPRESSION
;
3421 i
= flush_buffer(STp
, i
);
3426 if (STps
->rw
== ST_WRITING
&&
3427 (mtc
.mt_op
== MTREW
|| mtc
.mt_op
== MTOFFL
||
3428 mtc
.mt_op
== MTSEEK
||
3429 mtc
.mt_op
== MTBSF
|| mtc
.mt_op
== MTBSFM
)) {
3430 i
= st_int_ioctl(STp
, MTWEOF
, 1);
3435 if (mtc
.mt_op
== MTBSF
|| mtc
.mt_op
== MTBSFM
)
3442 * If there was a bus reset, block further access
3443 * to this device. If the user wants to rewind the tape,
3444 * then reset the flag and allow access again.
3446 if (mtc
.mt_op
!= MTREW
&&
3447 mtc
.mt_op
!= MTOFFL
&&
3448 mtc
.mt_op
!= MTRETEN
&&
3449 mtc
.mt_op
!= MTERASE
&&
3450 mtc
.mt_op
!= MTSEEK
&&
3451 mtc
.mt_op
!= MTEOM
) {
3456 /* remove this when the midlevel properly clears was_reset */
3457 STp
->device
->was_reset
= 0;
3460 if (mtc
.mt_op
!= MTNOP
&& mtc
.mt_op
!= MTSETBLK
&&
3461 mtc
.mt_op
!= MTSETDENSITY
&& mtc
.mt_op
!= MTWSM
&&
3462 mtc
.mt_op
!= MTSETDRVBUFFER
&& mtc
.mt_op
!= MTSETPART
)
3463 STps
->rw
= ST_IDLE
; /* Prevent automatic WEOF and fsf */
3465 if (mtc
.mt_op
== MTOFFL
&& STp
->door_locked
!= ST_UNLOCKED
)
3466 do_door_lock(STp
, 0); /* Ignore result! */
3468 if (mtc
.mt_op
== MTSETDRVBUFFER
&&
3469 (mtc
.mt_count
& MT_ST_OPTIONS
) != 0) {
3470 retval
= st_set_options(STp
, mtc
.mt_count
);
3474 if (mtc
.mt_op
== MTSETPART
) {
3475 if (!STp
->can_partitions
||
3476 mtc
.mt_count
< 0 || mtc
.mt_count
>= ST_NBR_PARTITIONS
) {
3480 if (mtc
.mt_count
>= STp
->nbr_partitions
&&
3481 (STp
->nbr_partitions
= nbr_partitions(STp
)) < 0) {
3485 if (mtc
.mt_count
>= STp
->nbr_partitions
) {
3489 STp
->new_partition
= mtc
.mt_count
;
3494 if (mtc
.mt_op
== MTMKPART
) {
3495 if (!STp
->can_partitions
) {
3499 if ((i
= st_int_ioctl(STp
, MTREW
, 0)) < 0 ||
3500 (i
= partition_tape(STp
, mtc
.mt_count
)) < 0) {
3504 for (i
= 0; i
< ST_NBR_PARTITIONS
; i
++) {
3505 STp
->ps
[i
].rw
= ST_IDLE
;
3506 STp
->ps
[i
].at_sm
= 0;
3507 STp
->ps
[i
].last_block_valid
= 0;
3509 STp
->partition
= STp
->new_partition
= 0;
3510 STp
->nbr_partitions
= 1; /* Bad guess ?-) */
3511 STps
->drv_block
= STps
->drv_file
= 0;
3516 if (mtc
.mt_op
== MTSEEK
) {
3517 i
= set_location(STp
, mtc
.mt_count
, STp
->new_partition
, 0);
3518 if (!STp
->can_partitions
)
3519 STp
->ps
[0].rw
= ST_IDLE
;
3524 if (mtc
.mt_op
== MTUNLOAD
|| mtc
.mt_op
== MTOFFL
) {
3525 retval
= do_load_unload(STp
, file
, 0);
3529 if (mtc
.mt_op
== MTLOAD
) {
3530 retval
= do_load_unload(STp
, file
, max(1, mtc
.mt_count
));
3534 if (mtc
.mt_op
== MTLOCK
|| mtc
.mt_op
== MTUNLOCK
) {
3535 retval
= do_door_lock(STp
, (mtc
.mt_op
== MTLOCK
));
3539 if (STp
->can_partitions
&& STp
->ready
== ST_READY
&&
3540 (i
= switch_partition(STp
)) < 0) {
3545 if (mtc
.mt_op
== MTCOMPRESSION
)
3546 retval
= st_compression(STp
, (mtc
.mt_count
& 1));
3548 retval
= st_int_ioctl(STp
, mtc
.mt_op
, mtc
.mt_count
);
3551 if (!STm
->defined
) {
3556 if ((i
= flush_buffer(STp
, 0)) < 0) {
3560 if (STp
->can_partitions
&&
3561 (i
= switch_partition(STp
)) < 0) {
3566 if (cmd_type
== _IOC_TYPE(MTIOCGET
) && cmd_nr
== _IOC_NR(MTIOCGET
)) {
3567 struct mtget mt_status
;
3569 if (_IOC_SIZE(cmd_in
) != sizeof(struct mtget
)) {
3574 mt_status
.mt_type
= STp
->tape_type
;
3575 mt_status
.mt_dsreg
=
3576 ((STp
->block_size
<< MT_ST_BLKSIZE_SHIFT
) & MT_ST_BLKSIZE_MASK
) |
3577 ((STp
->density
<< MT_ST_DENSITY_SHIFT
) & MT_ST_DENSITY_MASK
);
3578 mt_status
.mt_blkno
= STps
->drv_block
;
3579 mt_status
.mt_fileno
= STps
->drv_file
;
3580 if (STp
->block_size
!= 0) {
3581 if (STps
->rw
== ST_WRITING
)
3582 mt_status
.mt_blkno
+=
3583 (STp
->buffer
)->buffer_bytes
/ STp
->block_size
;
3584 else if (STps
->rw
== ST_READING
)
3585 mt_status
.mt_blkno
-=
3586 ((STp
->buffer
)->buffer_bytes
+
3587 STp
->block_size
- 1) / STp
->block_size
;
3590 mt_status
.mt_gstat
= 0;
3591 if (STp
->drv_write_prot
)
3592 mt_status
.mt_gstat
|= GMT_WR_PROT(0xffffffff);
3593 if (mt_status
.mt_blkno
== 0) {
3594 if (mt_status
.mt_fileno
== 0)
3595 mt_status
.mt_gstat
|= GMT_BOT(0xffffffff);
3597 mt_status
.mt_gstat
|= GMT_EOF(0xffffffff);
3599 mt_status
.mt_erreg
= (STp
->recover_reg
<< MT_ST_SOFTERR_SHIFT
);
3600 mt_status
.mt_resid
= STp
->partition
;
3601 if (STps
->eof
== ST_EOM_OK
|| STps
->eof
== ST_EOM_ERROR
)
3602 mt_status
.mt_gstat
|= GMT_EOT(0xffffffff);
3603 else if (STps
->eof
>= ST_EOM_OK
)
3604 mt_status
.mt_gstat
|= GMT_EOD(0xffffffff);
3605 if (STp
->density
== 1)
3606 mt_status
.mt_gstat
|= GMT_D_800(0xffffffff);
3607 else if (STp
->density
== 2)
3608 mt_status
.mt_gstat
|= GMT_D_1600(0xffffffff);
3609 else if (STp
->density
== 3)
3610 mt_status
.mt_gstat
|= GMT_D_6250(0xffffffff);
3611 if (STp
->ready
== ST_READY
)
3612 mt_status
.mt_gstat
|= GMT_ONLINE(0xffffffff);
3613 if (STp
->ready
== ST_NO_TAPE
)
3614 mt_status
.mt_gstat
|= GMT_DR_OPEN(0xffffffff);
3616 mt_status
.mt_gstat
|= GMT_SM(0xffffffff);
3617 if (STm
->do_async_writes
||
3618 (STm
->do_buffer_writes
&& STp
->block_size
!= 0) ||
3619 STp
->drv_buffer
!= 0)
3620 mt_status
.mt_gstat
|= GMT_IM_REP_EN(0xffffffff);
3621 if (STp
->cleaning_req
)
3622 mt_status
.mt_gstat
|= GMT_CLN(0xffffffff);
3624 i
= copy_to_user(p
, &mt_status
, sizeof(struct mtget
));
3630 STp
->recover_reg
= 0; /* Clear after read */
3633 } /* End of MTIOCGET */
3634 if (cmd_type
== _IOC_TYPE(MTIOCPOS
) && cmd_nr
== _IOC_NR(MTIOCPOS
)) {
3635 struct mtpos mt_pos
;
3636 if (_IOC_SIZE(cmd_in
) != sizeof(struct mtpos
)) {
3640 if ((i
= get_location(STp
, &blk
, &bt
, 0)) < 0) {
3644 mt_pos
.mt_blkno
= blk
;
3645 i
= copy_to_user(p
, &mt_pos
, sizeof(struct mtpos
));
3650 mutex_unlock(&STp
->lock
);
3652 case SCSI_IOCTL_GET_IDLUN
:
3653 case SCSI_IOCTL_GET_BUS_NUMBER
:
3656 if ((cmd_in
== SG_IO
||
3657 cmd_in
== SCSI_IOCTL_SEND_COMMAND
||
3658 cmd_in
== CDROM_SEND_PACKET
) &&
3659 !capable(CAP_SYS_RAWIO
))
3662 i
= scsi_cmd_ioctl(STp
->disk
->queue
, STp
->disk
,
3663 file
->f_mode
, cmd_in
, p
);
3668 retval
= scsi_ioctl(STp
->device
, cmd_in
, p
);
3669 if (!retval
&& cmd_in
== SCSI_IOCTL_STOP_UNIT
) { /* unload */
3670 STp
->rew_at_close
= 0;
3671 STp
->ready
= ST_NO_TAPE
;
3676 mutex_unlock(&STp
->lock
);
3680 #ifdef CONFIG_COMPAT
3681 static long st_compat_ioctl(struct file
*file
, unsigned int cmd
, unsigned long arg
)
3683 struct scsi_tape
*STp
= file
->private_data
;
3684 struct scsi_device
*sdev
= STp
->device
;
3685 int ret
= -ENOIOCTLCMD
;
3686 if (sdev
->host
->hostt
->compat_ioctl
) {
3688 ret
= sdev
->host
->hostt
->compat_ioctl(sdev
, cmd
, (void __user
*)arg
);
3697 /* Try to allocate a new tape buffer. Calling function must not hold
3699 static struct st_buffer
*new_tape_buffer(int need_dma
, int max_sg
)
3701 struct st_buffer
*tb
;
3703 tb
= kzalloc(sizeof(struct st_buffer
), GFP_ATOMIC
);
3705 printk(KERN_NOTICE
"st: Can't allocate new tape buffer.\n");
3709 tb
->use_sg
= max_sg
;
3711 tb
->buffer_size
= 0;
3713 tb
->reserved_pages
= kzalloc(max_sg
* sizeof(struct page
*),
3715 if (!tb
->reserved_pages
) {
3724 /* Try to allocate enough space in the tape buffer */
3725 #define ST_MAX_ORDER 6
3727 static int enlarge_buffer(struct st_buffer
* STbuffer
, int new_size
, int need_dma
)
3729 int segs
, max_segs
, b_size
, order
, got
;
3732 if (new_size
<= STbuffer
->buffer_size
)
3735 if (STbuffer
->buffer_size
<= PAGE_SIZE
)
3736 normalize_buffer(STbuffer
); /* Avoid extra segment */
3738 max_segs
= STbuffer
->use_sg
;
3740 priority
= GFP_KERNEL
| __GFP_NOWARN
;
3742 priority
|= GFP_DMA
;
3744 if (STbuffer
->cleared
)
3745 priority
|= __GFP_ZERO
;
3747 if (STbuffer
->frp_segs
) {
3748 order
= STbuffer
->reserved_page_order
;
3749 b_size
= PAGE_SIZE
<< order
;
3751 for (b_size
= PAGE_SIZE
, order
= 0;
3752 order
< ST_MAX_ORDER
&&
3753 max_segs
* (PAGE_SIZE
<< order
) < new_size
;
3754 order
++, b_size
*= 2)
3756 STbuffer
->reserved_page_order
= order
;
3758 if (max_segs
* (PAGE_SIZE
<< order
) < new_size
) {
3759 if (order
== ST_MAX_ORDER
)
3761 normalize_buffer(STbuffer
);
3762 return enlarge_buffer(STbuffer
, new_size
, need_dma
);
3765 for (segs
= STbuffer
->frp_segs
, got
= STbuffer
->buffer_size
;
3766 segs
< max_segs
&& got
< new_size
;) {
3769 page
= alloc_pages(priority
, order
);
3771 DEB(STbuffer
->buffer_size
= got
);
3772 normalize_buffer(STbuffer
);
3776 STbuffer
->frp_segs
+= 1;
3778 STbuffer
->buffer_size
= got
;
3779 STbuffer
->reserved_pages
[segs
] = page
;
3782 STbuffer
->b_data
= page_address(STbuffer
->reserved_pages
[0]);
3788 /* Make sure that no data from previous user is in the internal buffer */
3789 static void clear_buffer(struct st_buffer
* st_bp
)
3793 for (i
=0; i
< st_bp
->frp_segs
; i
++)
3794 memset(page_address(st_bp
->reserved_pages
[i
]), 0,
3795 PAGE_SIZE
<< st_bp
->reserved_page_order
);
3800 /* Release the extra buffer */
3801 static void normalize_buffer(struct st_buffer
* STbuffer
)
3803 int i
, order
= STbuffer
->reserved_page_order
;
3805 for (i
= 0; i
< STbuffer
->frp_segs
; i
++) {
3806 __free_pages(STbuffer
->reserved_pages
[i
], order
);
3807 STbuffer
->buffer_size
-= (PAGE_SIZE
<< order
);
3809 STbuffer
->frp_segs
= 0;
3810 STbuffer
->sg_segs
= 0;
3811 STbuffer
->reserved_page_order
= 0;
3812 STbuffer
->map_data
.offset
= 0;
3816 /* Move data from the user buffer to the tape buffer. Returns zero (success) or
3817 negative error code. */
3818 static int append_to_buffer(const char __user
*ubp
, struct st_buffer
* st_bp
, int do_count
)
3820 int i
, cnt
, res
, offset
;
3821 int length
= PAGE_SIZE
<< st_bp
->reserved_page_order
;
3823 for (i
= 0, offset
= st_bp
->buffer_bytes
;
3824 i
< st_bp
->frp_segs
&& offset
>= length
; i
++)
3826 if (i
== st_bp
->frp_segs
) { /* Should never happen */
3827 printk(KERN_WARNING
"st: append_to_buffer offset overflow.\n");
3830 for (; i
< st_bp
->frp_segs
&& do_count
> 0; i
++) {
3831 struct page
*page
= st_bp
->reserved_pages
[i
];
3832 cnt
= length
- offset
< do_count
? length
- offset
: do_count
;
3833 res
= copy_from_user(page_address(page
) + offset
, ubp
, cnt
);
3837 st_bp
->buffer_bytes
+= cnt
;
3841 if (do_count
) /* Should never happen */
3848 /* Move data from the tape buffer to the user buffer. Returns zero (success) or
3849 negative error code. */
3850 static int from_buffer(struct st_buffer
* st_bp
, char __user
*ubp
, int do_count
)
3852 int i
, cnt
, res
, offset
;
3853 int length
= PAGE_SIZE
<< st_bp
->reserved_page_order
;
3855 for (i
= 0, offset
= st_bp
->read_pointer
;
3856 i
< st_bp
->frp_segs
&& offset
>= length
; i
++)
3858 if (i
== st_bp
->frp_segs
) { /* Should never happen */
3859 printk(KERN_WARNING
"st: from_buffer offset overflow.\n");
3862 for (; i
< st_bp
->frp_segs
&& do_count
> 0; i
++) {
3863 struct page
*page
= st_bp
->reserved_pages
[i
];
3864 cnt
= length
- offset
< do_count
? length
- offset
: do_count
;
3865 res
= copy_to_user(ubp
, page_address(page
) + offset
, cnt
);
3869 st_bp
->buffer_bytes
-= cnt
;
3870 st_bp
->read_pointer
+= cnt
;
3874 if (do_count
) /* Should never happen */
3881 /* Move data towards start of buffer */
3882 static void move_buffer_data(struct st_buffer
* st_bp
, int offset
)
3884 int src_seg
, dst_seg
, src_offset
= 0, dst_offset
;
3886 int length
= PAGE_SIZE
<< st_bp
->reserved_page_order
;
3891 total
=st_bp
->buffer_bytes
- offset
;
3892 for (src_seg
=0; src_seg
< st_bp
->frp_segs
; src_seg
++) {
3893 src_offset
= offset
;
3894 if (src_offset
< length
)
3899 st_bp
->buffer_bytes
= st_bp
->read_pointer
= total
;
3900 for (dst_seg
=dst_offset
=0; total
> 0; ) {
3901 struct page
*dpage
= st_bp
->reserved_pages
[dst_seg
];
3902 struct page
*spage
= st_bp
->reserved_pages
[src_seg
];
3904 count
= min(length
- dst_offset
, length
- src_offset
);
3905 memmove(page_address(dpage
) + dst_offset
,
3906 page_address(spage
) + src_offset
, count
);
3907 src_offset
+= count
;
3908 if (src_offset
>= length
) {
3912 dst_offset
+= count
;
3913 if (dst_offset
>= length
) {
3921 /* Validate the options from command line or module parameters */
3922 static void validate_options(void)
3925 st_fixed_buffer_size
= buffer_kbs
* ST_KILOBYTE
;
3926 if (max_sg_segs
>= ST_FIRST_SG
)
3927 st_max_sg_segs
= max_sg_segs
;
3931 /* Set the boot options. Syntax is defined in Documenation/scsi/st.txt.
3933 static int __init
st_setup(char *str
)
3935 int i
, len
, ints
[5];
3938 stp
= get_options(str
, ARRAY_SIZE(ints
), ints
);
3941 for (i
= 0; i
< ints
[0] && i
< ARRAY_SIZE(parms
); i
++)
3943 *parms
[i
].val
= ints
[i
+ 1];
3945 while (stp
!= NULL
) {
3946 for (i
= 0; i
< ARRAY_SIZE(parms
); i
++) {
3947 len
= strlen(parms
[i
].name
);
3948 if (!strncmp(stp
, parms
[i
].name
, len
) &&
3949 (*(stp
+ len
) == ':' || *(stp
+ len
) == '=')) {
3952 simple_strtoul(stp
+ len
+ 1, NULL
, 0);
3954 printk(KERN_WARNING
"st: Obsolete parameter %s\n",
3959 if (i
>= ARRAY_SIZE(parms
))
3960 printk(KERN_WARNING
"st: invalid parameter in '%s'\n",
3962 stp
= strchr(stp
, ',');
3973 __setup("st=", st_setup
);
3977 static const struct file_operations st_fops
=
3979 .owner
= THIS_MODULE
,
3982 .unlocked_ioctl
= st_ioctl
,
3983 #ifdef CONFIG_COMPAT
3984 .compat_ioctl
= st_compat_ioctl
,
3988 .release
= st_release
,
3989 .llseek
= noop_llseek
,
3992 static int create_one_cdev(struct scsi_tape
*tape
, int mode
, int rew
)
3998 struct st_modedef
*STm
= &(tape
->modes
[mode
]);
4000 int dev_num
= tape
->index
;
4002 cdev_devno
= MKDEV(SCSI_TAPE_MAJOR
, TAPE_MINOR(dev_num
, mode
, rew
));
4004 cdev
= cdev_alloc();
4006 pr_err("st%d: out of memory. Device not attached.\n", dev_num
);
4010 cdev
->owner
= THIS_MODULE
;
4011 cdev
->ops
= &st_fops
;
4013 error
= cdev_add(cdev
, cdev_devno
, 1);
4015 pr_err("st%d: Can't add %s-rewind mode %d\n", dev_num
,
4016 rew
? "non" : "auto", mode
);
4017 pr_err("st%d: Device not attached.\n", dev_num
);
4020 STm
->cdevs
[rew
] = cdev
;
4022 i
= mode
<< (4 - ST_NBR_MODE_BITS
);
4023 snprintf(name
, 10, "%s%s%s", rew
? "n" : "",
4024 tape
->disk
->disk_name
, st_formats
[i
]);
4026 dev
= device_create(&st_sysfs_class
, &tape
->device
->sdev_gendev
,
4027 cdev_devno
, &tape
->modes
[mode
], "%s", name
);
4029 pr_err("st%d: device_create failed\n", dev_num
);
4030 error
= PTR_ERR(dev
);
4034 STm
->devs
[rew
] = dev
;
4038 cdev_del(STm
->cdevs
[rew
]);
4039 STm
->cdevs
[rew
] = NULL
;
4044 static int create_cdevs(struct scsi_tape
*tape
)
4047 for (mode
= 0; mode
< ST_NBR_MODES
; ++mode
) {
4048 error
= create_one_cdev(tape
, mode
, 0);
4051 error
= create_one_cdev(tape
, mode
, 1);
4056 return sysfs_create_link(&tape
->device
->sdev_gendev
.kobj
,
4057 &tape
->modes
[0].devs
[0]->kobj
, "tape");
4060 static void remove_cdevs(struct scsi_tape
*tape
)
4063 sysfs_remove_link(&tape
->device
->sdev_gendev
.kobj
, "tape");
4064 for (mode
= 0; mode
< ST_NBR_MODES
; mode
++) {
4065 struct st_modedef
*STm
= &(tape
->modes
[mode
]);
4066 for (rew
= 0; rew
< 2; rew
++) {
4067 if (STm
->cdevs
[rew
])
4068 cdev_del(STm
->cdevs
[rew
]);
4070 device_unregister(STm
->devs
[rew
]);
4075 static int st_probe(struct device
*dev
)
4077 struct scsi_device
*SDp
= to_scsi_device(dev
);
4078 struct gendisk
*disk
= NULL
;
4079 struct scsi_tape
*tpnt
= NULL
;
4080 struct st_modedef
*STm
;
4081 struct st_partstat
*STps
;
4082 struct st_buffer
*buffer
;
4086 if (SDp
->type
!= TYPE_TAPE
)
4088 if ((stp
= st_incompatible(SDp
))) {
4089 sdev_printk(KERN_INFO
, SDp
, "Found incompatible tape\n");
4090 printk(KERN_INFO
"st: The suggested driver is %s.\n", stp
);
4094 i
= queue_max_segments(SDp
->request_queue
);
4095 if (st_max_sg_segs
< i
)
4097 buffer
= new_tape_buffer((SDp
->host
)->unchecked_isa_dma
, i
);
4098 if (buffer
== NULL
) {
4100 "st: Can't allocate new tape buffer. Device not attached.\n");
4104 disk
= alloc_disk(1);
4106 printk(KERN_ERR
"st: out of memory. Device not attached.\n");
4107 goto out_buffer_free
;
4110 tpnt
= kzalloc(sizeof(struct scsi_tape
), GFP_ATOMIC
);
4112 printk(KERN_ERR
"st: Can't allocate device descriptor.\n");
4115 kref_init(&tpnt
->kref
);
4117 disk
->private_data
= &tpnt
->driver
;
4118 disk
->queue
= SDp
->request_queue
;
4119 /* SCSI tape doesn't register this gendisk via add_disk(). Manually
4120 * take queue reference that release_disk() expects. */
4121 if (!blk_get_queue(disk
->queue
))
4123 tpnt
->driver
= &st_template
;
4126 if (SDp
->scsi_level
<= 2)
4127 tpnt
->tape_type
= MT_ISSCSI1
;
4129 tpnt
->tape_type
= MT_ISSCSI2
;
4131 tpnt
->buffer
= buffer
;
4132 tpnt
->buffer
->last_SRpnt
= NULL
;
4137 tpnt
->drv_buffer
= 1; /* Try buffering if no mode sense */
4138 tpnt
->restr_dma
= (SDp
->host
)->unchecked_isa_dma
;
4139 tpnt
->use_pf
= (SDp
->scsi_level
>= SCSI_2
);
4141 tpnt
->do_auto_lock
= ST_AUTO_LOCK
;
4142 tpnt
->can_bsr
= (SDp
->scsi_level
> 2 ? 1 : ST_IN_FILE_POS
); /* BSR mandatory in SCSI3 */
4143 tpnt
->can_partitions
= 0;
4144 tpnt
->two_fm
= ST_TWO_FM
;
4145 tpnt
->fast_mteom
= ST_FAST_MTEOM
;
4146 tpnt
->scsi2_logical
= ST_SCSI2LOGICAL
;
4147 tpnt
->sili
= ST_SILI
;
4148 tpnt
->immediate
= ST_NOWAIT
;
4149 tpnt
->immediate_filemark
= 0;
4150 tpnt
->default_drvbuffer
= 0xff; /* No forced buffering */
4151 tpnt
->partition
= 0;
4152 tpnt
->new_partition
= 0;
4153 tpnt
->nbr_partitions
= 0;
4154 blk_queue_rq_timeout(tpnt
->device
->request_queue
, ST_TIMEOUT
);
4155 tpnt
->long_timeout
= ST_LONG_TIMEOUT
;
4156 tpnt
->try_dio
= try_direct_io
&& !SDp
->host
->unchecked_isa_dma
;
4158 for (i
= 0; i
< ST_NBR_MODES
; i
++) {
4159 STm
= &(tpnt
->modes
[i
]);
4161 STm
->sysv
= ST_SYSV
;
4162 STm
->defaults_for_writes
= 0;
4163 STm
->do_async_writes
= ST_ASYNC_WRITES
;
4164 STm
->do_buffer_writes
= ST_BUFFER_WRITES
;
4165 STm
->do_read_ahead
= ST_READ_AHEAD
;
4166 STm
->default_compression
= ST_DONT_TOUCH
;
4167 STm
->default_blksize
= (-1); /* No forced size */
4168 STm
->default_density
= (-1); /* No forced density */
4172 for (i
= 0; i
< ST_NBR_PARTITIONS
; i
++) {
4173 STps
= &(tpnt
->ps
[i
]);
4175 STps
->eof
= ST_NOEOF
;
4177 STps
->last_block_valid
= 0;
4178 STps
->drv_block
= (-1);
4179 STps
->drv_file
= (-1);
4182 tpnt
->current_mode
= 0;
4183 tpnt
->modes
[0].defined
= 1;
4185 tpnt
->density_changed
= tpnt
->compression_changed
=
4186 tpnt
->blksize_changed
= 0;
4187 mutex_init(&tpnt
->lock
);
4189 idr_preload(GFP_KERNEL
);
4190 spin_lock(&st_index_lock
);
4191 error
= idr_alloc(&st_index_idr
, tpnt
, 0, ST_MAX_TAPES
+ 1, GFP_NOWAIT
);
4192 spin_unlock(&st_index_lock
);
4195 pr_warn("st: idr allocation failed: %d\n", error
);
4198 tpnt
->index
= error
;
4199 sprintf(disk
->disk_name
, "st%d", tpnt
->index
);
4201 dev_set_drvdata(dev
, tpnt
);
4204 error
= create_cdevs(tpnt
);
4206 goto out_remove_devs
;
4207 scsi_autopm_put_device(SDp
);
4209 sdev_printk(KERN_NOTICE
, SDp
,
4210 "Attached scsi tape %s\n", tape_name(tpnt
));
4211 sdev_printk(KERN_INFO
, SDp
, "%s: try direct i/o: %s (alignment %d B)\n",
4212 tape_name(tpnt
), tpnt
->try_dio
? "yes" : "no",
4213 queue_dma_alignment(SDp
->request_queue
) + 1);
4219 spin_lock(&st_index_lock
);
4220 idr_remove(&st_index_idr
, tpnt
->index
);
4221 spin_unlock(&st_index_lock
);
4223 blk_put_queue(disk
->queue
);
4234 static int st_remove(struct device
*dev
)
4236 struct scsi_tape
*tpnt
= dev_get_drvdata(dev
);
4237 int index
= tpnt
->index
;
4239 scsi_autopm_get_device(to_scsi_device(dev
));
4242 mutex_lock(&st_ref_mutex
);
4243 kref_put(&tpnt
->kref
, scsi_tape_release
);
4244 mutex_unlock(&st_ref_mutex
);
4245 spin_lock(&st_index_lock
);
4246 idr_remove(&st_index_idr
, index
);
4247 spin_unlock(&st_index_lock
);
4252 * scsi_tape_release - Called to free the Scsi_Tape structure
4253 * @kref: pointer to embedded kref
4255 * st_ref_mutex must be held entering this routine. Because it is
4256 * called on last put, you should always use the scsi_tape_get()
4257 * scsi_tape_put() helpers which manipulate the semaphore directly
4258 * and never do a direct kref_put().
4260 static void scsi_tape_release(struct kref
*kref
)
4262 struct scsi_tape
*tpnt
= to_scsi_tape(kref
);
4263 struct gendisk
*disk
= tpnt
->disk
;
4265 tpnt
->device
= NULL
;
4268 normalize_buffer(tpnt
->buffer
);
4269 kfree(tpnt
->buffer
->reserved_pages
);
4270 kfree(tpnt
->buffer
);
4273 disk
->private_data
= NULL
;
4279 static struct class st_sysfs_class
= {
4280 .name
= "scsi_tape",
4281 .dev_groups
= st_dev_groups
,
4284 static int __init
init_st(void)
4290 printk(KERN_INFO
"st: Version %s, fixed bufsize %d, s/g segs %d\n",
4291 verstr
, st_fixed_buffer_size
, st_max_sg_segs
);
4293 err
= class_register(&st_sysfs_class
);
4295 pr_err("Unable register sysfs class for SCSI tapes\n");
4299 err
= register_chrdev_region(MKDEV(SCSI_TAPE_MAJOR
, 0),
4300 ST_MAX_TAPE_ENTRIES
, "st");
4302 printk(KERN_ERR
"Unable to get major %d for SCSI tapes\n",
4307 err
= scsi_register_driver(&st_template
.gendrv
);
4311 err
= do_create_sysfs_files();
4318 scsi_unregister_driver(&st_template
.gendrv
);
4320 unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR
, 0),
4321 ST_MAX_TAPE_ENTRIES
);
4323 class_unregister(&st_sysfs_class
);
4327 static void __exit
exit_st(void)
4329 do_remove_sysfs_files();
4330 scsi_unregister_driver(&st_template
.gendrv
);
4331 unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR
, 0),
4332 ST_MAX_TAPE_ENTRIES
);
4333 class_unregister(&st_sysfs_class
);
4334 printk(KERN_INFO
"st: Unloaded.\n");
4337 module_init(init_st
);
4338 module_exit(exit_st
);
4341 /* The sysfs driver interface. Read-only at the moment */
4342 static ssize_t
st_try_direct_io_show(struct device_driver
*ddp
, char *buf
)
4344 return snprintf(buf
, PAGE_SIZE
, "%d\n", try_direct_io
);
4346 static DRIVER_ATTR(try_direct_io
, S_IRUGO
, st_try_direct_io_show
, NULL
);
4348 static ssize_t
st_fixed_buffer_size_show(struct device_driver
*ddp
, char *buf
)
4350 return snprintf(buf
, PAGE_SIZE
, "%d\n", st_fixed_buffer_size
);
4352 static DRIVER_ATTR(fixed_buffer_size
, S_IRUGO
, st_fixed_buffer_size_show
, NULL
);
4354 static ssize_t
st_max_sg_segs_show(struct device_driver
*ddp
, char *buf
)
4356 return snprintf(buf
, PAGE_SIZE
, "%d\n", st_max_sg_segs
);
4358 static DRIVER_ATTR(max_sg_segs
, S_IRUGO
, st_max_sg_segs_show
, NULL
);
4360 static ssize_t
st_version_show(struct device_driver
*ddd
, char *buf
)
4362 return snprintf(buf
, PAGE_SIZE
, "[%s]\n", verstr
);
4364 static DRIVER_ATTR(version
, S_IRUGO
, st_version_show
, NULL
);
4366 static int do_create_sysfs_files(void)
4368 struct device_driver
*sysfs
= &st_template
.gendrv
;
4371 err
= driver_create_file(sysfs
, &driver_attr_try_direct_io
);
4374 err
= driver_create_file(sysfs
, &driver_attr_fixed_buffer_size
);
4376 goto err_try_direct_io
;
4377 err
= driver_create_file(sysfs
, &driver_attr_max_sg_segs
);
4379 goto err_attr_fixed_buf
;
4380 err
= driver_create_file(sysfs
, &driver_attr_version
);
4382 goto err_attr_max_sg
;
4387 driver_remove_file(sysfs
, &driver_attr_max_sg_segs
);
4389 driver_remove_file(sysfs
, &driver_attr_fixed_buffer_size
);
4391 driver_remove_file(sysfs
, &driver_attr_try_direct_io
);
4395 static void do_remove_sysfs_files(void)
4397 struct device_driver
*sysfs
= &st_template
.gendrv
;
4399 driver_remove_file(sysfs
, &driver_attr_version
);
4400 driver_remove_file(sysfs
, &driver_attr_max_sg_segs
);
4401 driver_remove_file(sysfs
, &driver_attr_fixed_buffer_size
);
4402 driver_remove_file(sysfs
, &driver_attr_try_direct_io
);
4405 /* The sysfs simple class interface */
4407 defined_show(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
4409 struct st_modedef
*STm
= dev_get_drvdata(dev
);
4412 l
= snprintf(buf
, PAGE_SIZE
, "%d\n", STm
->defined
);
4415 static DEVICE_ATTR_RO(defined
);
4418 default_blksize_show(struct device
*dev
, struct device_attribute
*attr
,
4421 struct st_modedef
*STm
= dev_get_drvdata(dev
);
4424 l
= snprintf(buf
, PAGE_SIZE
, "%d\n", STm
->default_blksize
);
4427 static DEVICE_ATTR_RO(default_blksize
);
4430 default_density_show(struct device
*dev
, struct device_attribute
*attr
,
4433 struct st_modedef
*STm
= dev_get_drvdata(dev
);
4437 fmt
= STm
->default_density
>= 0 ? "0x%02x\n" : "%d\n";
4438 l
= snprintf(buf
, PAGE_SIZE
, fmt
, STm
->default_density
);
4441 static DEVICE_ATTR_RO(default_density
);
4444 default_compression_show(struct device
*dev
, struct device_attribute
*attr
,
4447 struct st_modedef
*STm
= dev_get_drvdata(dev
);
4450 l
= snprintf(buf
, PAGE_SIZE
, "%d\n", STm
->default_compression
- 1);
4453 static DEVICE_ATTR_RO(default_compression
);
4456 options_show(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
4458 struct st_modedef
*STm
= dev_get_drvdata(dev
);
4459 struct scsi_tape
*STp
= STm
->tape
;
4463 options
= STm
->do_buffer_writes
? MT_ST_BUFFER_WRITES
: 0;
4464 options
|= STm
->do_async_writes
? MT_ST_ASYNC_WRITES
: 0;
4465 options
|= STm
->do_read_ahead
? MT_ST_READ_AHEAD
: 0;
4466 DEB( options
|= debugging
? MT_ST_DEBUGGING
: 0 );
4467 options
|= STp
->two_fm
? MT_ST_TWO_FM
: 0;
4468 options
|= STp
->fast_mteom
? MT_ST_FAST_MTEOM
: 0;
4469 options
|= STm
->defaults_for_writes
? MT_ST_DEF_WRITES
: 0;
4470 options
|= STp
->can_bsr
? MT_ST_CAN_BSR
: 0;
4471 options
|= STp
->omit_blklims
? MT_ST_NO_BLKLIMS
: 0;
4472 options
|= STp
->can_partitions
? MT_ST_CAN_PARTITIONS
: 0;
4473 options
|= STp
->scsi2_logical
? MT_ST_SCSI2LOGICAL
: 0;
4474 options
|= STm
->sysv
? MT_ST_SYSV
: 0;
4475 options
|= STp
->immediate
? MT_ST_NOWAIT
: 0;
4476 options
|= STp
->immediate_filemark
? MT_ST_NOWAIT_EOF
: 0;
4477 options
|= STp
->sili
? MT_ST_SILI
: 0;
4479 l
= snprintf(buf
, PAGE_SIZE
, "0x%08x\n", options
);
4482 static DEVICE_ATTR_RO(options
);
4484 static struct attribute
*st_dev_attrs
[] = {
4485 &dev_attr_defined
.attr
,
4486 &dev_attr_default_blksize
.attr
,
4487 &dev_attr_default_density
.attr
,
4488 &dev_attr_default_compression
.attr
,
4489 &dev_attr_options
.attr
,
4492 ATTRIBUTE_GROUPS(st_dev
);
4494 /* The following functions may be useful for a larger audience. */
4495 static int sgl_map_user_pages(struct st_buffer
*STbp
,
4496 const unsigned int max_pages
, unsigned long uaddr
,
4497 size_t count
, int rw
)
4499 unsigned long end
= (uaddr
+ count
+ PAGE_SIZE
- 1) >> PAGE_SHIFT
;
4500 unsigned long start
= uaddr
>> PAGE_SHIFT
;
4501 const int nr_pages
= end
- start
;
4503 struct page
**pages
;
4504 struct rq_map_data
*mdata
= &STbp
->map_data
;
4506 /* User attempted Overflow! */
4507 if ((uaddr
+ count
) < uaddr
)
4511 if (nr_pages
> max_pages
)
4518 if ((pages
= kmalloc(max_pages
* sizeof(*pages
), GFP_KERNEL
)) == NULL
)
4521 /* Try to fault in all of the necessary pages */
4522 down_read(¤t
->mm
->mmap_sem
);
4523 /* rw==READ means read from drive, write into memory area */
4524 res
= get_user_pages(
4530 0, /* don't force */
4533 up_read(¤t
->mm
->mmap_sem
);
4535 /* Errors and no page mapped should return here */
4539 for (i
=0; i
< nr_pages
; i
++) {
4540 /* FIXME: flush superflous for rw==READ,
4541 * probably wrong function for rw==WRITE
4543 flush_dcache_page(pages
[i
]);
4546 mdata
->offset
= uaddr
& ~PAGE_MASK
;
4547 STbp
->mapped_pages
= pages
;
4552 for (j
=0; j
< res
; j
++)
4553 page_cache_release(pages
[j
]);
4561 /* And unmap them... */
4562 static int sgl_unmap_user_pages(struct st_buffer
*STbp
,
4563 const unsigned int nr_pages
, int dirtied
)
4567 for (i
=0; i
< nr_pages
; i
++) {
4568 struct page
*page
= STbp
->mapped_pages
[i
];
4572 /* FIXME: cache flush missing for rw==READ
4573 * FIXME: call the correct reference counting function
4575 page_cache_release(page
);
4577 kfree(STbp
->mapped_pages
);
4578 STbp
->mapped_pages
= NULL
;