1 // SPDX-License-Identifier: GPL-2.0-only
3 SCSI Tape Driver for Linux version 1.1 and newer. See the accompanying
4 file Documentation/scsi/st.rst for more information.
7 Rewritten from Dwayne Forsyth's SCSI tape driver by Kai Makisara.
8 Contribution and ideas from several people including (in alphabetical
9 order) Klaus Ehrenfried, Eugene Exarevsky, Eric Lee Green, Wolfgang Denk,
10 Steve Hirsch, Andreas Koppenh"ofer, Michael Leodolter, Eyal Lebedinsky,
11 Michael Schaefer, J"org Weule, and Eric Youngdale.
13 Copyright 1992 - 2016 Kai Makisara
14 email Kai.Makisara@kolumbus.fi
16 Some small formal changes - aeb, 950809
18 Last modified: 18-JAN-1998 Richard Gooch <rgooch@atnf.csiro.au> Devfs support
21 static const char *verstr = "20160209";
23 #include <linux/module.h>
25 #include <linux/compat.h>
27 #include <linux/kernel.h>
28 #include <linux/sched/signal.h>
30 #include <linux/init.h>
31 #include <linux/string.h>
32 #include <linux/slab.h>
33 #include <linux/errno.h>
34 #include <linux/mtio.h>
35 #include <linux/major.h>
36 #include <linux/cdrom.h>
37 #include <linux/ioctl.h>
38 #include <linux/fcntl.h>
39 #include <linux/spinlock.h>
40 #include <linux/blkdev.h>
41 #include <linux/moduleparam.h>
42 #include <linux/cdev.h>
43 #include <linux/idr.h>
44 #include <linux/delay.h>
45 #include <linux/mutex.h>
47 #include <linux/uaccess.h>
49 #include <asm/unaligned.h>
51 #include <scsi/scsi.h>
52 #include <scsi/scsi_dbg.h>
53 #include <scsi/scsi_device.h>
54 #include <scsi/scsi_driver.h>
55 #include <scsi/scsi_eh.h>
56 #include <scsi/scsi_host.h>
57 #include <scsi/scsi_ioctl.h>
61 /* The driver prints some debugging information on the console if DEBUG
62 is defined and non-zero. */
66 #define ST_DEB_MSG KERN_NOTICE
68 /* The message level for the debug messages is currently set to KERN_NOTICE
69 so that people can easily see the messages. Later when the debugging messages
70 in the drivers are more widely classified, this may be changed to KERN_DEBUG. */
72 #define DEBC(a) if (debugging) { a ; }
78 #define ST_KILOBYTE 1024
80 #include "st_options.h"
83 static int buffer_kbs;
84 static int max_sg_segs;
85 static int try_direct_io = TRY_DIRECT_IO;
86 static int try_rdio = 1;
87 static int try_wdio = 1;
88 static int debug_flag;
90 static struct class st_sysfs_class;
91 static const struct attribute_group *st_dev_groups[];
92 static const struct attribute_group *st_drv_groups[];
94 MODULE_AUTHOR("Kai Makisara");
95 MODULE_DESCRIPTION("SCSI tape (st) driver");
96 MODULE_LICENSE("GPL");
97 MODULE_ALIAS_CHARDEV_MAJOR(SCSI_TAPE_MAJOR);
98 MODULE_ALIAS_SCSI_DEVICE(TYPE_TAPE);
100 /* Set 'perm' (4th argument) to 0 to disable module_param's definition
101 * of sysfs parameters (which module_param doesn't yet support).
102 * Sysfs parameters defined explicitly later.
104 module_param_named(buffer_kbs, buffer_kbs, int, 0);
105 MODULE_PARM_DESC(buffer_kbs, "Default driver buffer size for fixed block mode (KB; 32)");
106 module_param_named(max_sg_segs, max_sg_segs, int, 0);
107 MODULE_PARM_DESC(max_sg_segs, "Maximum number of scatter/gather segments to use (256)");
108 module_param_named(try_direct_io, try_direct_io, int, 0);
109 MODULE_PARM_DESC(try_direct_io, "Try direct I/O between user buffer and tape drive (1)");
110 module_param_named(debug_flag, debug_flag, int, 0);
111 MODULE_PARM_DESC(debug_flag, "Enable DEBUG, same as setting debugging=1");
114 /* Extra parameters for testing */
115 module_param_named(try_rdio, try_rdio, int, 0);
116 MODULE_PARM_DESC(try_rdio, "Try direct read i/o when possible");
117 module_param_named(try_wdio, try_wdio, int, 0);
118 MODULE_PARM_DESC(try_wdio, "Try direct write i/o when possible");
121 static int write_threshold_kbs; /* retained for compatibility */
122 static struct st_dev_parm {
125 } parms[] __initdata = {
127 "buffer_kbs", &buffer_kbs
129 { /* Retained for compatibility with 2.4 */
130 "write_threshold_kbs", &write_threshold_kbs
136 "try_direct_io", &try_direct_io
139 "debug_flag", &debug_flag
144 /* Restrict the number of modes so that names for all are assigned */
145 #if ST_NBR_MODES > 16
146 #error "Maximum number of modes is 16"
148 /* Bit reversed order to get same names for same minors with all
150 static const char *st_formats[] = {
151 "", "r", "k", "s", "l", "t", "o", "u",
152 "m", "v", "p", "x", "a", "y", "q", "z"};
154 /* The default definitions have been moved to st_options.h */
156 #define ST_FIXED_BUFFER_SIZE (ST_FIXED_BUFFER_BLOCKS * ST_KILOBYTE)
158 /* The buffer size should fit into the 24 bits for length in the
159 6-byte SCSI read and write commands. */
160 #if ST_FIXED_BUFFER_SIZE >= (2 << 24 - 1)
161 #error "Buffer size should not exceed (2 << 24 - 1) bytes!"
164 static int debugging = DEBUG;
166 #define MAX_RETRIES 0
167 #define MAX_WRITE_RETRIES 0
168 #define MAX_READY_RETRIES 0
169 #define NO_TAPE NOT_READY
171 #define ST_TIMEOUT (900 * HZ)
172 #define ST_LONG_TIMEOUT (14000 * HZ)
174 /* Remove mode bits and auto-rewind bit (7) */
175 #define TAPE_NR(x) ( ((iminor(x) & ~255) >> (ST_NBR_MODE_BITS + 1)) | \
176 (iminor(x) & ((1 << ST_MODE_SHIFT)-1)))
177 #define TAPE_MODE(x) ((iminor(x) & ST_MODE_MASK) >> ST_MODE_SHIFT)
179 /* Construct the minor number from the device (d), mode (m), and non-rewind (n) data */
180 #define TAPE_MINOR(d, m, n) (((d & ~(255 >> (ST_NBR_MODE_BITS + 1))) << (ST_NBR_MODE_BITS + 1)) | \
181 (d & (255 >> (ST_NBR_MODE_BITS + 1))) | (m << ST_MODE_SHIFT) | ((n != 0) << 7) )
183 /* Internal ioctl to set both density (uppermost 8 bits) and blocksize (lower
185 #define SET_DENS_AND_BLK 0x10001
187 static int st_fixed_buffer_size = ST_FIXED_BUFFER_SIZE;
188 static int st_max_sg_segs = ST_MAX_SG;
190 static int modes_defined;
192 static int enlarge_buffer(struct st_buffer *, int);
193 static void clear_buffer(struct st_buffer *);
194 static void normalize_buffer(struct st_buffer *);
195 static int append_to_buffer(const char __user *, struct st_buffer *, int);
196 static int from_buffer(struct st_buffer *, char __user *, int);
197 static void move_buffer_data(struct st_buffer *, int);
199 static int sgl_map_user_pages(struct st_buffer *, const unsigned int,
200 unsigned long, size_t, int);
201 static int sgl_unmap_user_pages(struct st_buffer *, const unsigned int, int);
203 static int st_probe(struct device *);
204 static int st_remove(struct device *);
206 static struct scsi_driver st_template = {
209 .owner = THIS_MODULE,
212 .groups = st_drv_groups,
216 static int st_compression(struct scsi_tape *, int);
218 static int find_partition(struct scsi_tape *);
219 static int switch_partition(struct scsi_tape *);
221 static int st_int_ioctl(struct scsi_tape *, unsigned int, unsigned long);
223 static void scsi_tape_release(struct kref *);
225 #define to_scsi_tape(obj) container_of(obj, struct scsi_tape, kref)
227 static DEFINE_MUTEX(st_ref_mutex);
228 static DEFINE_SPINLOCK(st_index_lock);
229 static DEFINE_SPINLOCK(st_use_lock);
230 static DEFINE_IDR(st_index_idr);
234 #ifndef SIGS_FROM_OSST
235 #define SIGS_FROM_OSST \
236 {"OnStream", "SC-", "", "osst"}, \
237 {"OnStream", "DI-", "", "osst"}, \
238 {"OnStream", "DP-", "", "osst"}, \
239 {"OnStream", "USB", "", "osst"}, \
240 {"OnStream", "FW-", "", "osst"}
243 static struct scsi_tape *scsi_tape_get(int dev)
245 struct scsi_tape *STp = NULL;
247 mutex_lock(&st_ref_mutex);
248 spin_lock(&st_index_lock);
250 STp = idr_find(&st_index_idr, dev);
253 kref_get(&STp->kref);
258 if (scsi_device_get(STp->device))
264 kref_put(&STp->kref, scsi_tape_release);
267 spin_unlock(&st_index_lock);
268 mutex_unlock(&st_ref_mutex);
272 static void scsi_tape_put(struct scsi_tape *STp)
274 struct scsi_device *sdev = STp->device;
276 mutex_lock(&st_ref_mutex);
277 kref_put(&STp->kref, scsi_tape_release);
278 scsi_device_put(sdev);
279 mutex_unlock(&st_ref_mutex);
282 struct st_reject_data {
286 char *driver_hint; /* Name of the correct driver, NULL if unknown */
289 static struct st_reject_data reject_list[] = {
290 /* {"XXX", "Yy-", "", NULL}, example */
294 /* If the device signature is on the list of incompatible drives, the
295 function returns a pointer to the name of the correct driver (if known) */
296 static char * st_incompatible(struct scsi_device* SDp)
298 struct st_reject_data *rp;
300 for (rp=&(reject_list[0]); rp->vendor != NULL; rp++)
301 if (!strncmp(rp->vendor, SDp->vendor, strlen(rp->vendor)) &&
302 !strncmp(rp->model, SDp->model, strlen(rp->model)) &&
303 !strncmp(rp->rev, SDp->rev, strlen(rp->rev))) {
305 return rp->driver_hint;
313 #define st_printk(prefix, t, fmt, a...) \
314 sdev_prefix_printk(prefix, (t)->device, (t)->name, fmt, ##a)
316 #define DEBC_printk(t, fmt, a...) \
317 if (debugging) { st_printk(ST_DEB_MSG, t, fmt, ##a ); }
319 #define DEBC_printk(t, fmt, a...)
322 static void st_analyze_sense(struct st_request *SRpnt, struct st_cmdstatus *s)
325 const u8 *sense = SRpnt->sense;
327 s->have_sense = scsi_normalize_sense(SRpnt->sense,
328 SCSI_SENSE_BUFFERSIZE, &s->sense_hdr);
334 scsi_get_sense_info_fld(sense, SCSI_SENSE_BUFFERSIZE, &s->uremainder64);
335 switch (sense[0] & 0x7f) {
341 s->flags = sense[2] & 0xe0;
348 ucp = scsi_sense_desc_find(sense, SCSI_SENSE_BUFFERSIZE, 4);
349 s->flags = ucp ? (ucp[3] & 0xe0) : 0;
356 /* Convert the result to success code */
357 static int st_chk_result(struct scsi_tape *STp, struct st_request * SRpnt)
359 int result = SRpnt->result;
361 DEB(const char *stp;)
362 char *name = STp->name;
363 struct st_cmdstatus *cmdstatp;
368 cmdstatp = &STp->buffer->cmdstat;
369 st_analyze_sense(SRpnt, cmdstatp);
371 if (cmdstatp->have_sense)
372 scode = STp->buffer->cmdstat.sense_hdr.sense_key;
378 st_printk(ST_DEB_MSG, STp,
379 "Error: %x, cmd: %x %x %x %x %x %x\n", result,
380 SRpnt->cmd[0], SRpnt->cmd[1], SRpnt->cmd[2],
381 SRpnt->cmd[3], SRpnt->cmd[4], SRpnt->cmd[5]);
382 if (cmdstatp->have_sense)
383 __scsi_print_sense(STp->device, name,
384 SRpnt->sense, SCSI_SENSE_BUFFERSIZE);
386 if (!debugging) { /* Abnormal conditions for tape */
387 if (!cmdstatp->have_sense)
388 st_printk(KERN_WARNING, STp,
389 "Error %x (driver bt 0, host bt 0x%x).\n",
390 result, host_byte(result));
391 else if (cmdstatp->have_sense &&
393 scode != RECOVERED_ERROR &&
394 /* scode != UNIT_ATTENTION && */
395 scode != BLANK_CHECK &&
396 scode != VOLUME_OVERFLOW &&
397 SRpnt->cmd[0] != MODE_SENSE &&
398 SRpnt->cmd[0] != TEST_UNIT_READY) {
400 __scsi_print_sense(STp->device, name,
401 SRpnt->sense, SCSI_SENSE_BUFFERSIZE);
405 if (cmdstatp->fixed_format &&
406 STp->cln_mode >= EXTENDED_SENSE_START) { /* Only fixed format sense */
407 if (STp->cln_sense_value)
408 STp->cleaning_req |= ((SRpnt->sense[STp->cln_mode] &
409 STp->cln_sense_mask) == STp->cln_sense_value);
411 STp->cleaning_req |= ((SRpnt->sense[STp->cln_mode] &
412 STp->cln_sense_mask) != 0);
414 if (cmdstatp->have_sense &&
415 cmdstatp->sense_hdr.asc == 0 && cmdstatp->sense_hdr.ascq == 0x17)
416 STp->cleaning_req = 1; /* ASC and ASCQ => cleaning requested */
418 STp->pos_unknown |= STp->device->was_reset;
420 if (cmdstatp->have_sense &&
421 scode == RECOVERED_ERROR
422 #if ST_RECOVERED_WRITE_FATAL
423 && SRpnt->cmd[0] != WRITE_6
424 && SRpnt->cmd[0] != WRITE_FILEMARKS
427 STp->recover_count++;
432 if (SRpnt->cmd[0] == READ_6)
434 else if (SRpnt->cmd[0] == WRITE_6)
438 st_printk(ST_DEB_MSG, STp,
439 "Recovered %s error (%d).\n",
440 stp, STp->recover_count);
443 if (cmdstatp->flags == 0)
449 static struct st_request *st_allocate_request(struct scsi_tape *stp)
451 struct st_request *streq;
453 streq = kzalloc(sizeof(*streq), GFP_KERNEL);
457 st_printk(KERN_ERR, stp,
458 "Can't get SCSI request.\n");
459 if (signal_pending(current))
460 stp->buffer->syscall_result = -EINTR;
462 stp->buffer->syscall_result = -EBUSY;
468 static void st_release_request(struct st_request *streq)
473 static void st_do_stats(struct scsi_tape *STp, struct request *req)
475 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(req);
479 if (scmd->cmnd[0] == WRITE_6) {
480 now = ktime_sub(now, STp->stats->write_time);
481 atomic64_add(ktime_to_ns(now), &STp->stats->tot_write_time);
482 atomic64_add(ktime_to_ns(now), &STp->stats->tot_io_time);
483 atomic64_inc(&STp->stats->write_cnt);
485 atomic64_add(atomic_read(&STp->stats->last_write_size)
486 - STp->buffer->cmdstat.residual,
487 &STp->stats->write_byte_cnt);
488 if (STp->buffer->cmdstat.residual > 0)
489 atomic64_inc(&STp->stats->resid_cnt);
491 atomic64_add(atomic_read(&STp->stats->last_write_size),
492 &STp->stats->write_byte_cnt);
493 } else if (scmd->cmnd[0] == READ_6) {
494 now = ktime_sub(now, STp->stats->read_time);
495 atomic64_add(ktime_to_ns(now), &STp->stats->tot_read_time);
496 atomic64_add(ktime_to_ns(now), &STp->stats->tot_io_time);
497 atomic64_inc(&STp->stats->read_cnt);
499 atomic64_add(atomic_read(&STp->stats->last_read_size)
500 - STp->buffer->cmdstat.residual,
501 &STp->stats->read_byte_cnt);
502 if (STp->buffer->cmdstat.residual > 0)
503 atomic64_inc(&STp->stats->resid_cnt);
505 atomic64_add(atomic_read(&STp->stats->last_read_size),
506 &STp->stats->read_byte_cnt);
508 now = ktime_sub(now, STp->stats->other_time);
509 atomic64_add(ktime_to_ns(now), &STp->stats->tot_io_time);
510 atomic64_inc(&STp->stats->other_cnt);
512 atomic64_dec(&STp->stats->in_flight);
515 static void st_scsi_execute_end(struct request *req, blk_status_t status)
517 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(req);
518 struct st_request *SRpnt = req->end_io_data;
519 struct scsi_tape *STp = SRpnt->stp;
522 STp->buffer->cmdstat.midlevel_result = SRpnt->result = scmd->result;
523 STp->buffer->cmdstat.residual = scmd->resid_len;
525 st_do_stats(STp, req);
529 memcpy(SRpnt->sense, scmd->sense_buffer, SCSI_SENSE_BUFFERSIZE);
531 complete(SRpnt->waiting);
533 blk_rq_unmap_user(tmp);
534 blk_mq_free_request(req);
537 static int st_scsi_execute(struct st_request *SRpnt, const unsigned char *cmd,
538 int data_direction, void *buffer, unsigned bufflen,
539 int timeout, int retries)
542 struct rq_map_data *mdata = &SRpnt->stp->buffer->map_data;
544 struct scsi_tape *STp = SRpnt->stp;
545 struct scsi_cmnd *scmd;
547 req = scsi_alloc_request(SRpnt->stp->device->request_queue,
548 data_direction == DMA_TO_DEVICE ?
549 REQ_OP_DRV_OUT : REQ_OP_DRV_IN, 0);
552 scmd = blk_mq_rq_to_pdu(req);
553 req->rq_flags |= RQF_QUIET;
555 mdata->null_mapped = 1;
558 err = blk_rq_map_user(req->q, req, mdata, NULL, bufflen,
561 blk_mq_free_request(req);
566 atomic64_inc(&STp->stats->in_flight);
567 if (cmd[0] == WRITE_6) {
568 atomic_set(&STp->stats->last_write_size, bufflen);
569 STp->stats->write_time = ktime_get();
570 } else if (cmd[0] == READ_6) {
571 atomic_set(&STp->stats->last_read_size, bufflen);
572 STp->stats->read_time = ktime_get();
574 STp->stats->other_time = ktime_get();
577 SRpnt->bio = req->bio;
578 scmd->cmd_len = COMMAND_SIZE(cmd[0]);
579 memcpy(scmd->cmnd, cmd, scmd->cmd_len);
580 req->timeout = timeout;
581 scmd->allowed = retries;
582 req->end_io = st_scsi_execute_end;
583 req->end_io_data = SRpnt;
585 blk_execute_rq_nowait(req, true);
589 /* Do the scsi command. Waits until command performed if do_wait is true.
590 Otherwise write_behind_check() is used to check that the command
592 static struct st_request *
593 st_do_scsi(struct st_request * SRpnt, struct scsi_tape * STp, unsigned char *cmd,
594 int bytes, int direction, int timeout, int retries, int do_wait)
596 struct completion *waiting;
597 struct rq_map_data *mdata = &STp->buffer->map_data;
600 /* if async, make sure there's no command outstanding */
601 if (!do_wait && ((STp->buffer)->last_SRpnt)) {
602 st_printk(KERN_ERR, STp,
603 "Async command already active.\n");
604 if (signal_pending(current))
605 (STp->buffer)->syscall_result = (-EINTR);
607 (STp->buffer)->syscall_result = (-EBUSY);
612 SRpnt = st_allocate_request(STp);
617 /* If async IO, set last_SRpnt. This ptr tells write_behind_check
618 which IO is outstanding. It's nulled out when the IO completes. */
620 (STp->buffer)->last_SRpnt = SRpnt;
622 waiting = &STp->wait;
623 init_completion(waiting);
624 SRpnt->waiting = waiting;
626 if (STp->buffer->do_dio) {
627 mdata->page_order = 0;
628 mdata->nr_entries = STp->buffer->sg_segs;
629 mdata->pages = STp->buffer->mapped_pages;
631 mdata->page_order = STp->buffer->reserved_page_order;
633 DIV_ROUND_UP(bytes, PAGE_SIZE << mdata->page_order);
634 mdata->pages = STp->buffer->reserved_pages;
638 memcpy(SRpnt->cmd, cmd, sizeof(SRpnt->cmd));
639 STp->buffer->cmdstat.have_sense = 0;
640 STp->buffer->syscall_result = 0;
642 ret = st_scsi_execute(SRpnt, cmd, direction, NULL, bytes, timeout,
645 /* could not allocate the buffer or request was too large */
646 (STp->buffer)->syscall_result = (-EBUSY);
647 (STp->buffer)->last_SRpnt = NULL;
648 } else if (do_wait) {
649 wait_for_completion(waiting);
650 SRpnt->waiting = NULL;
651 (STp->buffer)->syscall_result = st_chk_result(STp, SRpnt);
658 /* Handle the write-behind checking (waits for completion). Returns -ENOSPC if
659 write has been correct but EOM early warning reached, -EIO if write ended in
660 error or zero if write successful. Asynchronous writes are used only in
661 variable block mode. */
662 static int write_behind_check(struct scsi_tape * STp)
665 struct st_buffer *STbuffer;
666 struct st_partstat *STps;
667 struct st_cmdstatus *cmdstatp;
668 struct st_request *SRpnt;
670 STbuffer = STp->buffer;
671 if (!STbuffer->writing)
675 if (STp->write_pending)
681 wait_for_completion(&(STp->wait));
682 SRpnt = STbuffer->last_SRpnt;
683 STbuffer->last_SRpnt = NULL;
684 SRpnt->waiting = NULL;
686 (STp->buffer)->syscall_result = st_chk_result(STp, SRpnt);
687 st_release_request(SRpnt);
689 STbuffer->buffer_bytes -= STbuffer->writing;
690 STps = &(STp->ps[STp->partition]);
691 if (STps->drv_block >= 0) {
692 if (STp->block_size == 0)
695 STps->drv_block += STbuffer->writing / STp->block_size;
698 cmdstatp = &STbuffer->cmdstat;
699 if (STbuffer->syscall_result) {
701 if (cmdstatp->have_sense && !cmdstatp->deferred &&
702 (cmdstatp->flags & SENSE_EOM) &&
703 (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
704 cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR)) {
705 /* EOM at write-behind, has all data been written? */
706 if (!cmdstatp->remainder_valid ||
707 cmdstatp->uremainder64 == 0)
711 STps->drv_block = -1;
713 STbuffer->writing = 0;
715 DEB(if (debugging && retval)
716 st_printk(ST_DEB_MSG, STp,
717 "Async write error %x, return value %d.\n",
718 STbuffer->cmdstat.midlevel_result, retval);) /* end DEB */
724 /* Step over EOF if it has been inadvertently crossed (ioctl not used because
725 it messes up the block number). */
726 static int cross_eof(struct scsi_tape * STp, int forward)
728 struct st_request *SRpnt;
729 unsigned char cmd[MAX_COMMAND_SIZE];
732 cmd[1] = 0x01; /* Space FileMarks */
737 cmd[2] = cmd[3] = cmd[4] = 0xff; /* -1 filemarks */
740 DEBC_printk(STp, "Stepping over filemark %s.\n",
741 forward ? "forward" : "backward");
743 SRpnt = st_do_scsi(NULL, STp, cmd, 0, DMA_NONE,
744 STp->device->request_queue->rq_timeout,
747 return (STp->buffer)->syscall_result;
749 st_release_request(SRpnt);
752 if ((STp->buffer)->cmdstat.midlevel_result != 0)
753 st_printk(KERN_ERR, STp,
754 "Stepping over filemark %s failed.\n",
755 forward ? "forward" : "backward");
757 return (STp->buffer)->syscall_result;
761 /* Flush the write buffer (never need to write if variable blocksize). */
762 static int st_flush_write_buffer(struct scsi_tape * STp)
766 unsigned char cmd[MAX_COMMAND_SIZE];
767 struct st_request *SRpnt;
768 struct st_partstat *STps;
770 result = write_behind_check(STp);
775 if (STp->dirty == 1) {
777 transfer = STp->buffer->buffer_bytes;
778 DEBC_printk(STp, "Flushing %d bytes.\n", transfer);
780 memset(cmd, 0, MAX_COMMAND_SIZE);
783 blks = transfer / STp->block_size;
788 SRpnt = st_do_scsi(NULL, STp, cmd, transfer, DMA_TO_DEVICE,
789 STp->device->request_queue->rq_timeout,
790 MAX_WRITE_RETRIES, 1);
792 return (STp->buffer)->syscall_result;
794 STps = &(STp->ps[STp->partition]);
795 if ((STp->buffer)->syscall_result != 0) {
796 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
798 if (cmdstatp->have_sense && !cmdstatp->deferred &&
799 (cmdstatp->flags & SENSE_EOM) &&
800 (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
801 cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) &&
802 (!cmdstatp->remainder_valid ||
803 cmdstatp->uremainder64 == 0)) { /* All written at EOM early warning */
805 (STp->buffer)->buffer_bytes = 0;
806 if (STps->drv_block >= 0)
807 STps->drv_block += blks;
810 st_printk(KERN_ERR, STp, "Error on flush.\n");
811 STps->drv_block = (-1);
815 if (STps->drv_block >= 0)
816 STps->drv_block += blks;
818 (STp->buffer)->buffer_bytes = 0;
820 st_release_request(SRpnt);
827 /* Flush the tape buffer. The tape will be positioned correctly unless
828 seek_next is true. */
829 static int flush_buffer(struct scsi_tape *STp, int seek_next)
831 int backspace, result;
832 struct st_partstat *STps;
835 * If there was a bus reset, block further access
838 if (STp->pos_unknown)
841 if (STp->ready != ST_READY)
843 STps = &(STp->ps[STp->partition]);
844 if (STps->rw == ST_WRITING) /* Writing */
845 return st_flush_write_buffer(STp);
847 if (STp->block_size == 0)
850 backspace = ((STp->buffer)->buffer_bytes +
851 (STp->buffer)->read_pointer) / STp->block_size -
852 ((STp->buffer)->read_pointer + STp->block_size - 1) /
854 (STp->buffer)->buffer_bytes = 0;
855 (STp->buffer)->read_pointer = 0;
858 if (STps->eof == ST_FM_HIT) {
859 result = cross_eof(STp, 0); /* Back over the EOF hit */
861 STps->eof = ST_NOEOF;
863 if (STps->drv_file >= 0)
868 if (!result && backspace > 0)
869 result = st_int_ioctl(STp, MTBSR, backspace);
870 } else if (STps->eof == ST_FM_HIT) {
871 if (STps->drv_file >= 0)
874 STps->eof = ST_NOEOF;
880 /* Set the mode parameters */
881 static int set_mode_densblk(struct scsi_tape * STp, struct st_modedef * STm)
886 if (!STp->density_changed &&
887 STm->default_density >= 0 &&
888 STm->default_density != STp->density) {
889 arg = STm->default_density;
893 arg <<= MT_ST_DENSITY_SHIFT;
894 if (!STp->blksize_changed &&
895 STm->default_blksize >= 0 &&
896 STm->default_blksize != STp->block_size) {
897 arg |= STm->default_blksize;
900 arg |= STp->block_size;
902 st_int_ioctl(STp, SET_DENS_AND_BLK, arg)) {
903 st_printk(KERN_WARNING, STp,
904 "Can't set default block size to %d bytes "
906 STm->default_blksize, STm->default_density);
914 /* Lock or unlock the drive door. Don't use when st_request allocated. */
915 static int do_door_lock(struct scsi_tape * STp, int do_lock)
919 DEBC_printk(STp, "%socking drive door.\n", do_lock ? "L" : "Unl");
921 retval = scsi_set_medium_removal(STp->device,
922 do_lock ? SCSI_REMOVAL_PREVENT : SCSI_REMOVAL_ALLOW);
924 STp->door_locked = do_lock ? ST_LOCKED_EXPLICIT : ST_UNLOCKED;
926 STp->door_locked = ST_LOCK_FAILS;
931 /* Set the internal state after reset */
932 static void reset_state(struct scsi_tape *STp)
935 struct st_partstat *STps;
937 STp->pos_unknown = 0;
938 for (i = 0; i < ST_NBR_PARTITIONS; i++) {
939 STps = &(STp->ps[i]);
941 STps->eof = ST_NOEOF;
943 STps->last_block_valid = 0;
944 STps->drv_block = -1;
947 if (STp->can_partitions) {
948 STp->partition = find_partition(STp);
949 if (STp->partition < 0)
951 STp->new_partition = STp->partition;
955 /* Test if the drive is ready. Returns either one of the codes below or a negative system
957 #define CHKRES_READY 0
958 #define CHKRES_NEW_SESSION 1
959 #define CHKRES_NOT_READY 2
960 #define CHKRES_NO_TAPE 3
962 #define MAX_ATTENTIONS 10
964 static int test_ready(struct scsi_tape *STp, int do_wait)
966 int attentions, waits, max_wait, scode;
967 int retval = CHKRES_READY, new_session = 0;
968 unsigned char cmd[MAX_COMMAND_SIZE];
969 struct st_request *SRpnt = NULL;
970 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
972 max_wait = do_wait ? ST_BLOCK_SECONDS : 0;
974 for (attentions=waits=0; ; ) {
975 memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE);
976 cmd[0] = TEST_UNIT_READY;
977 SRpnt = st_do_scsi(SRpnt, STp, cmd, 0, DMA_NONE,
978 STp->long_timeout, MAX_READY_RETRIES, 1);
981 retval = (STp->buffer)->syscall_result;
985 if (cmdstatp->have_sense) {
987 scode = cmdstatp->sense_hdr.sense_key;
989 if (scode == UNIT_ATTENTION) { /* New media? */
991 if (attentions < MAX_ATTENTIONS) {
1001 if (scode == NOT_READY) {
1002 if (waits < max_wait) {
1003 if (msleep_interruptible(1000)) {
1011 if ((STp->device)->scsi_level >= SCSI_2 &&
1012 cmdstatp->sense_hdr.asc == 0x3a) /* Check ASC */
1013 retval = CHKRES_NO_TAPE;
1015 retval = CHKRES_NOT_READY;
1021 retval = (STp->buffer)->syscall_result;
1023 retval = new_session ? CHKRES_NEW_SESSION : CHKRES_READY;
1028 st_release_request(SRpnt);
1033 /* See if the drive is ready and gather information about the tape. Return values:
1034 < 0 negative error code from errno.h
1036 1 drive not ready (possibly no tape)
1038 static int check_tape(struct scsi_tape *STp, struct file *filp)
1040 int i, retval, new_session = 0, do_wait;
1041 unsigned char cmd[MAX_COMMAND_SIZE], saved_cleaning;
1042 unsigned short st_flags = filp->f_flags;
1043 struct st_request *SRpnt = NULL;
1044 struct st_modedef *STm;
1045 struct st_partstat *STps;
1046 struct inode *inode = file_inode(filp);
1047 int mode = TAPE_MODE(inode);
1049 STp->ready = ST_READY;
1051 if (mode != STp->current_mode) {
1052 DEBC_printk(STp, "Mode change from %d to %d.\n",
1053 STp->current_mode, mode);
1055 STp->current_mode = mode;
1057 STm = &(STp->modes[STp->current_mode]);
1059 saved_cleaning = STp->cleaning_req;
1060 STp->cleaning_req = 0;
1062 do_wait = ((filp->f_flags & O_NONBLOCK) == 0);
1063 retval = test_ready(STp, do_wait);
1068 if (retval == CHKRES_NEW_SESSION) {
1069 STp->pos_unknown = 0;
1070 STp->partition = STp->new_partition = 0;
1071 if (STp->can_partitions)
1072 STp->nbr_partitions = 1; /* This guess will be updated later
1074 for (i = 0; i < ST_NBR_PARTITIONS; i++) {
1075 STps = &(STp->ps[i]);
1077 STps->eof = ST_NOEOF;
1079 STps->last_block_valid = 0;
1080 STps->drv_block = 0;
1086 STp->cleaning_req |= saved_cleaning;
1088 if (retval == CHKRES_NOT_READY || retval == CHKRES_NO_TAPE) {
1089 if (retval == CHKRES_NO_TAPE)
1090 STp->ready = ST_NO_TAPE;
1092 STp->ready = ST_NOT_READY;
1094 STp->density = 0; /* Clear the erroneous "residue" */
1095 STp->write_prot = 0;
1096 STp->block_size = 0;
1097 STp->ps[0].drv_file = STp->ps[0].drv_block = (-1);
1098 STp->partition = STp->new_partition = 0;
1099 STp->door_locked = ST_UNLOCKED;
1100 return CHKRES_NOT_READY;
1104 if (STp->omit_blklims)
1105 STp->min_block = STp->max_block = (-1);
1107 memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE);
1108 cmd[0] = READ_BLOCK_LIMITS;
1110 SRpnt = st_do_scsi(SRpnt, STp, cmd, 6, DMA_FROM_DEVICE,
1111 STp->device->request_queue->rq_timeout,
1112 MAX_READY_RETRIES, 1);
1114 retval = (STp->buffer)->syscall_result;
1118 if (!SRpnt->result && !STp->buffer->cmdstat.have_sense) {
1119 STp->max_block = ((STp->buffer)->b_data[1] << 16) |
1120 ((STp->buffer)->b_data[2] << 8) | (STp->buffer)->b_data[3];
1121 STp->min_block = ((STp->buffer)->b_data[4] << 8) |
1122 (STp->buffer)->b_data[5];
1123 if ( DEB( debugging || ) !STp->inited)
1124 st_printk(KERN_INFO, STp,
1125 "Block limits %d - %d bytes.\n",
1126 STp->min_block, STp->max_block);
1128 STp->min_block = STp->max_block = (-1);
1129 DEBC_printk(STp, "Can't read block limits.\n");
1133 memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE);
1134 cmd[0] = MODE_SENSE;
1137 SRpnt = st_do_scsi(SRpnt, STp, cmd, 12, DMA_FROM_DEVICE,
1138 STp->device->request_queue->rq_timeout,
1139 MAX_READY_RETRIES, 1);
1141 retval = (STp->buffer)->syscall_result;
1145 if ((STp->buffer)->syscall_result != 0) {
1146 DEBC_printk(STp, "No Mode Sense.\n");
1147 STp->block_size = ST_DEFAULT_BLOCK; /* Educated guess (?) */
1148 (STp->buffer)->syscall_result = 0; /* Prevent error propagation */
1149 STp->drv_write_prot = 0;
1151 DEBC_printk(STp,"Mode sense. Length %d, "
1152 "medium %x, WBS %x, BLL %d\n",
1153 (STp->buffer)->b_data[0],
1154 (STp->buffer)->b_data[1],
1155 (STp->buffer)->b_data[2],
1156 (STp->buffer)->b_data[3]);
1158 if ((STp->buffer)->b_data[3] >= 8) {
1159 STp->drv_buffer = ((STp->buffer)->b_data[2] >> 4) & 7;
1160 STp->density = (STp->buffer)->b_data[4];
1161 STp->block_size = (STp->buffer)->b_data[9] * 65536 +
1162 (STp->buffer)->b_data[10] * 256 + (STp->buffer)->b_data[11];
1163 DEBC_printk(STp, "Density %x, tape length: %x, "
1166 (STp->buffer)->b_data[5] * 65536 +
1167 (STp->buffer)->b_data[6] * 256 +
1168 (STp->buffer)->b_data[7],
1171 STp->drv_write_prot = ((STp->buffer)->b_data[2] & 0x80) != 0;
1172 if (!STp->drv_buffer && STp->immediate_filemark) {
1173 st_printk(KERN_WARNING, STp,
1174 "non-buffered tape: disabling "
1175 "writing immediate filemarks\n");
1176 STp->immediate_filemark = 0;
1179 st_release_request(SRpnt);
1183 if (STp->block_size > 0)
1184 (STp->buffer)->buffer_blocks =
1185 (STp->buffer)->buffer_size / STp->block_size;
1187 (STp->buffer)->buffer_blocks = 1;
1188 (STp->buffer)->buffer_bytes = (STp->buffer)->read_pointer = 0;
1190 DEBC_printk(STp, "Block size: %d, buffer size: %d (%d blocks).\n",
1191 STp->block_size, (STp->buffer)->buffer_size,
1192 (STp->buffer)->buffer_blocks);
1194 if (STp->drv_write_prot) {
1195 STp->write_prot = 1;
1197 DEBC_printk(STp, "Write protected\n");
1200 ((st_flags & O_ACCMODE) == O_WRONLY ||
1201 (st_flags & O_ACCMODE) == O_RDWR)) {
1207 if (STp->can_partitions && STp->nbr_partitions < 1) {
1208 /* This code is reached when the device is opened for the first time
1209 after the driver has been initialized with tape in the drive and the
1210 partition support has been enabled. */
1211 DEBC_printk(STp, "Updating partition number in status.\n");
1212 if ((STp->partition = find_partition(STp)) < 0) {
1213 retval = STp->partition;
1216 STp->new_partition = STp->partition;
1217 STp->nbr_partitions = 1; /* This guess will be updated when necessary */
1220 if (new_session) { /* Change the drive parameters for the new mode */
1221 STp->density_changed = STp->blksize_changed = 0;
1222 STp->compression_changed = 0;
1223 if (!(STm->defaults_for_writes) &&
1224 (retval = set_mode_densblk(STp, STm)) < 0)
1227 if (STp->default_drvbuffer != 0xff) {
1228 if (st_int_ioctl(STp, MTSETDRVBUFFER, STp->default_drvbuffer))
1229 st_printk(KERN_WARNING, STp,
1230 "Can't set default drive "
1231 "buffering to %d.\n",
1232 STp->default_drvbuffer);
1236 return CHKRES_READY;
1243 \f/* Open the device. Needs to take the BKL only because of incrementing the SCSI host
1245 static int st_open(struct inode *inode, struct file *filp)
1247 int i, retval = (-EIO);
1249 struct scsi_tape *STp;
1250 struct st_partstat *STps;
1251 int dev = TAPE_NR(inode);
1254 * We really want to do nonseekable_open(inode, filp); here, but some
1255 * versions of tar incorrectly call lseek on tapes and bail out if that
1256 * fails. So we disallow pread() and pwrite(), but permit lseeks.
1258 filp->f_mode &= ~(FMODE_PREAD | FMODE_PWRITE);
1260 if (!(STp = scsi_tape_get(dev))) {
1264 filp->private_data = STp;
1266 spin_lock(&st_use_lock);
1268 spin_unlock(&st_use_lock);
1269 DEBC_printk(STp, "Device already in use.\n");
1275 spin_unlock(&st_use_lock);
1276 STp->rew_at_close = STp->autorew_dev = (iminor(inode) & 0x80) == 0;
1278 if (scsi_autopm_get_device(STp->device) < 0) {
1283 if (!scsi_block_when_processing_errors(STp->device)) {
1288 /* See that we have at least a one page buffer available */
1289 if (!enlarge_buffer(STp->buffer, PAGE_SIZE)) {
1290 st_printk(KERN_WARNING, STp,
1291 "Can't allocate one page tape buffer.\n");
1292 retval = (-EOVERFLOW);
1296 (STp->buffer)->cleared = 0;
1297 (STp->buffer)->writing = 0;
1298 (STp->buffer)->syscall_result = 0;
1300 STp->write_prot = ((filp->f_flags & O_ACCMODE) == O_RDONLY);
1303 for (i = 0; i < ST_NBR_PARTITIONS; i++) {
1304 STps = &(STp->ps[i]);
1307 STp->try_dio_now = STp->try_dio;
1308 STp->recover_count = 0;
1309 DEB( STp->nbr_waits = STp->nbr_finished = 0;
1310 STp->nbr_requests = STp->nbr_dio = STp->nbr_pages = 0; )
1312 retval = check_tape(STp, filp);
1315 if ((filp->f_flags & O_NONBLOCK) == 0 &&
1316 retval != CHKRES_READY) {
1317 if (STp->ready == NO_TAPE)
1318 retval = (-ENOMEDIUM);
1326 normalize_buffer(STp->buffer);
1327 spin_lock(&st_use_lock);
1329 spin_unlock(&st_use_lock);
1331 scsi_autopm_put_device(STp->device);
1338 /* Flush the tape buffer before close */
1339 static int st_flush(struct file *filp, fl_owner_t id)
1341 int result = 0, result2;
1342 unsigned char cmd[MAX_COMMAND_SIZE];
1343 struct st_request *SRpnt;
1344 struct scsi_tape *STp = filp->private_data;
1345 struct st_modedef *STm = &(STp->modes[STp->current_mode]);
1346 struct st_partstat *STps = &(STp->ps[STp->partition]);
1348 if (file_count(filp) > 1)
1351 if (STps->rw == ST_WRITING && !STp->pos_unknown) {
1352 result = st_flush_write_buffer(STp);
1353 if (result != 0 && result != (-ENOSPC))
1357 if (STp->can_partitions &&
1358 (result2 = switch_partition(STp)) < 0) {
1359 DEBC_printk(STp, "switch_partition at close failed.\n");
1365 DEBC( if (STp->nbr_requests)
1366 st_printk(KERN_DEBUG, STp,
1367 "Number of r/w requests %d, dio used in %d, "
1368 "pages %d.\n", STp->nbr_requests, STp->nbr_dio,
1371 if (STps->rw == ST_WRITING && !STp->pos_unknown) {
1372 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
1375 DEBC_printk(STp, "Async write waits %d, finished %d.\n",
1376 STp->nbr_waits, STp->nbr_finished);
1378 memset(cmd, 0, MAX_COMMAND_SIZE);
1379 cmd[0] = WRITE_FILEMARKS;
1380 if (STp->immediate_filemark)
1382 cmd[4] = 1 + STp->two_fm;
1384 SRpnt = st_do_scsi(NULL, STp, cmd, 0, DMA_NONE,
1385 STp->device->request_queue->rq_timeout,
1386 MAX_WRITE_RETRIES, 1);
1388 result = (STp->buffer)->syscall_result;
1392 if (STp->buffer->syscall_result == 0 ||
1393 (cmdstatp->have_sense && !cmdstatp->deferred &&
1394 (cmdstatp->flags & SENSE_EOM) &&
1395 (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
1396 cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) &&
1397 (!cmdstatp->remainder_valid || cmdstatp->uremainder64 == 0))) {
1398 /* Write successful at EOM */
1399 st_release_request(SRpnt);
1401 if (STps->drv_file >= 0)
1403 STps->drv_block = 0;
1408 else { /* Write error */
1409 st_release_request(SRpnt);
1411 st_printk(KERN_ERR, STp,
1412 "Error on write filemark.\n");
1417 DEBC_printk(STp, "Buffer flushed, %d EOF(s) written\n", cmd[4]);
1418 } else if (!STp->rew_at_close) {
1419 STps = &(STp->ps[STp->partition]);
1420 if (!STm->sysv || STps->rw != ST_READING) {
1422 result = flush_buffer(STp, 0);
1423 else if (STps->eof == ST_FM_HIT) {
1424 result = cross_eof(STp, 0);
1426 if (STps->drv_file >= 0)
1428 STps->drv_block = 0;
1431 STps->eof = ST_NOEOF;
1433 } else if ((STps->eof == ST_NOEOF &&
1434 !(result = cross_eof(STp, 1))) ||
1435 STps->eof == ST_FM_HIT) {
1436 if (STps->drv_file >= 0)
1438 STps->drv_block = 0;
1444 if (STp->rew_at_close) {
1445 result2 = st_int_ioctl(STp, MTREW, 1);
1453 /* Close the device and release it. BKL is not needed: this is the only thread
1454 accessing this tape. */
1455 static int st_release(struct inode *inode, struct file *filp)
1457 struct scsi_tape *STp = filp->private_data;
1459 if (STp->door_locked == ST_LOCKED_AUTO)
1460 do_door_lock(STp, 0);
1462 normalize_buffer(STp->buffer);
1463 spin_lock(&st_use_lock);
1465 spin_unlock(&st_use_lock);
1466 scsi_autopm_put_device(STp->device);
1472 /* The checks common to both reading and writing */
1473 static ssize_t rw_checks(struct scsi_tape *STp, struct file *filp, size_t count)
1478 * If we are in the middle of error recovery, don't let anyone
1479 * else try and use this device. Also, if error recovery fails, it
1480 * may try and take the device offline, in which case all further
1481 * access to the device is prohibited.
1483 if (!scsi_block_when_processing_errors(STp->device)) {
1488 if (STp->ready != ST_READY) {
1489 if (STp->ready == ST_NO_TAPE)
1490 retval = (-ENOMEDIUM);
1496 if (! STp->modes[STp->current_mode].defined) {
1503 * If there was a bus reset, block further access
1506 if (STp->pos_unknown) {
1516 st_printk(ST_DEB_MSG, STp,
1517 "Incorrect device.\n");
1522 if (STp->can_partitions &&
1523 (retval = switch_partition(STp)) < 0)
1526 if (STp->block_size == 0 && STp->max_block > 0 &&
1527 (count < STp->min_block || count > STp->max_block)) {
1532 if (STp->do_auto_lock && STp->door_locked == ST_UNLOCKED &&
1533 !do_door_lock(STp, 1))
1534 STp->door_locked = ST_LOCKED_AUTO;
1541 static int setup_buffering(struct scsi_tape *STp, const char __user *buf,
1542 size_t count, int is_read)
1544 int i, bufsize, retval = 0;
1545 struct st_buffer *STbp = STp->buffer;
1548 i = STp->try_dio_now && try_rdio;
1550 i = STp->try_dio_now && try_wdio;
1552 if (i && ((unsigned long)buf & queue_dma_alignment(
1553 STp->device->request_queue)) == 0) {
1554 i = sgl_map_user_pages(STbp, STbp->use_sg, (unsigned long)buf,
1555 count, (is_read ? READ : WRITE));
1558 STbp->buffer_bytes = 0; /* can be used as transfer counter */
1561 STbp->do_dio = 0; /* fall back to buffering with any error */
1562 STbp->sg_segs = STbp->do_dio;
1566 STp->nbr_pages += STbp->do_dio;
1571 DEB( STp->nbr_requests++; )
1573 if (!STbp->do_dio) {
1574 if (STp->block_size)
1575 bufsize = STp->block_size > st_fixed_buffer_size ?
1576 STp->block_size : st_fixed_buffer_size;
1579 /* Make sure that data from previous user is not leaked even if
1580 HBA does not return correct residual */
1581 if (is_read && STp->sili && !STbp->cleared)
1585 if (bufsize > STbp->buffer_size &&
1586 !enlarge_buffer(STbp, bufsize)) {
1587 st_printk(KERN_WARNING, STp,
1588 "Can't allocate %d byte tape buffer.\n",
1590 retval = (-EOVERFLOW);
1593 if (STp->block_size)
1594 STbp->buffer_blocks = bufsize / STp->block_size;
1602 /* Can be called more than once after each setup_buffer() */
1603 static void release_buffering(struct scsi_tape *STp, int is_read)
1605 struct st_buffer *STbp;
1609 sgl_unmap_user_pages(STbp, STbp->do_dio, is_read);
1618 st_write(struct file *filp, const char __user *buf, size_t count, loff_t * ppos)
1621 ssize_t i, do_count, blks, transfer;
1623 int undone, retry_eot = 0, scode;
1625 unsigned char cmd[MAX_COMMAND_SIZE];
1626 const char __user *b_point;
1627 struct st_request *SRpnt = NULL;
1628 struct scsi_tape *STp = filp->private_data;
1629 struct st_modedef *STm;
1630 struct st_partstat *STps;
1631 struct st_buffer *STbp;
1633 if (mutex_lock_interruptible(&STp->lock))
1634 return -ERESTARTSYS;
1636 retval = rw_checks(STp, filp, count);
1637 if (retval || count == 0)
1640 /* Write must be integral number of blocks */
1641 if (STp->block_size != 0 && (count % STp->block_size) != 0) {
1642 st_printk(KERN_WARNING, STp,
1643 "Write not multiple of tape block size.\n");
1648 STm = &(STp->modes[STp->current_mode]);
1649 STps = &(STp->ps[STp->partition]);
1651 if (STp->write_prot) {
1657 if (STps->rw == ST_READING) {
1658 retval = flush_buffer(STp, 0);
1661 STps->rw = ST_WRITING;
1662 } else if (STps->rw != ST_WRITING &&
1663 STps->drv_file == 0 && STps->drv_block == 0) {
1664 if ((retval = set_mode_densblk(STp, STm)) < 0)
1666 if (STm->default_compression != ST_DONT_TOUCH &&
1667 !(STp->compression_changed)) {
1668 if (st_compression(STp, (STm->default_compression == ST_YES))) {
1669 st_printk(KERN_WARNING, STp,
1670 "Can't set default compression.\n");
1671 if (modes_defined) {
1680 i = write_behind_check(STp);
1683 STps->eof = ST_EOM_OK;
1685 STps->eof = ST_EOM_ERROR;
1688 if (STps->eof == ST_EOM_OK) {
1689 STps->eof = ST_EOD_1; /* allow next write */
1693 else if (STps->eof == ST_EOM_ERROR) {
1698 /* Check the buffer readability in cases where copy_user might catch
1699 the problems after some tape movement. */
1700 if (STp->block_size != 0 &&
1702 (copy_from_user(&i, buf, 1) != 0 ||
1703 copy_from_user(&i, buf + count - 1, 1) != 0)) {
1708 retval = setup_buffering(STp, buf, count, 0);
1714 memset(cmd, 0, MAX_COMMAND_SIZE);
1716 cmd[1] = (STp->block_size != 0);
1718 STps->rw = ST_WRITING;
1721 while (count > 0 && !retry_eot) {
1727 if (STp->block_size == 0)
1730 do_count = STbp->buffer_blocks * STp->block_size -
1732 if (do_count > count)
1736 i = append_to_buffer(b_point, STbp, do_count);
1743 b_point += do_count;
1745 async_write = STp->block_size == 0 && !STbp->do_dio &&
1746 STm->do_async_writes && STps->eof < ST_EOM_OK;
1748 if (STp->block_size != 0 && STm->do_buffer_writes &&
1749 !(STp->try_dio_now && try_wdio) && STps->eof < ST_EOM_OK &&
1750 STbp->buffer_bytes < STbp->buffer_size) {
1752 /* Don't write a buffer that is not full enough. */
1753 if (!async_write && count == 0)
1758 if (STp->block_size == 0)
1759 blks = transfer = do_count;
1762 blks = STbp->buffer_bytes;
1765 blks /= STp->block_size;
1766 transfer = blks * STp->block_size;
1768 cmd[2] = blks >> 16;
1772 SRpnt = st_do_scsi(SRpnt, STp, cmd, transfer, DMA_TO_DEVICE,
1773 STp->device->request_queue->rq_timeout,
1774 MAX_WRITE_RETRIES, !async_write);
1776 retval = STbp->syscall_result;
1779 if (async_write && !STbp->syscall_result) {
1780 STbp->writing = transfer;
1781 STp->dirty = !(STbp->writing ==
1782 STbp->buffer_bytes);
1783 SRpnt = NULL; /* Prevent releasing this request! */
1784 DEB( STp->write_pending = 1; )
1788 if (STbp->syscall_result != 0) {
1789 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
1791 DEBC_printk(STp, "Error on write:\n");
1792 if (cmdstatp->have_sense && (cmdstatp->flags & SENSE_EOM)) {
1793 scode = cmdstatp->sense_hdr.sense_key;
1794 if (cmdstatp->remainder_valid)
1795 undone = (int)cmdstatp->uremainder64;
1796 else if (STp->block_size == 0 &&
1797 scode == VOLUME_OVERFLOW)
1801 if (STp->block_size != 0)
1802 undone *= STp->block_size;
1803 if (undone <= do_count) {
1804 /* Only data from this write is not written */
1808 if (STp->block_size)
1809 blks = (transfer - undone) / STp->block_size;
1810 STps->eof = ST_EOM_OK;
1811 /* Continue in fixed block mode if all written
1812 in this request but still something left to write
1813 (retval left to zero)
1815 if (STp->block_size == 0 ||
1816 undone > 0 || count == 0)
1817 retval = (-ENOSPC); /* EOM within current request */
1818 DEBC_printk(STp, "EOM with %d "
1819 "bytes unwritten.\n",
1822 /* EOT within data buffered earlier (possible only
1823 in fixed block mode without direct i/o) */
1824 if (!retry_eot && !cmdstatp->deferred &&
1825 (scode == NO_SENSE || scode == RECOVERED_ERROR)) {
1826 move_buffer_data(STp->buffer, transfer - undone);
1828 if (STps->drv_block >= 0) {
1829 STps->drv_block += (transfer - undone) /
1832 STps->eof = ST_EOM_OK;
1833 DEBC_printk(STp, "Retry "
1836 STp->buffer->buffer_bytes);
1840 /* Either error within data buffered by driver or
1843 blks = do_count = 0;
1844 STps->eof = ST_EOM_ERROR;
1845 STps->drv_block = (-1); /* Too cautious? */
1846 retval = (-EIO); /* EOM for old data */
1847 DEBC_printk(STp, "EOM with "
1853 STps->drv_block = (-1); /* Too cautious? */
1854 retval = STbp->syscall_result;
1859 if (STps->drv_block >= 0) {
1860 if (STp->block_size == 0)
1861 STps->drv_block += (do_count > 0);
1863 STps->drv_block += blks;
1866 STbp->buffer_bytes = 0;
1869 if (retval || retry_eot) {
1871 retval = total - count;
1876 if (STps->eof == ST_EOD_1)
1877 STps->eof = ST_EOM_OK;
1878 else if (STps->eof != ST_EOM_OK)
1879 STps->eof = ST_NOEOF;
1880 retval = total - count;
1884 st_release_request(SRpnt);
1885 release_buffering(STp, 0);
1886 mutex_unlock(&STp->lock);
1891 /* Read data from the tape. Returns zero in the normal case, one if the
1892 eof status has changed, and the negative error code in case of a
1893 fatal error. Otherwise updates the buffer and the eof state.
1895 Does release user buffer mapping if it is set.
1897 static long read_tape(struct scsi_tape *STp, long count,
1898 struct st_request ** aSRpnt)
1900 int transfer, blks, bytes;
1901 unsigned char cmd[MAX_COMMAND_SIZE];
1902 struct st_request *SRpnt;
1903 struct st_modedef *STm;
1904 struct st_partstat *STps;
1905 struct st_buffer *STbp;
1911 STm = &(STp->modes[STp->current_mode]);
1912 STps = &(STp->ps[STp->partition]);
1913 if (STps->eof == ST_FM_HIT)
1917 if (STp->block_size == 0)
1918 blks = bytes = count;
1920 if (!(STp->try_dio_now && try_rdio) && STm->do_read_ahead) {
1921 blks = (STp->buffer)->buffer_blocks;
1922 bytes = blks * STp->block_size;
1925 if (!STbp->do_dio && bytes > (STp->buffer)->buffer_size)
1926 bytes = (STp->buffer)->buffer_size;
1927 blks = bytes / STp->block_size;
1928 bytes = blks * STp->block_size;
1932 memset(cmd, 0, MAX_COMMAND_SIZE);
1934 cmd[1] = (STp->block_size != 0);
1935 if (!cmd[1] && STp->sili)
1937 cmd[2] = blks >> 16;
1942 SRpnt = st_do_scsi(SRpnt, STp, cmd, bytes, DMA_FROM_DEVICE,
1943 STp->device->request_queue->rq_timeout,
1945 release_buffering(STp, 1);
1948 return STbp->syscall_result;
1950 STbp->read_pointer = 0;
1953 /* Something to check */
1954 if (STbp->syscall_result) {
1955 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
1959 "Sense: %2x %2x %2x %2x %2x %2x %2x %2x\n",
1960 SRpnt->sense[0], SRpnt->sense[1],
1961 SRpnt->sense[2], SRpnt->sense[3],
1962 SRpnt->sense[4], SRpnt->sense[5],
1963 SRpnt->sense[6], SRpnt->sense[7]);
1964 if (cmdstatp->have_sense) {
1966 if (cmdstatp->sense_hdr.sense_key == BLANK_CHECK)
1967 cmdstatp->flags &= 0xcf; /* No need for EOM in this case */
1969 if (cmdstatp->flags != 0) { /* EOF, EOM, or ILI */
1970 /* Compute the residual count */
1971 if (cmdstatp->remainder_valid)
1972 transfer = (int)cmdstatp->uremainder64;
1975 if (cmdstatp->sense_hdr.sense_key == MEDIUM_ERROR) {
1976 if (STp->block_size == 0)
1978 /* Some drives set ILI with MEDIUM ERROR */
1979 cmdstatp->flags &= ~SENSE_ILI;
1982 if (cmdstatp->flags & SENSE_ILI) { /* ILI */
1983 if (STp->block_size == 0 &&
1985 st_printk(KERN_NOTICE, STp,
1986 "Failed to read %d "
1987 "byte block with %d "
1991 if (STps->drv_block >= 0)
1992 STps->drv_block += 1;
1993 STbp->buffer_bytes = 0;
1995 } else if (STp->block_size == 0) {
1996 STbp->buffer_bytes = bytes - transfer;
1998 st_release_request(SRpnt);
1999 SRpnt = *aSRpnt = NULL;
2000 if (transfer == blks) { /* We did not get anything, error */
2001 st_printk(KERN_NOTICE, STp,
2004 if (STps->drv_block >= 0)
2005 STps->drv_block += blks - transfer + 1;
2006 st_int_ioctl(STp, MTBSR, 1);
2009 /* We have some data, deliver it */
2010 STbp->buffer_bytes = (blks - transfer) *
2012 DEBC_printk(STp, "ILI but "
2016 STbp->buffer_bytes);
2017 if (STps->drv_block >= 0)
2018 STps->drv_block += 1;
2019 if (st_int_ioctl(STp, MTBSR, 1))
2022 } else if (cmdstatp->flags & SENSE_FMK) { /* FM overrides EOM */
2023 if (STps->eof != ST_FM_HIT)
2024 STps->eof = ST_FM_HIT;
2026 STps->eof = ST_EOD_2;
2027 if (STp->block_size == 0)
2028 STbp->buffer_bytes = 0;
2030 STbp->buffer_bytes =
2031 bytes - transfer * STp->block_size;
2032 DEBC_printk(STp, "EOF detected (%d "
2034 STbp->buffer_bytes);
2035 } else if (cmdstatp->flags & SENSE_EOM) {
2036 if (STps->eof == ST_FM)
2037 STps->eof = ST_EOD_1;
2039 STps->eof = ST_EOM_OK;
2040 if (STp->block_size == 0)
2041 STbp->buffer_bytes = bytes - transfer;
2043 STbp->buffer_bytes =
2044 bytes - transfer * STp->block_size;
2046 DEBC_printk(STp, "EOM detected (%d "
2048 STbp->buffer_bytes);
2051 /* end of EOF, EOM, ILI test */
2052 else { /* nonzero sense key */
2053 DEBC_printk(STp, "Tape error while reading.\n");
2054 STps->drv_block = (-1);
2055 if (STps->eof == ST_FM &&
2056 cmdstatp->sense_hdr.sense_key == BLANK_CHECK) {
2057 DEBC_printk(STp, "Zero returned for "
2058 "first BLANK CHECK "
2060 STps->eof = ST_EOD_2; /* First BLANK_CHECK after FM */
2061 } else /* Some other extended sense code */
2065 if (STbp->buffer_bytes < 0) /* Caused by bogus sense data */
2066 STbp->buffer_bytes = 0;
2068 /* End of extended sense test */
2069 else { /* Non-extended sense */
2070 retval = STbp->syscall_result;
2074 /* End of error handling */
2075 else { /* Read successful */
2076 STbp->buffer_bytes = bytes;
2077 if (STp->sili) /* In fixed block mode residual is always zero here */
2078 STbp->buffer_bytes -= STp->buffer->cmdstat.residual;
2081 if (STps->drv_block >= 0) {
2082 if (STp->block_size == 0)
2085 STps->drv_block += STbp->buffer_bytes / STp->block_size;
2093 st_read(struct file *filp, char __user *buf, size_t count, loff_t * ppos)
2097 ssize_t i, transfer;
2098 int special, do_dio = 0;
2099 struct st_request *SRpnt = NULL;
2100 struct scsi_tape *STp = filp->private_data;
2101 struct st_modedef *STm;
2102 struct st_partstat *STps;
2103 struct st_buffer *STbp = STp->buffer;
2105 if (mutex_lock_interruptible(&STp->lock))
2106 return -ERESTARTSYS;
2108 retval = rw_checks(STp, filp, count);
2109 if (retval || count == 0)
2112 STm = &(STp->modes[STp->current_mode]);
2113 if (STp->block_size != 0 && (count % STp->block_size) != 0) {
2114 if (!STm->do_read_ahead) {
2115 retval = (-EINVAL); /* Read must be integral number of blocks */
2118 STp->try_dio_now = 0; /* Direct i/o can't handle split blocks */
2121 STps = &(STp->ps[STp->partition]);
2122 if (STps->rw == ST_WRITING) {
2123 retval = flush_buffer(STp, 0);
2126 STps->rw = ST_READING;
2129 if (debugging && STps->eof != ST_NOEOF)
2130 st_printk(ST_DEB_MSG, STp,
2131 "EOF/EOM flag up (%d). Bytes %d\n",
2132 STps->eof, STbp->buffer_bytes);
2135 retval = setup_buffering(STp, buf, count, 1);
2138 do_dio = STbp->do_dio;
2140 if (STbp->buffer_bytes == 0 &&
2141 STps->eof >= ST_EOD_1) {
2142 if (STps->eof < ST_EOD) {
2147 retval = (-EIO); /* EOM or Blank Check */
2152 /* Check the buffer writability before any tape movement. Don't alter
2154 if (copy_from_user(&i, buf, 1) != 0 ||
2155 copy_to_user(buf, &i, 1) != 0 ||
2156 copy_from_user(&i, buf + count - 1, 1) != 0 ||
2157 copy_to_user(buf + count - 1, &i, 1) != 0) {
2163 STps->rw = ST_READING;
2166 /* Loop until enough data in buffer or a special condition found */
2167 for (total = 0, special = 0; total < count && !special;) {
2169 /* Get new data if the buffer is empty */
2170 if (STbp->buffer_bytes == 0) {
2171 special = read_tape(STp, count - total, &SRpnt);
2172 if (special < 0) { /* No need to continue read */
2178 /* Move the data from driver buffer to user buffer */
2179 if (STbp->buffer_bytes > 0) {
2181 if (debugging && STps->eof != ST_NOEOF)
2182 st_printk(ST_DEB_MSG, STp,
2183 "EOF up (%d). Left %d, needed %d.\n",
2184 STps->eof, STbp->buffer_bytes,
2185 (int)(count - total));
2187 transfer = STbp->buffer_bytes < count - total ?
2188 STbp->buffer_bytes : count - total;
2190 i = from_buffer(STbp, buf, transfer);
2200 if (STp->block_size == 0)
2201 break; /* Read only one variable length block */
2203 } /* for (total = 0, special = 0;
2204 total < count && !special; ) */
2206 /* Change the eof state if no data from tape or buffer */
2208 if (STps->eof == ST_FM_HIT) {
2210 STps->drv_block = 0;
2211 if (STps->drv_file >= 0)
2213 } else if (STps->eof == ST_EOD_1) {
2214 STps->eof = ST_EOD_2;
2215 STps->drv_block = 0;
2216 if (STps->drv_file >= 0)
2218 } else if (STps->eof == ST_EOD_2)
2220 } else if (STps->eof == ST_FM)
2221 STps->eof = ST_NOEOF;
2225 if (SRpnt != NULL) {
2226 st_release_request(SRpnt);
2230 release_buffering(STp, 1);
2231 STbp->buffer_bytes = 0;
2233 mutex_unlock(&STp->lock);
2241 /* Set the driver options */
2242 static void st_log_options(struct scsi_tape * STp, struct st_modedef * STm)
2245 st_printk(KERN_INFO, STp,
2246 "Mode %d options: buffer writes: %d, "
2247 "async writes: %d, read ahead: %d\n",
2248 STp->current_mode, STm->do_buffer_writes,
2249 STm->do_async_writes, STm->do_read_ahead);
2250 st_printk(KERN_INFO, STp,
2251 " can bsr: %d, two FMs: %d, "
2252 "fast mteom: %d, auto lock: %d,\n",
2253 STp->can_bsr, STp->two_fm, STp->fast_mteom,
2255 st_printk(KERN_INFO, STp,
2256 " defs for wr: %d, no block limits: %d, "
2257 "partitions: %d, s2 log: %d\n",
2258 STm->defaults_for_writes, STp->omit_blklims,
2259 STp->can_partitions, STp->scsi2_logical);
2260 st_printk(KERN_INFO, STp,
2261 " sysv: %d nowait: %d sili: %d "
2262 "nowait_filemark: %d\n",
2263 STm->sysv, STp->immediate, STp->sili,
2264 STp->immediate_filemark);
2265 st_printk(KERN_INFO, STp, " debugging: %d\n", debugging);
2271 static int st_set_options(struct scsi_tape *STp, long options)
2275 struct st_modedef *STm;
2276 struct cdev *cd0, *cd1;
2277 struct device *d0, *d1;
2279 STm = &(STp->modes[STp->current_mode]);
2280 if (!STm->defined) {
2281 cd0 = STm->cdevs[0];
2282 cd1 = STm->cdevs[1];
2285 memcpy(STm, &(STp->modes[0]), sizeof(struct st_modedef));
2286 STm->cdevs[0] = cd0;
2287 STm->cdevs[1] = cd1;
2291 DEBC_printk(STp, "Initialized mode %d definition from mode 0\n",
2295 code = options & MT_ST_OPTIONS;
2296 if (code == MT_ST_BOOLEANS) {
2297 STm->do_buffer_writes = (options & MT_ST_BUFFER_WRITES) != 0;
2298 STm->do_async_writes = (options & MT_ST_ASYNC_WRITES) != 0;
2299 STm->defaults_for_writes = (options & MT_ST_DEF_WRITES) != 0;
2300 STm->do_read_ahead = (options & MT_ST_READ_AHEAD) != 0;
2301 STp->two_fm = (options & MT_ST_TWO_FM) != 0;
2302 STp->fast_mteom = (options & MT_ST_FAST_MTEOM) != 0;
2303 STp->do_auto_lock = (options & MT_ST_AUTO_LOCK) != 0;
2304 STp->can_bsr = (options & MT_ST_CAN_BSR) != 0;
2305 STp->omit_blklims = (options & MT_ST_NO_BLKLIMS) != 0;
2306 if ((STp->device)->scsi_level >= SCSI_2)
2307 STp->can_partitions = (options & MT_ST_CAN_PARTITIONS) != 0;
2308 STp->scsi2_logical = (options & MT_ST_SCSI2LOGICAL) != 0;
2309 STp->immediate = (options & MT_ST_NOWAIT) != 0;
2310 STp->immediate_filemark = (options & MT_ST_NOWAIT_EOF) != 0;
2311 STm->sysv = (options & MT_ST_SYSV) != 0;
2312 STp->sili = (options & MT_ST_SILI) != 0;
2313 DEB( debugging = (options & MT_ST_DEBUGGING) != 0;
2314 st_log_options(STp, STm); )
2315 } else if (code == MT_ST_SETBOOLEANS || code == MT_ST_CLEARBOOLEANS) {
2316 value = (code == MT_ST_SETBOOLEANS);
2317 if ((options & MT_ST_BUFFER_WRITES) != 0)
2318 STm->do_buffer_writes = value;
2319 if ((options & MT_ST_ASYNC_WRITES) != 0)
2320 STm->do_async_writes = value;
2321 if ((options & MT_ST_DEF_WRITES) != 0)
2322 STm->defaults_for_writes = value;
2323 if ((options & MT_ST_READ_AHEAD) != 0)
2324 STm->do_read_ahead = value;
2325 if ((options & MT_ST_TWO_FM) != 0)
2326 STp->two_fm = value;
2327 if ((options & MT_ST_FAST_MTEOM) != 0)
2328 STp->fast_mteom = value;
2329 if ((options & MT_ST_AUTO_LOCK) != 0)
2330 STp->do_auto_lock = value;
2331 if ((options & MT_ST_CAN_BSR) != 0)
2332 STp->can_bsr = value;
2333 if ((options & MT_ST_NO_BLKLIMS) != 0)
2334 STp->omit_blklims = value;
2335 if ((STp->device)->scsi_level >= SCSI_2 &&
2336 (options & MT_ST_CAN_PARTITIONS) != 0)
2337 STp->can_partitions = value;
2338 if ((options & MT_ST_SCSI2LOGICAL) != 0)
2339 STp->scsi2_logical = value;
2340 if ((options & MT_ST_NOWAIT) != 0)
2341 STp->immediate = value;
2342 if ((options & MT_ST_NOWAIT_EOF) != 0)
2343 STp->immediate_filemark = value;
2344 if ((options & MT_ST_SYSV) != 0)
2346 if ((options & MT_ST_SILI) != 0)
2349 if ((options & MT_ST_DEBUGGING) != 0)
2351 st_log_options(STp, STm); )
2352 } else if (code == MT_ST_WRITE_THRESHOLD) {
2353 /* Retained for compatibility */
2354 } else if (code == MT_ST_DEF_BLKSIZE) {
2355 value = (options & ~MT_ST_OPTIONS);
2356 if (value == ~MT_ST_OPTIONS) {
2357 STm->default_blksize = (-1);
2358 DEBC_printk(STp, "Default block size disabled.\n");
2360 STm->default_blksize = value;
2361 DEBC_printk(STp,"Default block size set to "
2362 "%d bytes.\n", STm->default_blksize);
2363 if (STp->ready == ST_READY) {
2364 STp->blksize_changed = 0;
2365 set_mode_densblk(STp, STm);
2368 } else if (code == MT_ST_TIMEOUTS) {
2369 value = (options & ~MT_ST_OPTIONS);
2370 if ((value & MT_ST_SET_LONG_TIMEOUT) != 0) {
2371 STp->long_timeout = (value & ~MT_ST_SET_LONG_TIMEOUT) * HZ;
2372 DEBC_printk(STp, "Long timeout set to %d seconds.\n",
2373 (value & ~MT_ST_SET_LONG_TIMEOUT));
2375 blk_queue_rq_timeout(STp->device->request_queue,
2377 DEBC_printk(STp, "Normal timeout set to %d seconds.\n",
2380 } else if (code == MT_ST_SET_CLN) {
2381 value = (options & ~MT_ST_OPTIONS) & 0xff;
2383 (value < EXTENDED_SENSE_START ||
2384 value >= SCSI_SENSE_BUFFERSIZE))
2386 STp->cln_mode = value;
2387 STp->cln_sense_mask = (options >> 8) & 0xff;
2388 STp->cln_sense_value = (options >> 16) & 0xff;
2389 st_printk(KERN_INFO, STp,
2390 "Cleaning request mode %d, mask %02x, value %02x\n",
2391 value, STp->cln_sense_mask, STp->cln_sense_value);
2392 } else if (code == MT_ST_DEF_OPTIONS) {
2393 code = (options & ~MT_ST_CLEAR_DEFAULT);
2394 value = (options & MT_ST_CLEAR_DEFAULT);
2395 if (code == MT_ST_DEF_DENSITY) {
2396 if (value == MT_ST_CLEAR_DEFAULT) {
2397 STm->default_density = (-1);
2399 "Density default disabled.\n");
2401 STm->default_density = value & 0xff;
2402 DEBC_printk(STp, "Density default set to %x\n",
2403 STm->default_density);
2404 if (STp->ready == ST_READY) {
2405 STp->density_changed = 0;
2406 set_mode_densblk(STp, STm);
2409 } else if (code == MT_ST_DEF_DRVBUFFER) {
2410 if (value == MT_ST_CLEAR_DEFAULT) {
2411 STp->default_drvbuffer = 0xff;
2413 "Drive buffer default disabled.\n");
2415 STp->default_drvbuffer = value & 7;
2417 "Drive buffer default set to %x\n",
2418 STp->default_drvbuffer);
2419 if (STp->ready == ST_READY)
2420 st_int_ioctl(STp, MTSETDRVBUFFER, STp->default_drvbuffer);
2422 } else if (code == MT_ST_DEF_COMPRESSION) {
2423 if (value == MT_ST_CLEAR_DEFAULT) {
2424 STm->default_compression = ST_DONT_TOUCH;
2426 "Compression default disabled.\n");
2428 if ((value & 0xff00) != 0) {
2429 STp->c_algo = (value & 0xff00) >> 8;
2430 DEBC_printk(STp, "Compression "
2431 "algorithm set to 0x%x.\n",
2434 if ((value & 0xff) != 0xff) {
2435 STm->default_compression = (value & 1 ? ST_YES : ST_NO);
2436 DEBC_printk(STp, "Compression default "
2439 if (STp->ready == ST_READY) {
2440 STp->compression_changed = 0;
2441 st_compression(STp, (STm->default_compression == ST_YES));
2452 #define MODE_HEADER_LENGTH 4
2454 /* Mode header and page byte offsets */
2455 #define MH_OFF_DATA_LENGTH 0
2456 #define MH_OFF_MEDIUM_TYPE 1
2457 #define MH_OFF_DEV_SPECIFIC 2
2458 #define MH_OFF_BDESCS_LENGTH 3
2459 #define MP_OFF_PAGE_NBR 0
2460 #define MP_OFF_PAGE_LENGTH 1
2462 /* Mode header and page bit masks */
2463 #define MH_BIT_WP 0x80
2464 #define MP_MSK_PAGE_NBR 0x3f
2466 /* Don't return block descriptors */
2467 #define MODE_SENSE_OMIT_BDESCS 0x08
2469 #define MODE_SELECT_PAGE_FORMAT 0x10
2471 /* Read a mode page into the tape buffer. The block descriptors are included
2472 if incl_block_descs is true. The page control is ored to the page number
2473 parameter, if necessary. */
2474 static int read_mode_page(struct scsi_tape *STp, int page, int omit_block_descs)
2476 unsigned char cmd[MAX_COMMAND_SIZE];
2477 struct st_request *SRpnt;
2479 memset(cmd, 0, MAX_COMMAND_SIZE);
2480 cmd[0] = MODE_SENSE;
2481 if (omit_block_descs)
2482 cmd[1] = MODE_SENSE_OMIT_BDESCS;
2486 SRpnt = st_do_scsi(NULL, STp, cmd, cmd[4], DMA_FROM_DEVICE,
2487 STp->device->request_queue->rq_timeout, 0, 1);
2489 return (STp->buffer)->syscall_result;
2491 st_release_request(SRpnt);
2493 return STp->buffer->syscall_result;
2497 /* Send the mode page in the tape buffer to the drive. Assumes that the mode data
2498 in the buffer is correctly formatted. The long timeout is used if slow is non-zero. */
2499 static int write_mode_page(struct scsi_tape *STp, int page, int slow)
2502 unsigned char cmd[MAX_COMMAND_SIZE];
2503 struct st_request *SRpnt;
2506 memset(cmd, 0, MAX_COMMAND_SIZE);
2507 cmd[0] = MODE_SELECT;
2508 cmd[1] = MODE_SELECT_PAGE_FORMAT;
2509 pgo = MODE_HEADER_LENGTH + (STp->buffer)->b_data[MH_OFF_BDESCS_LENGTH];
2510 cmd[4] = pgo + (STp->buffer)->b_data[pgo + MP_OFF_PAGE_LENGTH] + 2;
2512 /* Clear reserved fields */
2513 (STp->buffer)->b_data[MH_OFF_DATA_LENGTH] = 0;
2514 (STp->buffer)->b_data[MH_OFF_MEDIUM_TYPE] = 0;
2515 (STp->buffer)->b_data[MH_OFF_DEV_SPECIFIC] &= ~MH_BIT_WP;
2516 (STp->buffer)->b_data[pgo + MP_OFF_PAGE_NBR] &= MP_MSK_PAGE_NBR;
2519 STp->long_timeout : STp->device->request_queue->rq_timeout;
2520 SRpnt = st_do_scsi(NULL, STp, cmd, cmd[4], DMA_TO_DEVICE,
2523 return (STp->buffer)->syscall_result;
2525 st_release_request(SRpnt);
2527 return STp->buffer->syscall_result;
2531 #define COMPRESSION_PAGE 0x0f
2532 #define COMPRESSION_PAGE_LENGTH 16
2534 #define CP_OFF_DCE_DCC 2
2535 #define CP_OFF_C_ALGO 7
2537 #define DCE_MASK 0x80
2538 #define DCC_MASK 0x40
2539 #define RED_MASK 0x60
2542 /* Control the compression with mode page 15. Algorithm not changed if zero.
2544 The block descriptors are read and written because Sony SDT-7000 does not
2545 work without this (suggestion from Michael Schaefer <Michael.Schaefer@dlr.de>).
2546 Including block descriptors should not cause any harm to other drives. */
2548 static int st_compression(struct scsi_tape * STp, int state)
2551 int mpoffs; /* Offset to mode page start */
2552 unsigned char *b_data = (STp->buffer)->b_data;
2554 if (STp->ready != ST_READY)
2557 /* Read the current page contents */
2558 retval = read_mode_page(STp, COMPRESSION_PAGE, 0);
2560 DEBC_printk(STp, "Compression mode page not supported.\n");
2564 mpoffs = MODE_HEADER_LENGTH + b_data[MH_OFF_BDESCS_LENGTH];
2565 DEBC_printk(STp, "Compression state is %d.\n",
2566 (b_data[mpoffs + CP_OFF_DCE_DCC] & DCE_MASK ? 1 : 0));
2568 /* Check if compression can be changed */
2569 if ((b_data[mpoffs + CP_OFF_DCE_DCC] & DCC_MASK) == 0) {
2570 DEBC_printk(STp, "Compression not supported.\n");
2576 b_data[mpoffs + CP_OFF_DCE_DCC] |= DCE_MASK;
2577 if (STp->c_algo != 0)
2578 b_data[mpoffs + CP_OFF_C_ALGO] = STp->c_algo;
2581 b_data[mpoffs + CP_OFF_DCE_DCC] &= ~DCE_MASK;
2582 if (STp->c_algo != 0)
2583 b_data[mpoffs + CP_OFF_C_ALGO] = 0; /* no compression */
2586 retval = write_mode_page(STp, COMPRESSION_PAGE, 0);
2588 DEBC_printk(STp, "Compression change failed.\n");
2591 DEBC_printk(STp, "Compression state changed to %d.\n", state);
2593 STp->compression_changed = 1;
2598 /* Process the load and unload commands (does unload if the load code is zero) */
2599 static int do_load_unload(struct scsi_tape *STp, struct file *filp, int load_code)
2601 int retval = (-EIO), timeout;
2602 unsigned char cmd[MAX_COMMAND_SIZE];
2603 struct st_partstat *STps;
2604 struct st_request *SRpnt;
2606 if (STp->ready != ST_READY && !load_code) {
2607 if (STp->ready == ST_NO_TAPE)
2608 return (-ENOMEDIUM);
2613 memset(cmd, 0, MAX_COMMAND_SIZE);
2614 cmd[0] = START_STOP;
2618 * If arg >= 1 && arg <= 6 Enhanced load/unload in HP C1553A
2620 if (load_code >= 1 + MT_ST_HPLOADER_OFFSET
2621 && load_code <= 6 + MT_ST_HPLOADER_OFFSET) {
2622 DEBC_printk(STp, " Enhanced %sload slot %2d.\n",
2623 (cmd[4]) ? "" : "un",
2624 load_code - MT_ST_HPLOADER_OFFSET);
2625 cmd[3] = load_code - MT_ST_HPLOADER_OFFSET; /* MediaID field of C1553A */
2627 if (STp->immediate) {
2628 cmd[1] = 1; /* Don't wait for completion */
2629 timeout = STp->device->request_queue->rq_timeout;
2632 timeout = STp->long_timeout;
2636 st_printk(ST_DEB_MSG, STp, "Unloading tape.\n");
2638 st_printk(ST_DEB_MSG, STp, "Loading tape.\n");
2641 SRpnt = st_do_scsi(NULL, STp, cmd, 0, DMA_NONE,
2642 timeout, MAX_RETRIES, 1);
2644 return (STp->buffer)->syscall_result;
2646 retval = (STp->buffer)->syscall_result;
2647 st_release_request(SRpnt);
2649 if (!retval) { /* SCSI command successful */
2652 STp->rew_at_close = 0;
2653 STp->ready = ST_NO_TAPE;
2656 STp->rew_at_close = STp->autorew_dev;
2657 retval = check_tape(STp, filp);
2663 STps = &(STp->ps[STp->partition]);
2664 STps->drv_file = STps->drv_block = (-1);
2671 #define ST_DEB_FORWARD 0
2672 #define ST_DEB_BACKWARD 1
2673 static void deb_space_print(struct scsi_tape *STp, int direction, char *units, unsigned char *cmd)
2680 sc = sign_extend32(get_unaligned_be24(&cmd[2]), 23);
2683 st_printk(ST_DEB_MSG, STp, "Spacing tape %s over %d %s.\n",
2684 direction ? "backward" : "forward", sc, units);
2687 #define ST_DEB_FORWARD 0
2688 #define ST_DEB_BACKWARD 1
2689 static void deb_space_print(struct scsi_tape *STp, int direction, char *units, unsigned char *cmd) {}
2693 /* Internal ioctl function */
2694 static int st_int_ioctl(struct scsi_tape *STp, unsigned int cmd_in, unsigned long arg)
2700 unsigned char cmd[MAX_COMMAND_SIZE];
2701 struct st_request *SRpnt;
2702 struct st_partstat *STps;
2703 int fileno, blkno, at_sm, undone;
2704 int datalen = 0, direction = DMA_NONE;
2706 WARN_ON(STp->buffer->do_dio != 0);
2707 if (STp->ready != ST_READY) {
2708 if (STp->ready == ST_NO_TAPE)
2709 return (-ENOMEDIUM);
2713 timeout = STp->long_timeout;
2714 STps = &(STp->ps[STp->partition]);
2715 fileno = STps->drv_file;
2716 blkno = STps->drv_block;
2717 at_sm = STps->at_sm;
2719 memset(cmd, 0, MAX_COMMAND_SIZE);
2722 chg_eof = 0; /* Changed from the FSF after this */
2726 cmd[1] = 0x01; /* Space FileMarks */
2727 cmd[2] = (arg >> 16);
2728 cmd[3] = (arg >> 8);
2730 deb_space_print(STp, ST_DEB_FORWARD, "filemarks", cmd);
2734 at_sm &= (arg == 0);
2737 chg_eof = 0; /* Changed from the FSF after this */
2741 cmd[1] = 0x01; /* Space FileMarks */
2743 cmd[2] = (ltmp >> 16);
2744 cmd[3] = (ltmp >> 8);
2746 deb_space_print(STp, ST_DEB_BACKWARD, "filemarks", cmd);
2749 blkno = (-1); /* We can't know the block number */
2750 at_sm &= (arg == 0);
2754 cmd[1] = 0x00; /* Space Blocks */
2755 cmd[2] = (arg >> 16);
2756 cmd[3] = (arg >> 8);
2758 deb_space_print(STp, ST_DEB_FORWARD, "blocks", cmd);
2761 at_sm &= (arg == 0);
2765 cmd[1] = 0x00; /* Space Blocks */
2767 cmd[2] = (ltmp >> 16);
2768 cmd[3] = (ltmp >> 8);
2770 deb_space_print(STp, ST_DEB_BACKWARD, "blocks", cmd);
2773 at_sm &= (arg == 0);
2777 cmd[1] = 0x04; /* Space Setmarks */
2778 cmd[2] = (arg >> 16);
2779 cmd[3] = (arg >> 8);
2781 deb_space_print(STp, ST_DEB_FORWARD, "setmarks", cmd);
2783 blkno = fileno = (-1);
2789 cmd[1] = 0x04; /* Space Setmarks */
2791 cmd[2] = (ltmp >> 16);
2792 cmd[3] = (ltmp >> 8);
2794 deb_space_print(STp, ST_DEB_BACKWARD, "setmarks", cmd);
2796 blkno = fileno = (-1);
2803 if (STp->write_prot)
2805 cmd[0] = WRITE_FILEMARKS;
2806 if (cmd_in == MTWSM)
2808 if (cmd_in == MTWEOFI ||
2809 (cmd_in == MTWEOF && STp->immediate_filemark))
2811 cmd[2] = (arg >> 16);
2812 cmd[3] = (arg >> 8);
2814 timeout = STp->device->request_queue->rq_timeout;
2816 if (cmd_in != MTWSM)
2817 st_printk(ST_DEB_MSG, STp,
2818 "Writing %d filemarks.\n",
2823 st_printk(ST_DEB_MSG, STp,
2824 "Writing %d setmarks.\n",
2832 at_sm = (cmd_in == MTWSM);
2835 cmd[0] = REZERO_UNIT;
2836 if (STp->immediate) {
2837 cmd[1] = 1; /* Don't wait for completion */
2838 timeout = STp->device->request_queue->rq_timeout;
2840 DEBC_printk(STp, "Rewinding tape.\n");
2841 fileno = blkno = at_sm = 0;
2844 DEBC_printk(STp, "No op on tape.\n");
2845 return 0; /* Should do something ? */
2847 cmd[0] = START_STOP;
2848 if (STp->immediate) {
2849 cmd[1] = 1; /* Don't wait for completion */
2850 timeout = STp->device->request_queue->rq_timeout;
2853 DEBC_printk(STp, "Retensioning tape.\n");
2854 fileno = blkno = at_sm = 0;
2857 if (!STp->fast_mteom) {
2858 /* space to the end of tape */
2859 ioctl_result = st_int_ioctl(STp, MTFSF, 0x7fffff);
2860 fileno = STps->drv_file;
2861 if (STps->eof >= ST_EOD_1)
2863 /* The next lines would hide the number of spaced FileMarks
2864 That's why I inserted the previous lines. I had no luck
2865 with detecting EOM with FSF, so we go now to EOM.
2871 DEBC_printk(STp, "Spacing to end of recorded medium.\n");
2876 if (STp->write_prot)
2879 cmd[1] = (arg ? 1 : 0); /* Long erase with non-zero argument */
2880 if (STp->immediate) {
2881 cmd[1] |= 2; /* Don't wait for completion */
2882 timeout = STp->device->request_queue->rq_timeout;
2885 timeout = STp->long_timeout * 8;
2887 DEBC_printk(STp, "Erasing tape.\n");
2888 fileno = blkno = at_sm = 0;
2890 case MTSETBLK: /* Set block length */
2891 case MTSETDENSITY: /* Set tape density */
2892 case MTSETDRVBUFFER: /* Set drive buffering */
2893 case SET_DENS_AND_BLK: /* Set density and block size */
2895 if (STp->dirty || (STp->buffer)->buffer_bytes != 0)
2896 return (-EIO); /* Not allowed if data in buffer */
2897 if ((cmd_in == MTSETBLK || cmd_in == SET_DENS_AND_BLK) &&
2898 (arg & MT_ST_BLKSIZE_MASK) != 0 &&
2899 STp->max_block > 0 &&
2900 ((arg & MT_ST_BLKSIZE_MASK) < STp->min_block ||
2901 (arg & MT_ST_BLKSIZE_MASK) > STp->max_block)) {
2902 st_printk(KERN_WARNING, STp, "Illegal block size.\n");
2905 cmd[0] = MODE_SELECT;
2906 if ((STp->use_pf & USE_PF))
2907 cmd[1] = MODE_SELECT_PAGE_FORMAT;
2908 cmd[4] = datalen = 12;
2909 direction = DMA_TO_DEVICE;
2911 memset((STp->buffer)->b_data, 0, 12);
2912 if (cmd_in == MTSETDRVBUFFER)
2913 (STp->buffer)->b_data[2] = (arg & 7) << 4;
2915 (STp->buffer)->b_data[2] =
2916 STp->drv_buffer << 4;
2917 (STp->buffer)->b_data[3] = 8; /* block descriptor length */
2918 if (cmd_in == MTSETDENSITY) {
2919 (STp->buffer)->b_data[4] = arg;
2920 STp->density_changed = 1; /* At least we tried ;-) */
2921 } else if (cmd_in == SET_DENS_AND_BLK)
2922 (STp->buffer)->b_data[4] = arg >> 24;
2924 (STp->buffer)->b_data[4] = STp->density;
2925 if (cmd_in == MTSETBLK || cmd_in == SET_DENS_AND_BLK) {
2926 ltmp = arg & MT_ST_BLKSIZE_MASK;
2927 if (cmd_in == MTSETBLK)
2928 STp->blksize_changed = 1; /* At least we tried ;-) */
2930 ltmp = STp->block_size;
2931 (STp->buffer)->b_data[9] = (ltmp >> 16);
2932 (STp->buffer)->b_data[10] = (ltmp >> 8);
2933 (STp->buffer)->b_data[11] = ltmp;
2934 timeout = STp->device->request_queue->rq_timeout;
2936 if (cmd_in == MTSETBLK || cmd_in == SET_DENS_AND_BLK)
2937 st_printk(ST_DEB_MSG, STp,
2938 "Setting block size to %d bytes.\n",
2939 (STp->buffer)->b_data[9] * 65536 +
2940 (STp->buffer)->b_data[10] * 256 +
2941 (STp->buffer)->b_data[11]);
2942 if (cmd_in == MTSETDENSITY || cmd_in == SET_DENS_AND_BLK)
2943 st_printk(ST_DEB_MSG, STp,
2944 "Setting density code to %x.\n",
2945 (STp->buffer)->b_data[4]);
2946 if (cmd_in == MTSETDRVBUFFER)
2947 st_printk(ST_DEB_MSG, STp,
2948 "Setting drive buffer code to %d.\n",
2949 ((STp->buffer)->b_data[2] >> 4) & 7);
2956 SRpnt = st_do_scsi(NULL, STp, cmd, datalen, direction,
2957 timeout, MAX_RETRIES, 1);
2959 return (STp->buffer)->syscall_result;
2961 ioctl_result = (STp->buffer)->syscall_result;
2963 if (!ioctl_result) { /* SCSI command successful */
2964 st_release_request(SRpnt);
2966 STps->drv_block = blkno;
2967 STps->drv_file = fileno;
2968 STps->at_sm = at_sm;
2970 if (cmd_in == MTBSFM)
2971 ioctl_result = st_int_ioctl(STp, MTFSF, 1);
2972 else if (cmd_in == MTFSFM)
2973 ioctl_result = st_int_ioctl(STp, MTBSF, 1);
2975 if (cmd_in == MTSETBLK || cmd_in == SET_DENS_AND_BLK) {
2976 STp->block_size = arg & MT_ST_BLKSIZE_MASK;
2977 if (STp->block_size != 0) {
2978 (STp->buffer)->buffer_blocks =
2979 (STp->buffer)->buffer_size / STp->block_size;
2981 (STp->buffer)->buffer_bytes = (STp->buffer)->read_pointer = 0;
2982 if (cmd_in == SET_DENS_AND_BLK)
2983 STp->density = arg >> MT_ST_DENSITY_SHIFT;
2984 } else if (cmd_in == MTSETDRVBUFFER)
2985 STp->drv_buffer = (arg & 7);
2986 else if (cmd_in == MTSETDENSITY)
2989 if (cmd_in == MTEOM)
2991 else if (cmd_in == MTFSF)
2994 STps->eof = ST_NOEOF;
2996 if (cmd_in == MTWEOF || cmd_in == MTWEOFI)
2997 STps->rw = ST_IDLE; /* prevent automatic WEOF at close */
2998 } else { /* SCSI command was not completely successful. Don't return
2999 from this block without releasing the SCSI command block! */
3000 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
3002 if (cmdstatp->flags & SENSE_EOM) {
3003 if (cmd_in != MTBSF && cmd_in != MTBSFM &&
3004 cmd_in != MTBSR && cmd_in != MTBSS)
3005 STps->eof = ST_EOM_OK;
3006 STps->drv_block = 0;
3009 if (cmdstatp->remainder_valid)
3010 undone = (int)cmdstatp->uremainder64;
3014 if ((cmd_in == MTWEOF || cmd_in == MTWEOFI) &&
3015 cmdstatp->have_sense &&
3016 (cmdstatp->flags & SENSE_EOM)) {
3017 if (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
3018 cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) {
3019 ioctl_result = 0; /* EOF(s) written successfully at EOM */
3020 STps->eof = ST_NOEOF;
3021 } else { /* Writing EOF(s) failed */
3025 STps->eof = ST_NOEOF;
3027 STps->drv_file = fileno;
3028 } else if ((cmd_in == MTFSF) || (cmd_in == MTFSFM)) {
3030 STps->drv_file = fileno - undone;
3032 STps->drv_file = fileno;
3033 STps->drv_block = -1;
3034 STps->eof = ST_NOEOF;
3035 } else if ((cmd_in == MTBSF) || (cmd_in == MTBSFM)) {
3036 if (arg > 0 && undone < 0) /* Some drives get this wrong */
3038 if (STps->drv_file >= 0)
3039 STps->drv_file = fileno + undone;
3040 STps->drv_block = 0;
3041 STps->eof = ST_NOEOF;
3042 } else if (cmd_in == MTFSR) {
3043 if (cmdstatp->flags & SENSE_FMK) { /* Hit filemark */
3044 if (STps->drv_file >= 0)
3046 STps->drv_block = 0;
3049 if (blkno >= undone)
3050 STps->drv_block = blkno - undone;
3052 STps->drv_block = (-1);
3053 STps->eof = ST_NOEOF;
3055 } else if (cmd_in == MTBSR) {
3056 if (cmdstatp->flags & SENSE_FMK) { /* Hit filemark */
3058 STps->drv_block = (-1);
3060 if (arg > 0 && undone < 0) /* Some drives get this wrong */
3062 if (STps->drv_block >= 0)
3063 STps->drv_block = blkno + undone;
3065 STps->eof = ST_NOEOF;
3066 } else if (cmd_in == MTEOM) {
3067 STps->drv_file = (-1);
3068 STps->drv_block = (-1);
3070 } else if (cmd_in == MTSETBLK ||
3071 cmd_in == MTSETDENSITY ||
3072 cmd_in == MTSETDRVBUFFER ||
3073 cmd_in == SET_DENS_AND_BLK) {
3074 if (cmdstatp->sense_hdr.sense_key == ILLEGAL_REQUEST &&
3075 !(STp->use_pf & PF_TESTED)) {
3076 /* Try the other possible state of Page Format if not
3078 STp->use_pf = (STp->use_pf ^ USE_PF) | PF_TESTED;
3079 st_release_request(SRpnt);
3081 return st_int_ioctl(STp, cmd_in, arg);
3084 STps->eof = ST_NOEOF;
3086 if (cmdstatp->sense_hdr.sense_key == BLANK_CHECK)
3089 st_release_request(SRpnt);
3093 return ioctl_result;
3097 /* Get the tape position. If bt == 2, arg points into a kernel space mt_loc
3100 static int get_location(struct scsi_tape *STp, unsigned int *block, int *partition,
3104 unsigned char scmd[MAX_COMMAND_SIZE];
3105 struct st_request *SRpnt;
3107 if (STp->ready != ST_READY)
3110 memset(scmd, 0, MAX_COMMAND_SIZE);
3111 if ((STp->device)->scsi_level < SCSI_2) {
3112 scmd[0] = QFA_REQUEST_BLOCK;
3115 scmd[0] = READ_POSITION;
3116 if (!logical && !STp->scsi2_logical)
3119 SRpnt = st_do_scsi(NULL, STp, scmd, 20, DMA_FROM_DEVICE,
3120 STp->device->request_queue->rq_timeout,
3121 MAX_READY_RETRIES, 1);
3123 return (STp->buffer)->syscall_result;
3125 if ((STp->buffer)->syscall_result != 0 ||
3126 (STp->device->scsi_level >= SCSI_2 &&
3127 ((STp->buffer)->b_data[0] & 4) != 0)) {
3128 *block = *partition = 0;
3129 DEBC_printk(STp, " Can't read tape position.\n");
3133 if ((STp->device)->scsi_level < SCSI_2) {
3134 *block = ((STp->buffer)->b_data[0] << 16)
3135 + ((STp->buffer)->b_data[1] << 8)
3136 + (STp->buffer)->b_data[2];
3139 *block = ((STp->buffer)->b_data[4] << 24)
3140 + ((STp->buffer)->b_data[5] << 16)
3141 + ((STp->buffer)->b_data[6] << 8)
3142 + (STp->buffer)->b_data[7];
3143 *partition = (STp->buffer)->b_data[1];
3144 if (((STp->buffer)->b_data[0] & 0x80) &&
3145 (STp->buffer)->b_data[1] == 0) /* BOP of partition 0 */
3146 STp->ps[0].drv_block = STp->ps[0].drv_file = 0;
3148 DEBC_printk(STp, "Got tape pos. blk %d part %d.\n",
3149 *block, *partition);
3151 st_release_request(SRpnt);
3158 /* Set the tape block and partition. Negative partition means that only the
3159 block should be set in vendor specific way. */
3160 static int set_location(struct scsi_tape *STp, unsigned int block, int partition,
3163 struct st_partstat *STps;
3167 unsigned char scmd[MAX_COMMAND_SIZE];
3168 struct st_request *SRpnt;
3170 if (STp->ready != ST_READY)
3172 timeout = STp->long_timeout;
3173 STps = &(STp->ps[STp->partition]);
3175 DEBC_printk(STp, "Setting block to %d and partition to %d.\n",
3177 DEB(if (partition < 0)
3180 /* Update the location at the partition we are leaving */
3181 if ((!STp->can_partitions && partition != 0) ||
3182 partition >= ST_NBR_PARTITIONS)
3184 if (partition != STp->partition) {
3185 if (get_location(STp, &blk, &p, 1))
3186 STps->last_block_valid = 0;
3188 STps->last_block_valid = 1;
3189 STps->last_block_visited = blk;
3190 DEBC_printk(STp, "Visited block %d for "
3191 "partition %d saved.\n",
3192 blk, STp->partition);
3196 memset(scmd, 0, MAX_COMMAND_SIZE);
3197 if ((STp->device)->scsi_level < SCSI_2) {
3198 scmd[0] = QFA_SEEK_BLOCK;
3199 scmd[2] = (block >> 16);
3200 scmd[3] = (block >> 8);
3205 scmd[3] = (block >> 24);
3206 scmd[4] = (block >> 16);
3207 scmd[5] = (block >> 8);
3209 if (!logical && !STp->scsi2_logical)
3211 if (STp->partition != partition) {
3213 scmd[8] = partition;
3214 DEBC_printk(STp, "Trying to change partition "
3215 "from %d to %d\n", STp->partition,
3219 if (STp->immediate) {
3220 scmd[1] |= 1; /* Don't wait for completion */
3221 timeout = STp->device->request_queue->rq_timeout;
3224 SRpnt = st_do_scsi(NULL, STp, scmd, 0, DMA_NONE,
3225 timeout, MAX_READY_RETRIES, 1);
3227 return (STp->buffer)->syscall_result;
3229 STps->drv_block = STps->drv_file = (-1);
3230 STps->eof = ST_NOEOF;
3231 if ((STp->buffer)->syscall_result != 0) {
3233 if (STp->can_partitions &&
3234 (STp->device)->scsi_level >= SCSI_2 &&
3235 (p = find_partition(STp)) >= 0)
3238 if (STp->can_partitions) {
3239 STp->partition = partition;
3240 STps = &(STp->ps[partition]);
3241 if (!STps->last_block_valid ||
3242 STps->last_block_visited != block) {
3249 STps->drv_block = STps->drv_file = 0;
3253 st_release_request(SRpnt);
3260 /* Find the current partition number for the drive status. Called from open and
3261 returns either partition number of negative error code. */
3262 static int find_partition(struct scsi_tape *STp)
3267 if ((i = get_location(STp, &block, &partition, 1)) < 0)
3269 if (partition >= ST_NBR_PARTITIONS)
3275 /* Change the partition if necessary */
3276 static int switch_partition(struct scsi_tape *STp)
3278 struct st_partstat *STps;
3280 if (STp->partition == STp->new_partition)
3282 STps = &(STp->ps[STp->new_partition]);
3283 if (!STps->last_block_valid)
3284 STps->last_block_visited = 0;
3285 return set_location(STp, STps->last_block_visited, STp->new_partition, 1);
3288 /* Functions for reading and writing the medium partition mode page. */
3290 #define PART_PAGE 0x11
3291 #define PART_PAGE_FIXED_LENGTH 8
3293 #define PP_OFF_MAX_ADD_PARTS 2
3294 #define PP_OFF_NBR_ADD_PARTS 3
3295 #define PP_OFF_FLAGS 4
3296 #define PP_OFF_PART_UNITS 6
3297 #define PP_OFF_RESERVED 7
3299 #define PP_BIT_IDP 0x20
3300 #define PP_BIT_FDP 0x80
3301 #define PP_MSK_PSUM_MB 0x10
3302 #define PP_MSK_PSUM_UNITS 0x18
3303 #define PP_MSK_POFM 0x04
3305 /* Get the number of partitions on the tape. As a side effect reads the
3306 mode page into the tape buffer. */
3307 static int nbr_partitions(struct scsi_tape *STp)
3311 if (STp->ready != ST_READY)
3314 result = read_mode_page(STp, PART_PAGE, 1);
3317 DEBC_printk(STp, "Can't read medium partition page.\n");
3320 result = (STp->buffer)->b_data[MODE_HEADER_LENGTH +
3321 PP_OFF_NBR_ADD_PARTS] + 1;
3322 DEBC_printk(STp, "Number of partitions %d.\n", result);
3329 static int format_medium(struct scsi_tape *STp, int format)
3332 int timeout = STp->long_timeout;
3333 unsigned char scmd[MAX_COMMAND_SIZE];
3334 struct st_request *SRpnt;
3336 memset(scmd, 0, MAX_COMMAND_SIZE);
3337 scmd[0] = FORMAT_UNIT;
3339 if (STp->immediate) {
3340 scmd[1] |= 1; /* Don't wait for completion */
3341 timeout = STp->device->request_queue->rq_timeout;
3343 DEBC_printk(STp, "Sending FORMAT MEDIUM\n");
3344 SRpnt = st_do_scsi(NULL, STp, scmd, 0, DMA_NONE,
3345 timeout, MAX_RETRIES, 1);
3347 result = STp->buffer->syscall_result;
3352 /* Partition the tape into two partitions if size > 0 or one partition if
3355 The block descriptors are read and written because Sony SDT-7000 does not
3356 work without this (suggestion from Michael Schaefer <Michael.Schaefer@dlr.de>).
3358 My HP C1533A drive returns only one partition size field. This is used to
3359 set the size of partition 1. There is no size field for the default partition.
3360 Michael Schaefer's Sony SDT-7000 returns two descriptors and the second is
3361 used to set the size of partition 1 (this is what the SCSI-3 standard specifies).
3362 The following algorithm is used to accommodate both drives: if the number of
3363 partition size fields is greater than the maximum number of additional partitions
3364 in the mode page, the second field is used. Otherwise the first field is used.
3366 For Seagate DDS drives the page length must be 8 when no partitions is defined
3367 and 10 when 1 partition is defined (information from Eric Lee Green). This is
3368 is acceptable also to some other old drives and enforced if the first partition
3369 size field is used for the first additional partition size.
3371 For drives that advertize SCSI-3 or newer, use the SSC-3 methods.
3373 static int partition_tape(struct scsi_tape *STp, int size)
3376 int target_partition;
3377 bool scsi3 = STp->device->scsi_level >= SCSI_3, needs_format = false;
3378 int pgo, psd_cnt, psdo;
3379 int psum = PP_MSK_PSUM_MB, units = 0;
3382 result = read_mode_page(STp, PART_PAGE, 0);
3384 DEBC_printk(STp, "Can't read partition mode page.\n");
3387 target_partition = 1;
3389 target_partition = 0;
3393 /* The mode page is in the buffer. Let's modify it and write it. */
3394 bp = (STp->buffer)->b_data;
3395 pgo = MODE_HEADER_LENGTH + bp[MH_OFF_BDESCS_LENGTH];
3396 DEBC_printk(STp, "Partition page length is %d bytes.\n",
3397 bp[pgo + MP_OFF_PAGE_LENGTH] + 2);
3399 psd_cnt = (bp[pgo + MP_OFF_PAGE_LENGTH] + 2 - PART_PAGE_FIXED_LENGTH) / 2;
3402 needs_format = (bp[pgo + PP_OFF_FLAGS] & PP_MSK_POFM) != 0;
3403 if (needs_format && size == 0) {
3404 /* No need to write the mode page when clearing
3407 DEBC_printk(STp, "Formatting tape with one partition.\n");
3408 result = format_medium(STp, 0);
3411 if (needs_format) /* Leave the old value for HP DATs claiming SCSI_3 */
3413 if ((bp[pgo + PP_OFF_FLAGS] & PP_MSK_PSUM_UNITS) == PP_MSK_PSUM_UNITS) {
3414 /* Use units scaling for large partitions if the device
3415 * suggests it and no precision lost. Required for IBM
3416 * TS1140/50 drives that don't support MB units.
3418 if (size >= 1000 && (size % 1000) == 0) {
3420 psum = PP_MSK_PSUM_UNITS;
3424 /* Try it anyway if too large to specify in MB */
3425 if (psum == PP_MSK_PSUM_MB && size >= 65534) {
3427 psum = PP_MSK_PSUM_UNITS;
3432 if (size >= 65535 || /* Does not fit into two bytes */
3433 (target_partition == 0 && psd_cnt < 2)) {
3438 psdo = pgo + PART_PAGE_FIXED_LENGTH;
3439 /* The second condition is for HP DDS which use only one partition size
3442 if (target_partition > 0 &&
3443 (psd_cnt > bp[pgo + PP_OFF_MAX_ADD_PARTS] ||
3444 bp[pgo + PP_OFF_MAX_ADD_PARTS] != 1)) {
3445 bp[psdo] = bp[psdo + 1] = 0xff; /* Rest to partition 0 */
3448 memset(bp + psdo, 0, bp[pgo + PP_OFF_NBR_ADD_PARTS] * 2);
3450 DEBC_printk(STp, "psd_cnt %d, max.parts %d, nbr_parts %d\n",
3451 psd_cnt, bp[pgo + PP_OFF_MAX_ADD_PARTS],
3452 bp[pgo + PP_OFF_NBR_ADD_PARTS]);
3455 bp[pgo + PP_OFF_NBR_ADD_PARTS] = 0;
3456 if (psd_cnt <= bp[pgo + PP_OFF_MAX_ADD_PARTS])
3457 bp[pgo + MP_OFF_PAGE_LENGTH] = 6;
3458 DEBC_printk(STp, "Formatting tape with one partition.\n");
3460 bp[psdo] = (size >> 8) & 0xff;
3461 bp[psdo + 1] = size & 0xff;
3462 if (target_partition == 0)
3463 bp[psdo + 2] = bp[psdo + 3] = 0xff;
3465 if (bp[pgo + MP_OFF_PAGE_LENGTH] < 8)
3466 bp[pgo + MP_OFF_PAGE_LENGTH] = 8;
3468 "Formatting tape with two partitions (%i = %d MB).\n",
3469 target_partition, units > 0 ? size * 1000 : size);
3471 bp[pgo + PP_OFF_PART_UNITS] = 0;
3472 bp[pgo + PP_OFF_RESERVED] = 0;
3473 if (size != 1 || units != 0) {
3474 bp[pgo + PP_OFF_FLAGS] = PP_BIT_IDP | psum |
3475 (bp[pgo + PP_OFF_FLAGS] & 0x07);
3476 bp[pgo + PP_OFF_PART_UNITS] = units;
3478 bp[pgo + PP_OFF_FLAGS] = PP_BIT_FDP |
3479 (bp[pgo + PP_OFF_FLAGS] & 0x1f);
3480 bp[pgo + MP_OFF_PAGE_LENGTH] = 6 + psd_cnt * 2;
3482 result = write_mode_page(STp, PART_PAGE, 1);
3484 if (!result && needs_format)
3485 result = format_medium(STp, 1);
3488 st_printk(KERN_INFO, STp, "Partitioning of tape failed.\n");
3498 /* The ioctl command */
3499 static long st_ioctl(struct file *file, unsigned int cmd_in, unsigned long arg)
3501 void __user *p = (void __user *)arg;
3502 int i, cmd_nr, cmd_type, bt;
3505 struct scsi_tape *STp = file->private_data;
3506 struct st_modedef *STm;
3507 struct st_partstat *STps;
3509 if (mutex_lock_interruptible(&STp->lock))
3510 return -ERESTARTSYS;
3513 if (debugging && !STp->in_use) {
3514 st_printk(ST_DEB_MSG, STp, "Incorrect device.\n");
3519 STm = &(STp->modes[STp->current_mode]);
3520 STps = &(STp->ps[STp->partition]);
3523 * If we are in the middle of error recovery, don't let anyone
3524 * else try and use this device. Also, if error recovery fails, it
3525 * may try and take the device offline, in which case all further
3526 * access to the device is prohibited.
3528 retval = scsi_ioctl_block_when_processing_errors(STp->device, cmd_in,
3529 file->f_flags & O_NDELAY);
3533 cmd_type = _IOC_TYPE(cmd_in);
3534 cmd_nr = _IOC_NR(cmd_in);
3536 if (cmd_type == _IOC_TYPE(MTIOCTOP) && cmd_nr == _IOC_NR(MTIOCTOP)) {
3539 if (_IOC_SIZE(cmd_in) != sizeof(mtc)) {
3544 i = copy_from_user(&mtc, p, sizeof(struct mtop));
3550 if (mtc.mt_op == MTSETDRVBUFFER && !capable(CAP_SYS_ADMIN)) {
3551 st_printk(KERN_WARNING, STp,
3552 "MTSETDRVBUFFER only allowed for root.\n");
3556 if (!STm->defined &&
3557 (mtc.mt_op != MTSETDRVBUFFER &&
3558 (mtc.mt_count & MT_ST_OPTIONS) == 0)) {
3563 if (!STp->pos_unknown) {
3565 if (STps->eof == ST_FM_HIT) {
3566 if (mtc.mt_op == MTFSF || mtc.mt_op == MTFSFM ||
3567 mtc.mt_op == MTEOM) {
3569 if (STps->drv_file >= 0)
3570 STps->drv_file += 1;
3571 } else if (mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM) {
3573 if (STps->drv_file >= 0)
3574 STps->drv_file += 1;
3578 if (mtc.mt_op == MTSEEK) {
3579 /* Old position must be restored if partition will be
3581 i = !STp->can_partitions ||
3582 (STp->new_partition != STp->partition);
3584 i = mtc.mt_op == MTREW || mtc.mt_op == MTOFFL ||
3585 mtc.mt_op == MTRETEN || mtc.mt_op == MTEOM ||
3586 mtc.mt_op == MTLOCK || mtc.mt_op == MTLOAD ||
3587 mtc.mt_op == MTFSF || mtc.mt_op == MTFSFM ||
3588 mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM ||
3589 mtc.mt_op == MTCOMPRESSION;
3591 i = flush_buffer(STp, i);
3596 if (STps->rw == ST_WRITING &&
3597 (mtc.mt_op == MTREW || mtc.mt_op == MTOFFL ||
3598 mtc.mt_op == MTSEEK ||
3599 mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM)) {
3600 i = st_int_ioctl(STp, MTWEOF, 1);
3605 if (mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM)
3612 * If there was a bus reset, block further access
3613 * to this device. If the user wants to rewind the tape,
3614 * then reset the flag and allow access again.
3616 if (mtc.mt_op != MTREW &&
3617 mtc.mt_op != MTOFFL &&
3618 mtc.mt_op != MTRETEN &&
3619 mtc.mt_op != MTERASE &&
3620 mtc.mt_op != MTSEEK &&
3621 mtc.mt_op != MTEOM) {
3626 /* remove this when the midlevel properly clears was_reset */
3627 STp->device->was_reset = 0;
3630 if (mtc.mt_op != MTNOP && mtc.mt_op != MTSETBLK &&
3631 mtc.mt_op != MTSETDENSITY && mtc.mt_op != MTWSM &&
3632 mtc.mt_op != MTSETDRVBUFFER && mtc.mt_op != MTSETPART)
3633 STps->rw = ST_IDLE; /* Prevent automatic WEOF and fsf */
3635 if (mtc.mt_op == MTOFFL && STp->door_locked != ST_UNLOCKED)
3636 do_door_lock(STp, 0); /* Ignore result! */
3638 if (mtc.mt_op == MTSETDRVBUFFER &&
3639 (mtc.mt_count & MT_ST_OPTIONS) != 0) {
3640 retval = st_set_options(STp, mtc.mt_count);
3644 if (mtc.mt_op == MTSETPART) {
3645 if (!STp->can_partitions ||
3646 mtc.mt_count < 0 || mtc.mt_count >= ST_NBR_PARTITIONS) {
3650 if (mtc.mt_count >= STp->nbr_partitions &&
3651 (STp->nbr_partitions = nbr_partitions(STp)) < 0) {
3655 if (mtc.mt_count >= STp->nbr_partitions) {
3659 STp->new_partition = mtc.mt_count;
3664 if (mtc.mt_op == MTMKPART) {
3665 if (!STp->can_partitions) {
3669 i = do_load_unload(STp, file, 1);
3674 i = partition_tape(STp, mtc.mt_count);
3679 for (i = 0; i < ST_NBR_PARTITIONS; i++) {
3680 STp->ps[i].rw = ST_IDLE;
3681 STp->ps[i].at_sm = 0;
3682 STp->ps[i].last_block_valid = 0;
3684 STp->partition = STp->new_partition = 0;
3685 STp->nbr_partitions = mtc.mt_count != 0 ? 2 : 1;
3686 STps->drv_block = STps->drv_file = 0;
3691 if (mtc.mt_op == MTSEEK) {
3692 i = set_location(STp, mtc.mt_count, STp->new_partition, 0);
3693 if (!STp->can_partitions)
3694 STp->ps[0].rw = ST_IDLE;
3699 if (mtc.mt_op == MTUNLOAD || mtc.mt_op == MTOFFL) {
3700 retval = do_load_unload(STp, file, 0);
3704 if (mtc.mt_op == MTLOAD) {
3705 retval = do_load_unload(STp, file, max(1, mtc.mt_count));
3709 if (mtc.mt_op == MTLOCK || mtc.mt_op == MTUNLOCK) {
3710 retval = do_door_lock(STp, (mtc.mt_op == MTLOCK));
3714 if (STp->can_partitions && STp->ready == ST_READY &&
3715 (i = switch_partition(STp)) < 0) {
3720 if (mtc.mt_op == MTCOMPRESSION)
3721 retval = st_compression(STp, (mtc.mt_count & 1));
3723 retval = st_int_ioctl(STp, mtc.mt_op, mtc.mt_count);
3726 if (!STm->defined) {
3731 if ((i = flush_buffer(STp, 0)) < 0) {
3735 if (STp->can_partitions &&
3736 (i = switch_partition(STp)) < 0) {
3741 if (cmd_type == _IOC_TYPE(MTIOCGET) && cmd_nr == _IOC_NR(MTIOCGET)) {
3742 struct mtget mt_status;
3744 if (_IOC_SIZE(cmd_in) != sizeof(struct mtget)) {
3749 mt_status.mt_type = STp->tape_type;
3750 mt_status.mt_dsreg =
3751 ((STp->block_size << MT_ST_BLKSIZE_SHIFT) & MT_ST_BLKSIZE_MASK) |
3752 ((STp->density << MT_ST_DENSITY_SHIFT) & MT_ST_DENSITY_MASK);
3753 mt_status.mt_blkno = STps->drv_block;
3754 mt_status.mt_fileno = STps->drv_file;
3755 if (STp->block_size != 0) {
3756 if (STps->rw == ST_WRITING)
3757 mt_status.mt_blkno +=
3758 (STp->buffer)->buffer_bytes / STp->block_size;
3759 else if (STps->rw == ST_READING)
3760 mt_status.mt_blkno -=
3761 ((STp->buffer)->buffer_bytes +
3762 STp->block_size - 1) / STp->block_size;
3765 mt_status.mt_gstat = 0;
3766 if (STp->drv_write_prot)
3767 mt_status.mt_gstat |= GMT_WR_PROT(0xffffffff);
3768 if (mt_status.mt_blkno == 0) {
3769 if (mt_status.mt_fileno == 0)
3770 mt_status.mt_gstat |= GMT_BOT(0xffffffff);
3772 mt_status.mt_gstat |= GMT_EOF(0xffffffff);
3774 mt_status.mt_erreg = (STp->recover_reg << MT_ST_SOFTERR_SHIFT);
3775 mt_status.mt_resid = STp->partition;
3776 if (STps->eof == ST_EOM_OK || STps->eof == ST_EOM_ERROR)
3777 mt_status.mt_gstat |= GMT_EOT(0xffffffff);
3778 else if (STps->eof >= ST_EOM_OK)
3779 mt_status.mt_gstat |= GMT_EOD(0xffffffff);
3780 if (STp->density == 1)
3781 mt_status.mt_gstat |= GMT_D_800(0xffffffff);
3782 else if (STp->density == 2)
3783 mt_status.mt_gstat |= GMT_D_1600(0xffffffff);
3784 else if (STp->density == 3)
3785 mt_status.mt_gstat |= GMT_D_6250(0xffffffff);
3786 if (STp->ready == ST_READY)
3787 mt_status.mt_gstat |= GMT_ONLINE(0xffffffff);
3788 if (STp->ready == ST_NO_TAPE)
3789 mt_status.mt_gstat |= GMT_DR_OPEN(0xffffffff);
3791 mt_status.mt_gstat |= GMT_SM(0xffffffff);
3792 if (STm->do_async_writes ||
3793 (STm->do_buffer_writes && STp->block_size != 0) ||
3794 STp->drv_buffer != 0)
3795 mt_status.mt_gstat |= GMT_IM_REP_EN(0xffffffff);
3796 if (STp->cleaning_req)
3797 mt_status.mt_gstat |= GMT_CLN(0xffffffff);
3799 retval = put_user_mtget(p, &mt_status);
3803 STp->recover_reg = 0; /* Clear after read */
3805 } /* End of MTIOCGET */
3806 if (cmd_type == _IOC_TYPE(MTIOCPOS) && cmd_nr == _IOC_NR(MTIOCPOS)) {
3807 struct mtpos mt_pos;
3808 if (_IOC_SIZE(cmd_in) != sizeof(struct mtpos)) {
3812 if ((i = get_location(STp, &blk, &bt, 0)) < 0) {
3816 mt_pos.mt_blkno = blk;
3817 retval = put_user_mtpos(p, &mt_pos);
3820 mutex_unlock(&STp->lock);
3824 case SCSI_IOCTL_SEND_COMMAND:
3825 case CDROM_SEND_PACKET:
3826 if (!capable(CAP_SYS_RAWIO))
3833 retval = scsi_ioctl(STp->device, file->f_mode, cmd_in, p);
3834 if (!retval && cmd_in == SCSI_IOCTL_STOP_UNIT) {
3836 STp->rew_at_close = 0;
3837 STp->ready = ST_NO_TAPE;
3842 mutex_unlock(&STp->lock);
3846 #ifdef CONFIG_COMPAT
3847 static long st_compat_ioctl(struct file *file, unsigned int cmd_in, unsigned long arg)
3849 /* argument conversion is handled using put_user_mtpos/put_user_mtget */
3859 return st_ioctl(file, cmd_in, arg);
3865 /* Try to allocate a new tape buffer. Calling function must not hold
3867 static struct st_buffer *new_tape_buffer(int max_sg)
3869 struct st_buffer *tb;
3871 tb = kzalloc(sizeof(struct st_buffer), GFP_KERNEL);
3873 printk(KERN_NOTICE "st: Can't allocate new tape buffer.\n");
3877 tb->use_sg = max_sg;
3878 tb->buffer_size = 0;
3880 tb->reserved_pages = kcalloc(max_sg, sizeof(struct page *),
3882 if (!tb->reserved_pages) {
3891 /* Try to allocate enough space in the tape buffer */
3892 #define ST_MAX_ORDER 6
3894 static int enlarge_buffer(struct st_buffer * STbuffer, int new_size)
3896 int segs, max_segs, b_size, order, got;
3899 if (new_size <= STbuffer->buffer_size)
3902 if (STbuffer->buffer_size <= PAGE_SIZE)
3903 normalize_buffer(STbuffer); /* Avoid extra segment */
3905 max_segs = STbuffer->use_sg;
3907 priority = GFP_KERNEL | __GFP_NOWARN;
3909 if (STbuffer->cleared)
3910 priority |= __GFP_ZERO;
3912 if (STbuffer->frp_segs) {
3913 order = STbuffer->reserved_page_order;
3914 b_size = PAGE_SIZE << order;
3916 for (b_size = PAGE_SIZE, order = 0;
3917 order < ST_MAX_ORDER &&
3918 max_segs * (PAGE_SIZE << order) < new_size;
3919 order++, b_size *= 2)
3921 STbuffer->reserved_page_order = order;
3923 if (max_segs * (PAGE_SIZE << order) < new_size) {
3924 if (order == ST_MAX_ORDER)
3926 normalize_buffer(STbuffer);
3927 return enlarge_buffer(STbuffer, new_size);
3930 for (segs = STbuffer->frp_segs, got = STbuffer->buffer_size;
3931 segs < max_segs && got < new_size;) {
3934 page = alloc_pages(priority, order);
3936 DEB(STbuffer->buffer_size = got);
3937 normalize_buffer(STbuffer);
3941 STbuffer->frp_segs += 1;
3943 STbuffer->buffer_size = got;
3944 STbuffer->reserved_pages[segs] = page;
3947 STbuffer->b_data = page_address(STbuffer->reserved_pages[0]);
3953 /* Make sure that no data from previous user is in the internal buffer */
3954 static void clear_buffer(struct st_buffer * st_bp)
3958 for (i=0; i < st_bp->frp_segs; i++)
3959 memset(page_address(st_bp->reserved_pages[i]), 0,
3960 PAGE_SIZE << st_bp->reserved_page_order);
3965 /* Release the extra buffer */
3966 static void normalize_buffer(struct st_buffer * STbuffer)
3968 int i, order = STbuffer->reserved_page_order;
3970 for (i = 0; i < STbuffer->frp_segs; i++) {
3971 __free_pages(STbuffer->reserved_pages[i], order);
3972 STbuffer->buffer_size -= (PAGE_SIZE << order);
3974 STbuffer->frp_segs = 0;
3975 STbuffer->sg_segs = 0;
3976 STbuffer->reserved_page_order = 0;
3977 STbuffer->map_data.offset = 0;
3981 /* Move data from the user buffer to the tape buffer. Returns zero (success) or
3982 negative error code. */
3983 static int append_to_buffer(const char __user *ubp, struct st_buffer * st_bp, int do_count)
3985 int i, cnt, res, offset;
3986 int length = PAGE_SIZE << st_bp->reserved_page_order;
3988 for (i = 0, offset = st_bp->buffer_bytes;
3989 i < st_bp->frp_segs && offset >= length; i++)
3991 if (i == st_bp->frp_segs) { /* Should never happen */
3992 printk(KERN_WARNING "st: append_to_buffer offset overflow.\n");
3995 for (; i < st_bp->frp_segs && do_count > 0; i++) {
3996 struct page *page = st_bp->reserved_pages[i];
3997 cnt = length - offset < do_count ? length - offset : do_count;
3998 res = copy_from_user(page_address(page) + offset, ubp, cnt);
4002 st_bp->buffer_bytes += cnt;
4006 if (do_count) /* Should never happen */
4013 /* Move data from the tape buffer to the user buffer. Returns zero (success) or
4014 negative error code. */
4015 static int from_buffer(struct st_buffer * st_bp, char __user *ubp, int do_count)
4017 int i, cnt, res, offset;
4018 int length = PAGE_SIZE << st_bp->reserved_page_order;
4020 for (i = 0, offset = st_bp->read_pointer;
4021 i < st_bp->frp_segs && offset >= length; i++)
4023 if (i == st_bp->frp_segs) { /* Should never happen */
4024 printk(KERN_WARNING "st: from_buffer offset overflow.\n");
4027 for (; i < st_bp->frp_segs && do_count > 0; i++) {
4028 struct page *page = st_bp->reserved_pages[i];
4029 cnt = length - offset < do_count ? length - offset : do_count;
4030 res = copy_to_user(ubp, page_address(page) + offset, cnt);
4034 st_bp->buffer_bytes -= cnt;
4035 st_bp->read_pointer += cnt;
4039 if (do_count) /* Should never happen */
4046 /* Move data towards start of buffer */
4047 static void move_buffer_data(struct st_buffer * st_bp, int offset)
4049 int src_seg, dst_seg, src_offset = 0, dst_offset;
4051 int length = PAGE_SIZE << st_bp->reserved_page_order;
4056 total=st_bp->buffer_bytes - offset;
4057 for (src_seg=0; src_seg < st_bp->frp_segs; src_seg++) {
4058 src_offset = offset;
4059 if (src_offset < length)
4064 st_bp->buffer_bytes = st_bp->read_pointer = total;
4065 for (dst_seg=dst_offset=0; total > 0; ) {
4066 struct page *dpage = st_bp->reserved_pages[dst_seg];
4067 struct page *spage = st_bp->reserved_pages[src_seg];
4069 count = min(length - dst_offset, length - src_offset);
4070 memmove(page_address(dpage) + dst_offset,
4071 page_address(spage) + src_offset, count);
4072 src_offset += count;
4073 if (src_offset >= length) {
4077 dst_offset += count;
4078 if (dst_offset >= length) {
4086 /* Validate the options from command line or module parameters */
4087 static void validate_options(void)
4090 st_fixed_buffer_size = buffer_kbs * ST_KILOBYTE;
4091 if (max_sg_segs >= ST_FIRST_SG)
4092 st_max_sg_segs = max_sg_segs;
4096 /* Set the boot options. Syntax is defined in Documenation/scsi/st.txt.
4098 static int __init st_setup(char *str)
4100 int i, len, ints[5];
4103 stp = get_options(str, ARRAY_SIZE(ints), ints);
4106 for (i = 0; i < ints[0] && i < ARRAY_SIZE(parms); i++)
4108 *parms[i].val = ints[i + 1];
4110 while (stp != NULL) {
4111 for (i = 0; i < ARRAY_SIZE(parms); i++) {
4112 len = strlen(parms[i].name);
4113 if (!strncmp(stp, parms[i].name, len) &&
4114 (*(stp + len) == ':' || *(stp + len) == '=')) {
4117 simple_strtoul(stp + len + 1, NULL, 0);
4119 printk(KERN_WARNING "st: Obsolete parameter %s\n",
4124 if (i >= ARRAY_SIZE(parms))
4125 printk(KERN_WARNING "st: invalid parameter in '%s'\n",
4127 stp = strchr(stp, ',');
4138 __setup("st=", st_setup);
4142 static const struct file_operations st_fops =
4144 .owner = THIS_MODULE,
4147 .unlocked_ioctl = st_ioctl,
4148 #ifdef CONFIG_COMPAT
4149 .compat_ioctl = st_compat_ioctl,
4153 .release = st_release,
4154 .llseek = noop_llseek,
4157 static int create_one_cdev(struct scsi_tape *tape, int mode, int rew)
4163 struct st_modedef *STm = &(tape->modes[mode]);
4165 int dev_num = tape->index;
4167 cdev_devno = MKDEV(SCSI_TAPE_MAJOR, TAPE_MINOR(dev_num, mode, rew));
4169 cdev = cdev_alloc();
4171 pr_err("st%d: out of memory. Device not attached.\n", dev_num);
4175 cdev->owner = THIS_MODULE;
4176 cdev->ops = &st_fops;
4177 STm->cdevs[rew] = cdev;
4179 error = cdev_add(cdev, cdev_devno, 1);
4181 pr_err("st%d: Can't add %s-rewind mode %d\n", dev_num,
4182 rew ? "non" : "auto", mode);
4183 pr_err("st%d: Device not attached.\n", dev_num);
4187 i = mode << (4 - ST_NBR_MODE_BITS);
4188 snprintf(name, 10, "%s%s%s", rew ? "n" : "",
4189 tape->name, st_formats[i]);
4191 dev = device_create(&st_sysfs_class, &tape->device->sdev_gendev,
4192 cdev_devno, &tape->modes[mode], "%s", name);
4194 pr_err("st%d: device_create failed\n", dev_num);
4195 error = PTR_ERR(dev);
4199 STm->devs[rew] = dev;
4203 cdev_del(STm->cdevs[rew]);
4205 STm->cdevs[rew] = NULL;
4206 STm->devs[rew] = NULL;
4210 static int create_cdevs(struct scsi_tape *tape)
4213 for (mode = 0; mode < ST_NBR_MODES; ++mode) {
4214 error = create_one_cdev(tape, mode, 0);
4217 error = create_one_cdev(tape, mode, 1);
4222 return sysfs_create_link(&tape->device->sdev_gendev.kobj,
4223 &tape->modes[0].devs[0]->kobj, "tape");
4226 static void remove_cdevs(struct scsi_tape *tape)
4229 sysfs_remove_link(&tape->device->sdev_gendev.kobj, "tape");
4230 for (mode = 0; mode < ST_NBR_MODES; mode++) {
4231 struct st_modedef *STm = &(tape->modes[mode]);
4232 for (rew = 0; rew < 2; rew++) {
4233 if (STm->cdevs[rew])
4234 cdev_del(STm->cdevs[rew]);
4236 device_unregister(STm->devs[rew]);
4241 static int st_probe(struct device *dev)
4243 struct scsi_device *SDp = to_scsi_device(dev);
4244 struct scsi_tape *tpnt = NULL;
4245 struct st_modedef *STm;
4246 struct st_partstat *STps;
4247 struct st_buffer *buffer;
4251 if (SDp->type != TYPE_TAPE)
4253 if ((stp = st_incompatible(SDp))) {
4254 sdev_printk(KERN_INFO, SDp,
4255 "OnStream tapes are no longer supported;\n");
4256 sdev_printk(KERN_INFO, SDp,
4257 "please mail to linux-scsi@vger.kernel.org.\n");
4261 scsi_autopm_get_device(SDp);
4262 i = queue_max_segments(SDp->request_queue);
4263 if (st_max_sg_segs < i)
4265 buffer = new_tape_buffer(i);
4266 if (buffer == NULL) {
4267 sdev_printk(KERN_ERR, SDp,
4268 "st: Can't allocate new tape buffer. "
4269 "Device not attached.\n");
4273 tpnt = kzalloc(sizeof(struct scsi_tape), GFP_KERNEL);
4275 sdev_printk(KERN_ERR, SDp,
4276 "st: Can't allocate device descriptor.\n");
4277 goto out_buffer_free;
4279 kref_init(&tpnt->kref);
4282 if (SDp->scsi_level <= 2)
4283 tpnt->tape_type = MT_ISSCSI1;
4285 tpnt->tape_type = MT_ISSCSI2;
4287 tpnt->buffer = buffer;
4288 tpnt->buffer->last_SRpnt = NULL;
4293 tpnt->drv_buffer = 1; /* Try buffering if no mode sense */
4294 tpnt->use_pf = (SDp->scsi_level >= SCSI_2);
4296 tpnt->do_auto_lock = ST_AUTO_LOCK;
4297 tpnt->can_bsr = (SDp->scsi_level > 2 ? 1 : ST_IN_FILE_POS); /* BSR mandatory in SCSI3 */
4298 tpnt->can_partitions = 0;
4299 tpnt->two_fm = ST_TWO_FM;
4300 tpnt->fast_mteom = ST_FAST_MTEOM;
4301 tpnt->scsi2_logical = ST_SCSI2LOGICAL;
4302 tpnt->sili = ST_SILI;
4303 tpnt->immediate = ST_NOWAIT;
4304 tpnt->immediate_filemark = 0;
4305 tpnt->default_drvbuffer = 0xff; /* No forced buffering */
4306 tpnt->partition = 0;
4307 tpnt->new_partition = 0;
4308 tpnt->nbr_partitions = 0;
4309 blk_queue_rq_timeout(tpnt->device->request_queue, ST_TIMEOUT);
4310 tpnt->long_timeout = ST_LONG_TIMEOUT;
4311 tpnt->try_dio = try_direct_io;
4313 for (i = 0; i < ST_NBR_MODES; i++) {
4314 STm = &(tpnt->modes[i]);
4316 STm->sysv = ST_SYSV;
4317 STm->defaults_for_writes = 0;
4318 STm->do_async_writes = ST_ASYNC_WRITES;
4319 STm->do_buffer_writes = ST_BUFFER_WRITES;
4320 STm->do_read_ahead = ST_READ_AHEAD;
4321 STm->default_compression = ST_DONT_TOUCH;
4322 STm->default_blksize = (-1); /* No forced size */
4323 STm->default_density = (-1); /* No forced density */
4327 for (i = 0; i < ST_NBR_PARTITIONS; i++) {
4328 STps = &(tpnt->ps[i]);
4330 STps->eof = ST_NOEOF;
4332 STps->last_block_valid = 0;
4333 STps->drv_block = (-1);
4334 STps->drv_file = (-1);
4337 tpnt->current_mode = 0;
4338 tpnt->modes[0].defined = 1;
4340 tpnt->density_changed = tpnt->compression_changed =
4341 tpnt->blksize_changed = 0;
4342 mutex_init(&tpnt->lock);
4344 idr_preload(GFP_KERNEL);
4345 spin_lock(&st_index_lock);
4346 error = idr_alloc(&st_index_idr, tpnt, 0, ST_MAX_TAPES + 1, GFP_NOWAIT);
4347 spin_unlock(&st_index_lock);
4350 pr_warn("st: idr allocation failed: %d\n", error);
4353 tpnt->index = error;
4354 sprintf(tpnt->name, "st%d", tpnt->index);
4355 tpnt->stats = kzalloc(sizeof(struct scsi_tape_stats), GFP_KERNEL);
4356 if (tpnt->stats == NULL) {
4357 sdev_printk(KERN_ERR, SDp,
4358 "st: Can't allocate statistics.\n");
4359 goto out_idr_remove;
4362 dev_set_drvdata(dev, tpnt);
4365 error = create_cdevs(tpnt);
4367 goto out_remove_devs;
4368 scsi_autopm_put_device(SDp);
4370 sdev_printk(KERN_NOTICE, SDp,
4371 "Attached scsi tape %s\n", tpnt->name);
4372 sdev_printk(KERN_INFO, SDp, "%s: try direct i/o: %s (alignment %d B)\n",
4373 tpnt->name, tpnt->try_dio ? "yes" : "no",
4374 queue_dma_alignment(SDp->request_queue) + 1);
4382 spin_lock(&st_index_lock);
4383 idr_remove(&st_index_idr, tpnt->index);
4384 spin_unlock(&st_index_lock);
4390 scsi_autopm_put_device(SDp);
4395 static int st_remove(struct device *dev)
4397 struct scsi_tape *tpnt = dev_get_drvdata(dev);
4398 int index = tpnt->index;
4400 scsi_autopm_get_device(to_scsi_device(dev));
4403 mutex_lock(&st_ref_mutex);
4404 kref_put(&tpnt->kref, scsi_tape_release);
4405 mutex_unlock(&st_ref_mutex);
4406 spin_lock(&st_index_lock);
4407 idr_remove(&st_index_idr, index);
4408 spin_unlock(&st_index_lock);
4413 * scsi_tape_release - Called to free the Scsi_Tape structure
4414 * @kref: pointer to embedded kref
4416 * st_ref_mutex must be held entering this routine. Because it is
4417 * called on last put, you should always use the scsi_tape_get()
4418 * scsi_tape_put() helpers which manipulate the semaphore directly
4419 * and never do a direct kref_put().
4421 static void scsi_tape_release(struct kref *kref)
4423 struct scsi_tape *tpnt = to_scsi_tape(kref);
4425 tpnt->device = NULL;
4428 normalize_buffer(tpnt->buffer);
4429 kfree(tpnt->buffer->reserved_pages);
4430 kfree(tpnt->buffer);
4438 static struct class st_sysfs_class = {
4439 .name = "scsi_tape",
4440 .dev_groups = st_dev_groups,
4443 static int __init init_st(void)
4449 printk(KERN_INFO "st: Version %s, fixed bufsize %d, s/g segs %d\n",
4450 verstr, st_fixed_buffer_size, st_max_sg_segs);
4452 debugging = (debug_flag > 0) ? debug_flag : NO_DEBUG;
4454 printk(KERN_INFO "st: Debugging enabled debug_flag = %d\n",
4458 err = class_register(&st_sysfs_class);
4460 pr_err("Unable register sysfs class for SCSI tapes\n");
4464 err = register_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
4465 ST_MAX_TAPE_ENTRIES, "st");
4467 printk(KERN_ERR "Unable to get major %d for SCSI tapes\n",
4472 err = scsi_register_driver(&st_template.gendrv);
4479 unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
4480 ST_MAX_TAPE_ENTRIES);
4482 class_unregister(&st_sysfs_class);
4486 static void __exit exit_st(void)
4488 scsi_unregister_driver(&st_template.gendrv);
4489 unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
4490 ST_MAX_TAPE_ENTRIES);
4491 class_unregister(&st_sysfs_class);
4492 idr_destroy(&st_index_idr);
4493 printk(KERN_INFO "st: Unloaded.\n");
4496 module_init(init_st);
4497 module_exit(exit_st);
4500 /* The sysfs driver interface. Read-only at the moment */
4501 static ssize_t try_direct_io_show(struct device_driver *ddp, char *buf)
4503 return scnprintf(buf, PAGE_SIZE, "%d\n", try_direct_io);
4505 static DRIVER_ATTR_RO(try_direct_io);
4507 static ssize_t fixed_buffer_size_show(struct device_driver *ddp, char *buf)
4509 return scnprintf(buf, PAGE_SIZE, "%d\n", st_fixed_buffer_size);
4511 static DRIVER_ATTR_RO(fixed_buffer_size);
4513 static ssize_t max_sg_segs_show(struct device_driver *ddp, char *buf)
4515 return scnprintf(buf, PAGE_SIZE, "%d\n", st_max_sg_segs);
4517 static DRIVER_ATTR_RO(max_sg_segs);
4519 static ssize_t version_show(struct device_driver *ddd, char *buf)
4521 return scnprintf(buf, PAGE_SIZE, "[%s]\n", verstr);
4523 static DRIVER_ATTR_RO(version);
4526 static ssize_t debug_flag_store(struct device_driver *ddp,
4527 const char *buf, size_t count)
4529 /* We only care what the first byte of the data is the rest is unused.
4530 * if it's a '1' we turn on debug and if it's a '0' we disable it. All
4531 * other values have -EINVAL returned if they are passed in.
4534 if (buf[0] == '0') {
4535 debugging = NO_DEBUG;
4537 } else if (buf[0] == '1') {
4545 static ssize_t debug_flag_show(struct device_driver *ddp, char *buf)
4547 return scnprintf(buf, PAGE_SIZE, "%d\n", debugging);
4549 static DRIVER_ATTR_RW(debug_flag);
4552 static struct attribute *st_drv_attrs[] = {
4553 &driver_attr_try_direct_io.attr,
4554 &driver_attr_fixed_buffer_size.attr,
4555 &driver_attr_max_sg_segs.attr,
4556 &driver_attr_version.attr,
4558 &driver_attr_debug_flag.attr,
4562 ATTRIBUTE_GROUPS(st_drv);
4564 /* The sysfs simple class interface */
4566 defined_show(struct device *dev, struct device_attribute *attr, char *buf)
4568 struct st_modedef *STm = dev_get_drvdata(dev);
4571 l = snprintf(buf, PAGE_SIZE, "%d\n", STm->defined);
4574 static DEVICE_ATTR_RO(defined);
4577 default_blksize_show(struct device *dev, struct device_attribute *attr,
4580 struct st_modedef *STm = dev_get_drvdata(dev);
4583 l = snprintf(buf, PAGE_SIZE, "%d\n", STm->default_blksize);
4586 static DEVICE_ATTR_RO(default_blksize);
4589 default_density_show(struct device *dev, struct device_attribute *attr,
4592 struct st_modedef *STm = dev_get_drvdata(dev);
4596 fmt = STm->default_density >= 0 ? "0x%02x\n" : "%d\n";
4597 l = snprintf(buf, PAGE_SIZE, fmt, STm->default_density);
4600 static DEVICE_ATTR_RO(default_density);
4603 default_compression_show(struct device *dev, struct device_attribute *attr,
4606 struct st_modedef *STm = dev_get_drvdata(dev);
4609 l = snprintf(buf, PAGE_SIZE, "%d\n", STm->default_compression - 1);
4612 static DEVICE_ATTR_RO(default_compression);
4615 options_show(struct device *dev, struct device_attribute *attr, char *buf)
4617 struct st_modedef *STm = dev_get_drvdata(dev);
4618 struct scsi_tape *STp = STm->tape;
4622 options = STm->do_buffer_writes ? MT_ST_BUFFER_WRITES : 0;
4623 options |= STm->do_async_writes ? MT_ST_ASYNC_WRITES : 0;
4624 options |= STm->do_read_ahead ? MT_ST_READ_AHEAD : 0;
4625 DEB( options |= debugging ? MT_ST_DEBUGGING : 0 );
4626 options |= STp->two_fm ? MT_ST_TWO_FM : 0;
4627 options |= STp->fast_mteom ? MT_ST_FAST_MTEOM : 0;
4628 options |= STm->defaults_for_writes ? MT_ST_DEF_WRITES : 0;
4629 options |= STp->can_bsr ? MT_ST_CAN_BSR : 0;
4630 options |= STp->omit_blklims ? MT_ST_NO_BLKLIMS : 0;
4631 options |= STp->can_partitions ? MT_ST_CAN_PARTITIONS : 0;
4632 options |= STp->scsi2_logical ? MT_ST_SCSI2LOGICAL : 0;
4633 options |= STm->sysv ? MT_ST_SYSV : 0;
4634 options |= STp->immediate ? MT_ST_NOWAIT : 0;
4635 options |= STp->immediate_filemark ? MT_ST_NOWAIT_EOF : 0;
4636 options |= STp->sili ? MT_ST_SILI : 0;
4638 l = snprintf(buf, PAGE_SIZE, "0x%08x\n", options);
4641 static DEVICE_ATTR_RO(options);
4643 /* Support for tape stats */
4646 * read_cnt_show - return read count - count of reads made from tape drive
4647 * @dev: struct device
4648 * @attr: attribute structure
4649 * @buf: buffer to return formatted data in
4651 static ssize_t read_cnt_show(struct device *dev,
4652 struct device_attribute *attr, char *buf)
4654 struct st_modedef *STm = dev_get_drvdata(dev);
4656 return sprintf(buf, "%lld",
4657 (long long)atomic64_read(&STm->tape->stats->read_cnt));
4659 static DEVICE_ATTR_RO(read_cnt);
4662 * read_byte_cnt_show - return read byte count - tape drives
4663 * may use blocks less than 512 bytes this gives the raw byte count of
4664 * of data read from the tape drive.
4665 * @dev: struct device
4666 * @attr: attribute structure
4667 * @buf: buffer to return formatted data in
4669 static ssize_t read_byte_cnt_show(struct device *dev,
4670 struct device_attribute *attr, char *buf)
4672 struct st_modedef *STm = dev_get_drvdata(dev);
4674 return sprintf(buf, "%lld",
4675 (long long)atomic64_read(&STm->tape->stats->read_byte_cnt));
4677 static DEVICE_ATTR_RO(read_byte_cnt);
4680 * read_ns_show - return read ns - overall time spent waiting on reads in ns.
4681 * @dev: struct device
4682 * @attr: attribute structure
4683 * @buf: buffer to return formatted data in
4685 static ssize_t read_ns_show(struct device *dev,
4686 struct device_attribute *attr, char *buf)
4688 struct st_modedef *STm = dev_get_drvdata(dev);
4690 return sprintf(buf, "%lld",
4691 (long long)atomic64_read(&STm->tape->stats->tot_read_time));
4693 static DEVICE_ATTR_RO(read_ns);
4696 * write_cnt_show - write count - number of user calls
4697 * to write(2) that have written data to tape.
4698 * @dev: struct device
4699 * @attr: attribute structure
4700 * @buf: buffer to return formatted data in
4702 static ssize_t write_cnt_show(struct device *dev,
4703 struct device_attribute *attr, char *buf)
4705 struct st_modedef *STm = dev_get_drvdata(dev);
4707 return sprintf(buf, "%lld",
4708 (long long)atomic64_read(&STm->tape->stats->write_cnt));
4710 static DEVICE_ATTR_RO(write_cnt);
4713 * write_byte_cnt_show - write byte count - raw count of
4714 * bytes written to tape.
4715 * @dev: struct device
4716 * @attr: attribute structure
4717 * @buf: buffer to return formatted data in
4719 static ssize_t write_byte_cnt_show(struct device *dev,
4720 struct device_attribute *attr, char *buf)
4722 struct st_modedef *STm = dev_get_drvdata(dev);
4724 return sprintf(buf, "%lld",
4725 (long long)atomic64_read(&STm->tape->stats->write_byte_cnt));
4727 static DEVICE_ATTR_RO(write_byte_cnt);
4730 * write_ns_show - write ns - number of nanoseconds waiting on write
4731 * requests to complete.
4732 * @dev: struct device
4733 * @attr: attribute structure
4734 * @buf: buffer to return formatted data in
4736 static ssize_t write_ns_show(struct device *dev,
4737 struct device_attribute *attr, char *buf)
4739 struct st_modedef *STm = dev_get_drvdata(dev);
4741 return sprintf(buf, "%lld",
4742 (long long)atomic64_read(&STm->tape->stats->tot_write_time));
4744 static DEVICE_ATTR_RO(write_ns);
4747 * in_flight_show - number of I/Os currently in flight -
4748 * in most cases this will be either 0 or 1. It may be higher if someone
4749 * has also issued other SCSI commands such as via an ioctl.
4750 * @dev: struct device
4751 * @attr: attribute structure
4752 * @buf: buffer to return formatted data in
4754 static ssize_t in_flight_show(struct device *dev,
4755 struct device_attribute *attr, char *buf)
4757 struct st_modedef *STm = dev_get_drvdata(dev);
4759 return sprintf(buf, "%lld",
4760 (long long)atomic64_read(&STm->tape->stats->in_flight));
4762 static DEVICE_ATTR_RO(in_flight);
4765 * io_ns_show - io wait ns - this is the number of ns spent
4766 * waiting on all I/O to complete. This includes tape movement commands
4767 * such as rewinding, seeking to end of file or tape, it also includes
4768 * read and write. To determine the time spent on tape movement
4769 * subtract the read and write ns from this value.
4770 * @dev: struct device
4771 * @attr: attribute structure
4772 * @buf: buffer to return formatted data in
4774 static ssize_t io_ns_show(struct device *dev,
4775 struct device_attribute *attr, char *buf)
4777 struct st_modedef *STm = dev_get_drvdata(dev);
4779 return sprintf(buf, "%lld",
4780 (long long)atomic64_read(&STm->tape->stats->tot_io_time));
4782 static DEVICE_ATTR_RO(io_ns);
4785 * other_cnt_show - other io count - this is the number of
4786 * I/O requests other than read and write requests.
4787 * Typically these are tape movement requests but will include driver
4788 * tape movement. This includes only requests issued by the st driver.
4789 * @dev: struct device
4790 * @attr: attribute structure
4791 * @buf: buffer to return formatted data in
4793 static ssize_t other_cnt_show(struct device *dev,
4794 struct device_attribute *attr, char *buf)
4796 struct st_modedef *STm = dev_get_drvdata(dev);
4798 return sprintf(buf, "%lld",
4799 (long long)atomic64_read(&STm->tape->stats->other_cnt));
4801 static DEVICE_ATTR_RO(other_cnt);
4804 * resid_cnt_show - A count of the number of times we get a residual
4805 * count - this should indicate someone issuing reads larger than the
4806 * block size on tape.
4807 * @dev: struct device
4808 * @attr: attribute structure
4809 * @buf: buffer to return formatted data in
4811 static ssize_t resid_cnt_show(struct device *dev,
4812 struct device_attribute *attr, char *buf)
4814 struct st_modedef *STm = dev_get_drvdata(dev);
4816 return sprintf(buf, "%lld",
4817 (long long)atomic64_read(&STm->tape->stats->resid_cnt));
4819 static DEVICE_ATTR_RO(resid_cnt);
4821 static struct attribute *st_dev_attrs[] = {
4822 &dev_attr_defined.attr,
4823 &dev_attr_default_blksize.attr,
4824 &dev_attr_default_density.attr,
4825 &dev_attr_default_compression.attr,
4826 &dev_attr_options.attr,
4830 static struct attribute *st_stats_attrs[] = {
4831 &dev_attr_read_cnt.attr,
4832 &dev_attr_read_byte_cnt.attr,
4833 &dev_attr_read_ns.attr,
4834 &dev_attr_write_cnt.attr,
4835 &dev_attr_write_byte_cnt.attr,
4836 &dev_attr_write_ns.attr,
4837 &dev_attr_in_flight.attr,
4838 &dev_attr_io_ns.attr,
4839 &dev_attr_other_cnt.attr,
4840 &dev_attr_resid_cnt.attr,
4844 static struct attribute_group stats_group = {
4846 .attrs = st_stats_attrs,
4849 static struct attribute_group st_group = {
4850 .attrs = st_dev_attrs,
4853 static const struct attribute_group *st_dev_groups[] = {
4859 /* The following functions may be useful for a larger audience. */
4860 static int sgl_map_user_pages(struct st_buffer *STbp,
4861 const unsigned int max_pages, unsigned long uaddr,
4862 size_t count, int rw)
4864 unsigned long end = (uaddr + count + PAGE_SIZE - 1) >> PAGE_SHIFT;
4865 unsigned long start = uaddr >> PAGE_SHIFT;
4866 const int nr_pages = end - start;
4868 struct page **pages;
4869 struct rq_map_data *mdata = &STbp->map_data;
4871 /* User attempted Overflow! */
4872 if ((uaddr + count) < uaddr)
4876 if (nr_pages > max_pages)
4883 pages = kmalloc_array(max_pages, sizeof(*pages), GFP_KERNEL);
4887 /* Try to fault in all of the necessary pages */
4888 /* rw==READ means read from drive, write into memory area */
4889 res = pin_user_pages_fast(uaddr, nr_pages, rw == READ ? FOLL_WRITE : 0,
4892 /* Errors and no page mapped should return here */
4896 for (i=0; i < nr_pages; i++) {
4897 /* FIXME: flush superflous for rw==READ,
4898 * probably wrong function for rw==WRITE
4900 flush_dcache_page(pages[i]);
4903 mdata->offset = uaddr & ~PAGE_MASK;
4904 STbp->mapped_pages = pages;
4909 unpin_user_pages(pages, res);
4917 /* And unmap them... */
4918 static int sgl_unmap_user_pages(struct st_buffer *STbp,
4919 const unsigned int nr_pages, int dirtied)
4921 /* FIXME: cache flush missing for rw==READ */
4922 unpin_user_pages_dirty_lock(STbp->mapped_pages, nr_pages, dirtied);
4924 kfree(STbp->mapped_pages);
4925 STbp->mapped_pages = NULL;