2 SCSI Tape Driver for Linux version 1.1 and newer. See the accompanying
3 file Documentation/scsi/st.txt for more information.
6 Rewritten from Dwayne Forsyth's SCSI tape driver by Kai Makisara.
7 Contribution and ideas from several people including (in alphabetical
8 order) Klaus Ehrenfried, Eugene Exarevsky, Eric Lee Green, Wolfgang Denk,
9 Steve Hirsch, Andreas Koppenh"ofer, Michael Leodolter, Eyal Lebedinsky,
10 Michael Schaefer, J"org Weule, and Eric Youngdale.
12 Copyright 1992 - 2008 Kai Makisara
13 email Kai.Makisara@kolumbus.fi
15 Some small formal changes - aeb, 950809
17 Last modified: 18-JAN-1998 Richard Gooch <rgooch@atnf.csiro.au> Devfs support
20 static const char *verstr = "20080504";
22 #include <linux/module.h>
25 #include <linux/kernel.h>
26 #include <linux/sched.h>
28 #include <linux/init.h>
29 #include <linux/string.h>
30 #include <linux/errno.h>
31 #include <linux/mtio.h>
32 #include <linux/cdrom.h>
33 #include <linux/ioctl.h>
34 #include <linux/fcntl.h>
35 #include <linux/spinlock.h>
36 #include <linux/blkdev.h>
37 #include <linux/moduleparam.h>
38 #include <linux/cdev.h>
39 #include <linux/delay.h>
40 #include <linux/mutex.h>
41 #include <linux/smp_lock.h>
43 #include <asm/uaccess.h>
45 #include <asm/system.h>
47 #include <scsi/scsi.h>
48 #include <scsi/scsi_dbg.h>
49 #include <scsi/scsi_device.h>
50 #include <scsi/scsi_driver.h>
51 #include <scsi/scsi_eh.h>
52 #include <scsi/scsi_host.h>
53 #include <scsi/scsi_ioctl.h>
57 /* The driver prints some debugging information on the console if DEBUG
58 is defined and non-zero. */
62 /* The message level for the debug messages is currently set to KERN_NOTICE
63 so that people can easily see the messages. Later when the debugging messages
64 in the drivers are more widely classified, this may be changed to KERN_DEBUG. */
65 #define ST_DEB_MSG KERN_NOTICE
67 #define DEBC(a) if (debugging) { a ; }
73 #define ST_KILOBYTE 1024
75 #include "st_options.h"
78 static int buffer_kbs;
79 static int max_sg_segs;
80 static int try_direct_io = TRY_DIRECT_IO;
81 static int try_rdio = 1;
82 static int try_wdio = 1;
84 static int st_dev_max;
87 static struct class *st_sysfs_class;
89 MODULE_AUTHOR("Kai Makisara");
90 MODULE_DESCRIPTION("SCSI tape (st) driver");
91 MODULE_LICENSE("GPL");
92 MODULE_ALIAS_CHARDEV_MAJOR(SCSI_TAPE_MAJOR);
93 MODULE_ALIAS_SCSI_DEVICE(TYPE_TAPE);
95 /* Set 'perm' (4th argument) to 0 to disable module_param's definition
96 * of sysfs parameters (which module_param doesn't yet support).
97 * Sysfs parameters defined explicitly later.
99 module_param_named(buffer_kbs, buffer_kbs, int, 0);
100 MODULE_PARM_DESC(buffer_kbs, "Default driver buffer size for fixed block mode (KB; 32)");
101 module_param_named(max_sg_segs, max_sg_segs, int, 0);
102 MODULE_PARM_DESC(max_sg_segs, "Maximum number of scatter/gather segments to use (256)");
103 module_param_named(try_direct_io, try_direct_io, int, 0);
104 MODULE_PARM_DESC(try_direct_io, "Try direct I/O between user buffer and tape drive (1)");
106 /* Extra parameters for testing */
107 module_param_named(try_rdio, try_rdio, int, 0);
108 MODULE_PARM_DESC(try_rdio, "Try direct read i/o when possible");
109 module_param_named(try_wdio, try_wdio, int, 0);
110 MODULE_PARM_DESC(try_wdio, "Try direct write i/o when possible");
113 static int write_threshold_kbs; /* retained for compatibility */
114 static struct st_dev_parm {
117 } parms[] __initdata = {
119 "buffer_kbs", &buffer_kbs
121 { /* Retained for compatibility with 2.4 */
122 "write_threshold_kbs", &write_threshold_kbs
128 "try_direct_io", &try_direct_io
133 /* Restrict the number of modes so that names for all are assigned */
134 #if ST_NBR_MODES > 16
135 #error "Maximum number of modes is 16"
137 /* Bit reversed order to get same names for same minors with all
139 static const char *st_formats[] = {
140 "", "r", "k", "s", "l", "t", "o", "u",
141 "m", "v", "p", "x", "a", "y", "q", "z"};
143 /* The default definitions have been moved to st_options.h */
145 #define ST_FIXED_BUFFER_SIZE (ST_FIXED_BUFFER_BLOCKS * ST_KILOBYTE)
147 /* The buffer size should fit into the 24 bits for length in the
148 6-byte SCSI read and write commands. */
149 #if ST_FIXED_BUFFER_SIZE >= (2 << 24 - 1)
150 #error "Buffer size should not exceed (2 << 24 - 1) bytes!"
153 static int debugging = DEBUG;
155 #define MAX_RETRIES 0
156 #define MAX_WRITE_RETRIES 0
157 #define MAX_READY_RETRIES 0
158 #define NO_TAPE NOT_READY
160 #define ST_TIMEOUT (900 * HZ)
161 #define ST_LONG_TIMEOUT (14000 * HZ)
163 /* Remove mode bits and auto-rewind bit (7) */
164 #define TAPE_NR(x) ( ((iminor(x) & ~255) >> (ST_NBR_MODE_BITS + 1)) | \
165 (iminor(x) & ~(-1 << ST_MODE_SHIFT)) )
166 #define TAPE_MODE(x) ((iminor(x) & ST_MODE_MASK) >> ST_MODE_SHIFT)
168 /* Construct the minor number from the device (d), mode (m), and non-rewind (n) data */
169 #define TAPE_MINOR(d, m, n) (((d & ~(255 >> (ST_NBR_MODE_BITS + 1))) << (ST_NBR_MODE_BITS + 1)) | \
170 (d & (255 >> (ST_NBR_MODE_BITS + 1))) | (m << ST_MODE_SHIFT) | ((n != 0) << 7) )
172 /* Internal ioctl to set both density (uppermost 8 bits) and blocksize (lower
174 #define SET_DENS_AND_BLK 0x10001
176 static DEFINE_RWLOCK(st_dev_arr_lock);
178 static int st_fixed_buffer_size = ST_FIXED_BUFFER_SIZE;
179 static int st_max_sg_segs = ST_MAX_SG;
181 static struct scsi_tape **scsi_tapes = NULL;
183 static int modes_defined;
185 static struct st_buffer *new_tape_buffer(int, int, int);
186 static int enlarge_buffer(struct st_buffer *, int, int);
187 static void clear_buffer(struct st_buffer *);
188 static void normalize_buffer(struct st_buffer *);
189 static int append_to_buffer(const char __user *, struct st_buffer *, int);
190 static int from_buffer(struct st_buffer *, char __user *, int);
191 static void move_buffer_data(struct st_buffer *, int);
192 static void buf_to_sg(struct st_buffer *, unsigned int);
194 static int sgl_map_user_pages(struct scatterlist *, const unsigned int,
195 unsigned long, size_t, int);
196 static int sgl_unmap_user_pages(struct scatterlist *, const unsigned int, int);
198 static int st_probe(struct device *);
199 static int st_remove(struct device *);
201 static int do_create_sysfs_files(void);
202 static void do_remove_sysfs_files(void);
203 static int do_create_class_files(struct scsi_tape *, int, int);
205 static struct scsi_driver st_template = {
206 .owner = THIS_MODULE,
214 static int st_compression(struct scsi_tape *, int);
216 static int find_partition(struct scsi_tape *);
217 static int switch_partition(struct scsi_tape *);
219 static int st_int_ioctl(struct scsi_tape *, unsigned int, unsigned long);
221 static void scsi_tape_release(struct kref *);
223 #define to_scsi_tape(obj) container_of(obj, struct scsi_tape, kref)
225 static DEFINE_MUTEX(st_ref_mutex);
228 #include "osst_detect.h"
229 #ifndef SIGS_FROM_OSST
230 #define SIGS_FROM_OSST \
231 {"OnStream", "SC-", "", "osst"}, \
232 {"OnStream", "DI-", "", "osst"}, \
233 {"OnStream", "DP-", "", "osst"}, \
234 {"OnStream", "USB", "", "osst"}, \
235 {"OnStream", "FW-", "", "osst"}
238 static struct scsi_tape *scsi_tape_get(int dev)
240 struct scsi_tape *STp = NULL;
242 mutex_lock(&st_ref_mutex);
243 write_lock(&st_dev_arr_lock);
245 if (dev < st_dev_max && scsi_tapes != NULL)
246 STp = scsi_tapes[dev];
249 kref_get(&STp->kref);
254 if (scsi_device_get(STp->device))
260 kref_put(&STp->kref, scsi_tape_release);
263 write_unlock(&st_dev_arr_lock);
264 mutex_unlock(&st_ref_mutex);
268 static void scsi_tape_put(struct scsi_tape *STp)
270 struct scsi_device *sdev = STp->device;
272 mutex_lock(&st_ref_mutex);
273 kref_put(&STp->kref, scsi_tape_release);
274 scsi_device_put(sdev);
275 mutex_unlock(&st_ref_mutex);
278 struct st_reject_data {
282 char *driver_hint; /* Name of the correct driver, NULL if unknown */
285 static struct st_reject_data reject_list[] = {
286 /* {"XXX", "Yy-", "", NULL}, example */
290 /* If the device signature is on the list of incompatible drives, the
291 function returns a pointer to the name of the correct driver (if known) */
292 static char * st_incompatible(struct scsi_device* SDp)
294 struct st_reject_data *rp;
296 for (rp=&(reject_list[0]); rp->vendor != NULL; rp++)
297 if (!strncmp(rp->vendor, SDp->vendor, strlen(rp->vendor)) &&
298 !strncmp(rp->model, SDp->model, strlen(rp->model)) &&
299 !strncmp(rp->rev, SDp->rev, strlen(rp->rev))) {
301 return rp->driver_hint;
309 static inline char *tape_name(struct scsi_tape *tape)
311 return tape->disk->disk_name;
315 static void st_analyze_sense(struct st_request *SRpnt, struct st_cmdstatus *s)
318 const u8 *sense = SRpnt->sense;
320 s->have_sense = scsi_normalize_sense(SRpnt->sense,
321 SCSI_SENSE_BUFFERSIZE, &s->sense_hdr);
327 scsi_get_sense_info_fld(sense, SCSI_SENSE_BUFFERSIZE, &s->uremainder64);
328 switch (sense[0] & 0x7f) {
333 s->flags = sense[2] & 0xe0;
339 ucp = scsi_sense_desc_find(sense, SCSI_SENSE_BUFFERSIZE, 4);
340 s->flags = ucp ? (ucp[3] & 0xe0) : 0;
347 /* Convert the result to success code */
348 static int st_chk_result(struct scsi_tape *STp, struct st_request * SRpnt)
350 int result = SRpnt->result;
352 DEB(const char *stp;)
353 char *name = tape_name(STp);
354 struct st_cmdstatus *cmdstatp;
359 cmdstatp = &STp->buffer->cmdstat;
360 st_analyze_sense(SRpnt, cmdstatp);
362 if (cmdstatp->have_sense)
363 scode = STp->buffer->cmdstat.sense_hdr.sense_key;
369 printk(ST_DEB_MSG "%s: Error: %x, cmd: %x %x %x %x %x %x\n",
371 SRpnt->cmd[0], SRpnt->cmd[1], SRpnt->cmd[2],
372 SRpnt->cmd[3], SRpnt->cmd[4], SRpnt->cmd[5]);
373 if (cmdstatp->have_sense)
374 __scsi_print_sense(name, SRpnt->sense, SCSI_SENSE_BUFFERSIZE);
376 if (!debugging) { /* Abnormal conditions for tape */
377 if (!cmdstatp->have_sense)
379 "%s: Error %x (sugg. bt 0x%x, driver bt 0x%x, host bt 0x%x).\n",
380 name, result, suggestion(result),
381 driver_byte(result) & DRIVER_MASK, host_byte(result));
382 else if (cmdstatp->have_sense &&
384 scode != RECOVERED_ERROR &&
385 /* scode != UNIT_ATTENTION && */
386 scode != BLANK_CHECK &&
387 scode != VOLUME_OVERFLOW &&
388 SRpnt->cmd[0] != MODE_SENSE &&
389 SRpnt->cmd[0] != TEST_UNIT_READY) {
391 __scsi_print_sense(name, SRpnt->sense, SCSI_SENSE_BUFFERSIZE);
395 if (cmdstatp->fixed_format &&
396 STp->cln_mode >= EXTENDED_SENSE_START) { /* Only fixed format sense */
397 if (STp->cln_sense_value)
398 STp->cleaning_req |= ((SRpnt->sense[STp->cln_mode] &
399 STp->cln_sense_mask) == STp->cln_sense_value);
401 STp->cleaning_req |= ((SRpnt->sense[STp->cln_mode] &
402 STp->cln_sense_mask) != 0);
404 if (cmdstatp->have_sense &&
405 cmdstatp->sense_hdr.asc == 0 && cmdstatp->sense_hdr.ascq == 0x17)
406 STp->cleaning_req = 1; /* ASC and ASCQ => cleaning requested */
408 STp->pos_unknown |= STp->device->was_reset;
410 if (cmdstatp->have_sense &&
411 scode == RECOVERED_ERROR
412 #if ST_RECOVERED_WRITE_FATAL
413 && SRpnt->cmd[0] != WRITE_6
414 && SRpnt->cmd[0] != WRITE_FILEMARKS
417 STp->recover_count++;
422 if (SRpnt->cmd[0] == READ_6)
424 else if (SRpnt->cmd[0] == WRITE_6)
428 printk(ST_DEB_MSG "%s: Recovered %s error (%d).\n", name, stp,
432 if (cmdstatp->flags == 0)
439 /* Wakeup from interrupt */
440 static void st_sleep_done(void *data, char *sense, int result, int resid)
442 struct st_request *SRpnt = data;
443 struct scsi_tape *STp = SRpnt->stp;
445 memcpy(SRpnt->sense, sense, SCSI_SENSE_BUFFERSIZE);
446 (STp->buffer)->cmdstat.midlevel_result = SRpnt->result = result;
447 (STp->buffer)->cmdstat.residual = resid;
448 DEB( STp->write_pending = 0; )
451 complete(SRpnt->waiting);
454 static struct st_request *st_allocate_request(struct scsi_tape *stp)
456 struct st_request *streq;
458 streq = kzalloc(sizeof(*streq), GFP_KERNEL);
462 DEBC(printk(KERN_ERR "%s: Can't get SCSI request.\n",
464 if (signal_pending(current))
465 stp->buffer->syscall_result = -EINTR;
467 stp->buffer->syscall_result = -EBUSY;
473 static void st_release_request(struct st_request *streq)
478 static void st_scsi_execute_end(struct request *req, int uptodate)
480 struct st_request *SRpnt = req->end_io_data;
481 struct scsi_tape *STp = SRpnt->stp;
483 STp->buffer->cmdstat.midlevel_result = SRpnt->result = req->errors;
484 STp->buffer->cmdstat.residual = req->data_len;
487 complete(SRpnt->waiting);
489 blk_rq_unmap_user(SRpnt->bio);
490 __blk_put_request(req->q, req);
493 static int st_scsi_execute(struct st_request *SRpnt, const unsigned char *cmd,
494 int data_direction, void *buffer, unsigned bufflen,
495 int timeout, int retries)
498 struct rq_map_data *mdata = &SRpnt->stp->buffer->map_data;
500 int write = (data_direction == DMA_TO_DEVICE);
502 req = blk_get_request(SRpnt->stp->device->request_queue, write,
505 return DRIVER_ERROR << 24;
507 req->cmd_type = REQ_TYPE_BLOCK_PC;
508 req->cmd_flags |= REQ_QUIET;
510 mdata->null_mapped = 1;
512 err = blk_rq_map_user(req->q, req, mdata, NULL, bufflen, GFP_KERNEL);
514 blk_put_request(req);
515 return DRIVER_ERROR << 24;
518 SRpnt->bio = req->bio;
519 req->cmd_len = COMMAND_SIZE(cmd[0]);
520 memset(req->cmd, 0, BLK_MAX_CDB);
521 memcpy(req->cmd, cmd, req->cmd_len);
522 req->sense = SRpnt->sense;
524 req->timeout = timeout;
525 req->retries = retries;
526 req->end_io_data = SRpnt;
528 blk_execute_rq_nowait(req->q, NULL, req, 1, st_scsi_execute_end);
532 /* Do the scsi command. Waits until command performed if do_wait is true.
533 Otherwise write_behind_check() is used to check that the command
535 static struct st_request *
536 st_do_scsi(struct st_request * SRpnt, struct scsi_tape * STp, unsigned char *cmd,
537 int bytes, int direction, int timeout, int retries, int do_wait)
539 struct completion *waiting;
540 struct rq_map_data *mdata = &STp->buffer->map_data;
543 /* if async, make sure there's no command outstanding */
544 if (!do_wait && ((STp->buffer)->last_SRpnt)) {
545 printk(KERN_ERR "%s: Async command already active.\n",
547 if (signal_pending(current))
548 (STp->buffer)->syscall_result = (-EINTR);
550 (STp->buffer)->syscall_result = (-EBUSY);
555 SRpnt = st_allocate_request(STp);
560 /* If async IO, set last_SRpnt. This ptr tells write_behind_check
561 which IO is outstanding. It's nulled out when the IO completes. */
563 (STp->buffer)->last_SRpnt = SRpnt;
565 waiting = &STp->wait;
566 init_completion(waiting);
567 SRpnt->waiting = waiting;
569 if (!STp->buffer->do_dio) {
570 buf_to_sg(STp->buffer, bytes);
573 DIV_ROUND_UP(bytes, PAGE_SIZE << mdata->page_order);
574 STp->buffer->map_data.pages = STp->buffer->reserved_pages;
575 STp->buffer->map_data.offset = 0;
578 memcpy(SRpnt->cmd, cmd, sizeof(SRpnt->cmd));
579 STp->buffer->cmdstat.have_sense = 0;
580 STp->buffer->syscall_result = 0;
582 if (STp->buffer->do_dio)
583 ret = scsi_execute_async(STp->device, cmd, COMMAND_SIZE(cmd[0]),
584 direction, &((STp->buffer)->sg[0]),
585 bytes, (STp->buffer)->sg_segs, timeout,
586 retries, SRpnt, st_sleep_done,
589 ret = st_scsi_execute(SRpnt, cmd, direction, NULL, bytes,
593 /* could not allocate the buffer or request was too large */
594 (STp->buffer)->syscall_result = (-EBUSY);
595 (STp->buffer)->last_SRpnt = NULL;
596 } else if (do_wait) {
597 wait_for_completion(waiting);
598 SRpnt->waiting = NULL;
599 (STp->buffer)->syscall_result = st_chk_result(STp, SRpnt);
605 static int st_scsi_kern_execute(struct st_request *streq,
606 const unsigned char *cmd, int data_direction,
607 void *buffer, unsigned bufflen, int timeout,
610 struct scsi_tape *stp = streq->stp;
613 stp->buffer->cmdstat.have_sense = 0;
614 memcpy(streq->cmd, cmd, sizeof(streq->cmd));
616 ret = scsi_execute(stp->device, cmd, data_direction, buffer, bufflen,
617 streq->sense, timeout, retries, 0, &resid);
618 if (driver_byte(ret) & DRIVER_ERROR)
621 stp->buffer->cmdstat.midlevel_result = streq->result = ret;
622 stp->buffer->cmdstat.residual = resid;
623 stp->buffer->syscall_result = st_chk_result(stp, streq);
628 /* Handle the write-behind checking (waits for completion). Returns -ENOSPC if
629 write has been correct but EOM early warning reached, -EIO if write ended in
630 error or zero if write successful. Asynchronous writes are used only in
631 variable block mode. */
632 static int write_behind_check(struct scsi_tape * STp)
635 struct st_buffer *STbuffer;
636 struct st_partstat *STps;
637 struct st_cmdstatus *cmdstatp;
638 struct st_request *SRpnt;
640 STbuffer = STp->buffer;
641 if (!STbuffer->writing)
645 if (STp->write_pending)
651 wait_for_completion(&(STp->wait));
652 SRpnt = STbuffer->last_SRpnt;
653 STbuffer->last_SRpnt = NULL;
654 SRpnt->waiting = NULL;
656 (STp->buffer)->syscall_result = st_chk_result(STp, SRpnt);
657 st_release_request(SRpnt);
659 STbuffer->buffer_bytes -= STbuffer->writing;
660 STps = &(STp->ps[STp->partition]);
661 if (STps->drv_block >= 0) {
662 if (STp->block_size == 0)
665 STps->drv_block += STbuffer->writing / STp->block_size;
668 cmdstatp = &STbuffer->cmdstat;
669 if (STbuffer->syscall_result) {
671 if (cmdstatp->have_sense && !cmdstatp->deferred &&
672 (cmdstatp->flags & SENSE_EOM) &&
673 (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
674 cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR)) {
675 /* EOM at write-behind, has all data been written? */
676 if (!cmdstatp->remainder_valid ||
677 cmdstatp->uremainder64 == 0)
681 STps->drv_block = -1;
683 STbuffer->writing = 0;
685 DEB(if (debugging && retval)
686 printk(ST_DEB_MSG "%s: Async write error %x, return value %d.\n",
687 tape_name(STp), STbuffer->cmdstat.midlevel_result, retval);) /* end DEB */
693 /* Step over EOF if it has been inadvertently crossed (ioctl not used because
694 it messes up the block number). */
695 static int cross_eof(struct scsi_tape * STp, int forward)
697 struct st_request *SRpnt;
698 unsigned char cmd[MAX_COMMAND_SIZE];
702 cmd[1] = 0x01; /* Space FileMarks */
707 cmd[2] = cmd[3] = cmd[4] = 0xff; /* -1 filemarks */
710 DEBC(printk(ST_DEB_MSG "%s: Stepping over filemark %s.\n",
711 tape_name(STp), forward ? "forward" : "backward"));
713 SRpnt = st_allocate_request(STp);
715 return STp->buffer->syscall_result;
717 ret = st_scsi_kern_execute(SRpnt, cmd, DMA_NONE, NULL, 0,
718 STp->device->request_queue->rq_timeout,
723 ret = STp->buffer->syscall_result;
725 if ((STp->buffer)->cmdstat.midlevel_result != 0)
726 printk(KERN_ERR "%s: Stepping over filemark %s failed.\n",
727 tape_name(STp), forward ? "forward" : "backward");
730 st_release_request(SRpnt);
736 /* Flush the write buffer (never need to write if variable blocksize). */
737 static int st_flush_write_buffer(struct scsi_tape * STp)
741 unsigned char cmd[MAX_COMMAND_SIZE];
742 struct st_request *SRpnt;
743 struct st_partstat *STps;
745 result = write_behind_check(STp);
750 if (STp->dirty == 1) {
752 transfer = STp->buffer->buffer_bytes;
753 DEBC(printk(ST_DEB_MSG "%s: Flushing %d bytes.\n",
754 tape_name(STp), transfer));
756 memset(cmd, 0, MAX_COMMAND_SIZE);
759 blks = transfer / STp->block_size;
764 SRpnt = st_do_scsi(NULL, STp, cmd, transfer, DMA_TO_DEVICE,
765 STp->device->request_queue->rq_timeout,
766 MAX_WRITE_RETRIES, 1);
768 return (STp->buffer)->syscall_result;
770 STps = &(STp->ps[STp->partition]);
771 if ((STp->buffer)->syscall_result != 0) {
772 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
774 if (cmdstatp->have_sense && !cmdstatp->deferred &&
775 (cmdstatp->flags & SENSE_EOM) &&
776 (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
777 cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) &&
778 (!cmdstatp->remainder_valid ||
779 cmdstatp->uremainder64 == 0)) { /* All written at EOM early warning */
781 (STp->buffer)->buffer_bytes = 0;
782 if (STps->drv_block >= 0)
783 STps->drv_block += blks;
786 printk(KERN_ERR "%s: Error on flush.\n",
788 STps->drv_block = (-1);
792 if (STps->drv_block >= 0)
793 STps->drv_block += blks;
795 (STp->buffer)->buffer_bytes = 0;
797 st_release_request(SRpnt);
804 /* Flush the tape buffer. The tape will be positioned correctly unless
805 seek_next is true. */
806 static int flush_buffer(struct scsi_tape *STp, int seek_next)
808 int backspace, result;
809 struct st_buffer *STbuffer;
810 struct st_partstat *STps;
812 STbuffer = STp->buffer;
815 * If there was a bus reset, block further access
818 if (STp->pos_unknown)
821 if (STp->ready != ST_READY)
823 STps = &(STp->ps[STp->partition]);
824 if (STps->rw == ST_WRITING) /* Writing */
825 return st_flush_write_buffer(STp);
827 if (STp->block_size == 0)
830 backspace = ((STp->buffer)->buffer_bytes +
831 (STp->buffer)->read_pointer) / STp->block_size -
832 ((STp->buffer)->read_pointer + STp->block_size - 1) /
834 (STp->buffer)->buffer_bytes = 0;
835 (STp->buffer)->read_pointer = 0;
838 if (STps->eof == ST_FM_HIT) {
839 result = cross_eof(STp, 0); /* Back over the EOF hit */
841 STps->eof = ST_NOEOF;
843 if (STps->drv_file >= 0)
848 if (!result && backspace > 0)
849 result = st_int_ioctl(STp, MTBSR, backspace);
850 } else if (STps->eof == ST_FM_HIT) {
851 if (STps->drv_file >= 0)
854 STps->eof = ST_NOEOF;
860 /* Set the mode parameters */
861 static int set_mode_densblk(struct scsi_tape * STp, struct st_modedef * STm)
865 char *name = tape_name(STp);
867 if (!STp->density_changed &&
868 STm->default_density >= 0 &&
869 STm->default_density != STp->density) {
870 arg = STm->default_density;
874 arg <<= MT_ST_DENSITY_SHIFT;
875 if (!STp->blksize_changed &&
876 STm->default_blksize >= 0 &&
877 STm->default_blksize != STp->block_size) {
878 arg |= STm->default_blksize;
881 arg |= STp->block_size;
883 st_int_ioctl(STp, SET_DENS_AND_BLK, arg)) {
885 "%s: Can't set default block size to %d bytes and density %x.\n",
886 name, STm->default_blksize, STm->default_density);
894 /* Lock or unlock the drive door. Don't use when st_request allocated. */
895 static int do_door_lock(struct scsi_tape * STp, int do_lock)
898 DEB(char *name = tape_name(STp);)
901 cmd = do_lock ? SCSI_IOCTL_DOORLOCK : SCSI_IOCTL_DOORUNLOCK;
902 DEBC(printk(ST_DEB_MSG "%s: %socking drive door.\n", name,
903 do_lock ? "L" : "Unl"));
904 retval = scsi_ioctl(STp->device, cmd, NULL);
906 STp->door_locked = do_lock ? ST_LOCKED_EXPLICIT : ST_UNLOCKED;
909 STp->door_locked = ST_LOCK_FAILS;
915 /* Set the internal state after reset */
916 static void reset_state(struct scsi_tape *STp)
919 struct st_partstat *STps;
921 STp->pos_unknown = 0;
922 for (i = 0; i < ST_NBR_PARTITIONS; i++) {
923 STps = &(STp->ps[i]);
925 STps->eof = ST_NOEOF;
927 STps->last_block_valid = 0;
928 STps->drv_block = -1;
931 if (STp->can_partitions) {
932 STp->partition = find_partition(STp);
933 if (STp->partition < 0)
935 STp->new_partition = STp->partition;
939 /* Test if the drive is ready. Returns either one of the codes below or a negative system
941 #define CHKRES_READY 0
942 #define CHKRES_NEW_SESSION 1
943 #define CHKRES_NOT_READY 2
944 #define CHKRES_NO_TAPE 3
946 #define MAX_ATTENTIONS 10
948 static int test_ready(struct scsi_tape *STp, int do_wait)
950 int attentions, waits, max_wait, scode;
951 int retval = CHKRES_READY, new_session = 0;
952 unsigned char cmd[MAX_COMMAND_SIZE];
953 struct st_request *SRpnt;
954 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
956 SRpnt = st_allocate_request(STp);
958 return STp->buffer->syscall_result;
960 max_wait = do_wait ? ST_BLOCK_SECONDS : 0;
962 for (attentions=waits=0; ; ) {
963 memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE);
964 cmd[0] = TEST_UNIT_READY;
966 retval = st_scsi_kern_execute(SRpnt, cmd, DMA_NONE, NULL, 0,
972 if (cmdstatp->have_sense) {
974 scode = cmdstatp->sense_hdr.sense_key;
976 if (scode == UNIT_ATTENTION) { /* New media? */
978 if (attentions < MAX_ATTENTIONS) {
988 if (scode == NOT_READY) {
989 if (waits < max_wait) {
990 if (msleep_interruptible(1000)) {
998 if ((STp->device)->scsi_level >= SCSI_2 &&
999 cmdstatp->sense_hdr.asc == 0x3a) /* Check ASC */
1000 retval = CHKRES_NO_TAPE;
1002 retval = CHKRES_NOT_READY;
1008 retval = (STp->buffer)->syscall_result;
1010 retval = new_session ? CHKRES_NEW_SESSION : CHKRES_READY;
1014 st_release_request(SRpnt);
1020 /* See if the drive is ready and gather information about the tape. Return values:
1021 < 0 negative error code from errno.h
1023 1 drive not ready (possibly no tape)
1025 static int check_tape(struct scsi_tape *STp, struct file *filp)
1027 int i, retval, new_session = 0, do_wait;
1028 unsigned char cmd[MAX_COMMAND_SIZE], saved_cleaning;
1029 unsigned short st_flags = filp->f_flags;
1030 struct st_request *SRpnt = NULL;
1031 struct st_modedef *STm;
1032 struct st_partstat *STps;
1033 char *name = tape_name(STp);
1034 struct inode *inode = filp->f_path.dentry->d_inode;
1035 int mode = TAPE_MODE(inode);
1037 STp->ready = ST_READY;
1039 if (mode != STp->current_mode) {
1040 DEBC(printk(ST_DEB_MSG "%s: Mode change from %d to %d.\n",
1041 name, STp->current_mode, mode));
1043 STp->current_mode = mode;
1045 STm = &(STp->modes[STp->current_mode]);
1047 saved_cleaning = STp->cleaning_req;
1048 STp->cleaning_req = 0;
1050 do_wait = ((filp->f_flags & O_NONBLOCK) == 0);
1051 retval = test_ready(STp, do_wait);
1056 if (retval == CHKRES_NEW_SESSION) {
1057 STp->pos_unknown = 0;
1058 STp->partition = STp->new_partition = 0;
1059 if (STp->can_partitions)
1060 STp->nbr_partitions = 1; /* This guess will be updated later
1062 for (i = 0; i < ST_NBR_PARTITIONS; i++) {
1063 STps = &(STp->ps[i]);
1065 STps->eof = ST_NOEOF;
1067 STps->last_block_valid = 0;
1068 STps->drv_block = 0;
1074 STp->cleaning_req |= saved_cleaning;
1076 if (retval == CHKRES_NOT_READY || retval == CHKRES_NO_TAPE) {
1077 if (retval == CHKRES_NO_TAPE)
1078 STp->ready = ST_NO_TAPE;
1080 STp->ready = ST_NOT_READY;
1082 STp->density = 0; /* Clear the erroneous "residue" */
1083 STp->write_prot = 0;
1084 STp->block_size = 0;
1085 STp->ps[0].drv_file = STp->ps[0].drv_block = (-1);
1086 STp->partition = STp->new_partition = 0;
1087 STp->door_locked = ST_UNLOCKED;
1088 return CHKRES_NOT_READY;
1092 SRpnt = st_allocate_request(STp);
1094 retval = STp->buffer->syscall_result;
1098 if (STp->omit_blklims)
1099 STp->min_block = STp->max_block = (-1);
1101 memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE);
1102 cmd[0] = READ_BLOCK_LIMITS;
1104 retval = st_scsi_kern_execute(SRpnt, cmd, DMA_FROM_DEVICE,
1105 STp->buffer->b_data, 6,
1106 STp->device->request_queue->rq_timeout,
1109 st_release_request(SRpnt);
1113 if (!SRpnt->result && !STp->buffer->cmdstat.have_sense) {
1114 STp->max_block = ((STp->buffer)->b_data[1] << 16) |
1115 ((STp->buffer)->b_data[2] << 8) | (STp->buffer)->b_data[3];
1116 STp->min_block = ((STp->buffer)->b_data[4] << 8) |
1117 (STp->buffer)->b_data[5];
1118 if ( DEB( debugging || ) !STp->inited)
1120 "%s: Block limits %d - %d bytes.\n", name,
1121 STp->min_block, STp->max_block);
1123 STp->min_block = STp->max_block = (-1);
1124 DEBC(printk(ST_DEB_MSG "%s: Can't read block limits.\n",
1129 memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE);
1130 cmd[0] = MODE_SENSE;
1133 retval = st_scsi_kern_execute(SRpnt, cmd, DMA_FROM_DEVICE,
1134 STp->buffer->b_data, 12,
1135 STp->device->request_queue->rq_timeout,
1138 st_release_request(SRpnt);
1142 if ((STp->buffer)->syscall_result != 0) {
1143 DEBC(printk(ST_DEB_MSG "%s: No Mode Sense.\n", name));
1144 STp->block_size = ST_DEFAULT_BLOCK; /* Educated guess (?) */
1145 (STp->buffer)->syscall_result = 0; /* Prevent error propagation */
1146 STp->drv_write_prot = 0;
1148 DEBC(printk(ST_DEB_MSG
1149 "%s: Mode sense. Length %d, medium %x, WBS %x, BLL %d\n",
1151 (STp->buffer)->b_data[0], (STp->buffer)->b_data[1],
1152 (STp->buffer)->b_data[2], (STp->buffer)->b_data[3]));
1154 if ((STp->buffer)->b_data[3] >= 8) {
1155 STp->drv_buffer = ((STp->buffer)->b_data[2] >> 4) & 7;
1156 STp->density = (STp->buffer)->b_data[4];
1157 STp->block_size = (STp->buffer)->b_data[9] * 65536 +
1158 (STp->buffer)->b_data[10] * 256 + (STp->buffer)->b_data[11];
1159 DEBC(printk(ST_DEB_MSG
1160 "%s: Density %x, tape length: %x, drv buffer: %d\n",
1161 name, STp->density, (STp->buffer)->b_data[5] * 65536 +
1162 (STp->buffer)->b_data[6] * 256 + (STp->buffer)->b_data[7],
1165 STp->drv_write_prot = ((STp->buffer)->b_data[2] & 0x80) != 0;
1167 st_release_request(SRpnt);
1171 if (STp->block_size > 0)
1172 (STp->buffer)->buffer_blocks =
1173 (STp->buffer)->buffer_size / STp->block_size;
1175 (STp->buffer)->buffer_blocks = 1;
1176 (STp->buffer)->buffer_bytes = (STp->buffer)->read_pointer = 0;
1178 DEBC(printk(ST_DEB_MSG
1179 "%s: Block size: %d, buffer size: %d (%d blocks).\n", name,
1180 STp->block_size, (STp->buffer)->buffer_size,
1181 (STp->buffer)->buffer_blocks));
1183 if (STp->drv_write_prot) {
1184 STp->write_prot = 1;
1186 DEBC(printk(ST_DEB_MSG "%s: Write protected\n", name));
1189 ((st_flags & O_ACCMODE) == O_WRONLY ||
1190 (st_flags & O_ACCMODE) == O_RDWR)) {
1196 if (STp->can_partitions && STp->nbr_partitions < 1) {
1197 /* This code is reached when the device is opened for the first time
1198 after the driver has been initialized with tape in the drive and the
1199 partition support has been enabled. */
1200 DEBC(printk(ST_DEB_MSG
1201 "%s: Updating partition number in status.\n", name));
1202 if ((STp->partition = find_partition(STp)) < 0) {
1203 retval = STp->partition;
1206 STp->new_partition = STp->partition;
1207 STp->nbr_partitions = 1; /* This guess will be updated when necessary */
1210 if (new_session) { /* Change the drive parameters for the new mode */
1211 STp->density_changed = STp->blksize_changed = 0;
1212 STp->compression_changed = 0;
1213 if (!(STm->defaults_for_writes) &&
1214 (retval = set_mode_densblk(STp, STm)) < 0)
1217 if (STp->default_drvbuffer != 0xff) {
1218 if (st_int_ioctl(STp, MTSETDRVBUFFER, STp->default_drvbuffer))
1220 "%s: Can't set default drive buffering to %d.\n",
1221 name, STp->default_drvbuffer);
1225 return CHKRES_READY;
1232 \f/* Open the device. Needs to take the BKL only because of incrementing the SCSI host
1234 static int st_open(struct inode *inode, struct file *filp)
1236 int i, retval = (-EIO);
1237 struct scsi_tape *STp;
1238 struct st_partstat *STps;
1239 int dev = TAPE_NR(inode);
1244 * We really want to do nonseekable_open(inode, filp); here, but some
1245 * versions of tar incorrectly call lseek on tapes and bail out if that
1246 * fails. So we disallow pread() and pwrite(), but permit lseeks.
1248 filp->f_mode &= ~(FMODE_PREAD | FMODE_PWRITE);
1250 if (!(STp = scsi_tape_get(dev))) {
1255 write_lock(&st_dev_arr_lock);
1256 filp->private_data = STp;
1257 name = tape_name(STp);
1260 write_unlock(&st_dev_arr_lock);
1263 DEB( printk(ST_DEB_MSG "%s: Device already in use.\n", name); )
1268 write_unlock(&st_dev_arr_lock);
1269 STp->rew_at_close = STp->autorew_dev = (iminor(inode) & 0x80) == 0;
1271 if (!scsi_block_when_processing_errors(STp->device)) {
1276 /* See that we have at least a one page buffer available */
1277 if (!enlarge_buffer(STp->buffer, PAGE_SIZE, STp->restr_dma)) {
1278 printk(KERN_WARNING "%s: Can't allocate one page tape buffer.\n",
1280 retval = (-EOVERFLOW);
1284 (STp->buffer)->cleared = 0;
1285 (STp->buffer)->writing = 0;
1286 (STp->buffer)->syscall_result = 0;
1288 STp->write_prot = ((filp->f_flags & O_ACCMODE) == O_RDONLY);
1291 for (i = 0; i < ST_NBR_PARTITIONS; i++) {
1292 STps = &(STp->ps[i]);
1295 STp->try_dio_now = STp->try_dio;
1296 STp->recover_count = 0;
1297 DEB( STp->nbr_waits = STp->nbr_finished = 0;
1298 STp->nbr_requests = STp->nbr_dio = STp->nbr_pages = 0; )
1300 retval = check_tape(STp, filp);
1303 if ((filp->f_flags & O_NONBLOCK) == 0 &&
1304 retval != CHKRES_READY) {
1305 if (STp->ready == NO_TAPE)
1306 retval = (-ENOMEDIUM);
1315 normalize_buffer(STp->buffer);
1324 /* Flush the tape buffer before close */
1325 static int st_flush(struct file *filp, fl_owner_t id)
1327 int result = 0, result2;
1328 unsigned char cmd[MAX_COMMAND_SIZE];
1329 struct st_request *SRpnt;
1330 struct scsi_tape *STp = filp->private_data;
1331 struct st_modedef *STm = &(STp->modes[STp->current_mode]);
1332 struct st_partstat *STps = &(STp->ps[STp->partition]);
1333 char *name = tape_name(STp);
1335 if (file_count(filp) > 1)
1338 if (STps->rw == ST_WRITING && !STp->pos_unknown) {
1339 result = st_flush_write_buffer(STp);
1340 if (result != 0 && result != (-ENOSPC))
1344 if (STp->can_partitions &&
1345 (result2 = switch_partition(STp)) < 0) {
1346 DEBC(printk(ST_DEB_MSG
1347 "%s: switch_partition at close failed.\n", name));
1353 DEBC( if (STp->nbr_requests)
1354 printk(KERN_DEBUG "%s: Number of r/w requests %d, dio used in %d, pages %d.\n",
1355 name, STp->nbr_requests, STp->nbr_dio, STp->nbr_pages));
1357 if (STps->rw == ST_WRITING && !STp->pos_unknown) {
1358 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
1360 DEBC(printk(ST_DEB_MSG "%s: Async write waits %d, finished %d.\n",
1361 name, STp->nbr_waits, STp->nbr_finished);
1364 memset(cmd, 0, MAX_COMMAND_SIZE);
1365 cmd[0] = WRITE_FILEMARKS;
1366 cmd[4] = 1 + STp->two_fm;
1368 SRpnt = st_allocate_request(STp);
1370 result = STp->buffer->syscall_result;
1374 result = st_scsi_kern_execute(SRpnt, cmd, DMA_NONE, NULL, 0,
1375 STp->device->request_queue->rq_timeout,
1378 st_release_request(SRpnt);
1382 if (STp->buffer->syscall_result == 0 ||
1383 (cmdstatp->have_sense && !cmdstatp->deferred &&
1384 (cmdstatp->flags & SENSE_EOM) &&
1385 (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
1386 cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) &&
1387 (!cmdstatp->remainder_valid || cmdstatp->uremainder64 == 0))) {
1388 /* Write successful at EOM */
1389 st_release_request(SRpnt);
1391 if (STps->drv_file >= 0)
1393 STps->drv_block = 0;
1398 else { /* Write error */
1399 st_release_request(SRpnt);
1401 printk(KERN_ERR "%s: Error on write filemark.\n", name);
1406 DEBC(printk(ST_DEB_MSG "%s: Buffer flushed, %d EOF(s) written\n",
1408 } else if (!STp->rew_at_close) {
1409 STps = &(STp->ps[STp->partition]);
1410 if (!STm->sysv || STps->rw != ST_READING) {
1412 result = flush_buffer(STp, 0);
1413 else if (STps->eof == ST_FM_HIT) {
1414 result = cross_eof(STp, 0);
1416 if (STps->drv_file >= 0)
1418 STps->drv_block = 0;
1421 STps->eof = ST_NOEOF;
1423 } else if ((STps->eof == ST_NOEOF &&
1424 !(result = cross_eof(STp, 1))) ||
1425 STps->eof == ST_FM_HIT) {
1426 if (STps->drv_file >= 0)
1428 STps->drv_block = 0;
1434 if (STp->rew_at_close) {
1435 result2 = st_int_ioctl(STp, MTREW, 1);
1443 /* Close the device and release it. BKL is not needed: this is the only thread
1444 accessing this tape. */
1445 static int st_release(struct inode *inode, struct file *filp)
1448 struct scsi_tape *STp = filp->private_data;
1450 if (STp->door_locked == ST_LOCKED_AUTO)
1451 do_door_lock(STp, 0);
1453 normalize_buffer(STp->buffer);
1454 write_lock(&st_dev_arr_lock);
1456 write_unlock(&st_dev_arr_lock);
1462 /* The checks common to both reading and writing */
1463 static ssize_t rw_checks(struct scsi_tape *STp, struct file *filp, size_t count)
1468 * If we are in the middle of error recovery, don't let anyone
1469 * else try and use this device. Also, if error recovery fails, it
1470 * may try and take the device offline, in which case all further
1471 * access to the device is prohibited.
1473 if (!scsi_block_when_processing_errors(STp->device)) {
1478 if (STp->ready != ST_READY) {
1479 if (STp->ready == ST_NO_TAPE)
1480 retval = (-ENOMEDIUM);
1486 if (! STp->modes[STp->current_mode].defined) {
1493 * If there was a bus reset, block further access
1496 if (STp->pos_unknown) {
1506 printk(ST_DEB_MSG "%s: Incorrect device.\n", tape_name(STp));
1511 if (STp->can_partitions &&
1512 (retval = switch_partition(STp)) < 0)
1515 if (STp->block_size == 0 && STp->max_block > 0 &&
1516 (count < STp->min_block || count > STp->max_block)) {
1521 if (STp->do_auto_lock && STp->door_locked == ST_UNLOCKED &&
1522 !do_door_lock(STp, 1))
1523 STp->door_locked = ST_LOCKED_AUTO;
1530 static int setup_buffering(struct scsi_tape *STp, const char __user *buf,
1531 size_t count, int is_read)
1533 int i, bufsize, retval = 0;
1534 struct st_buffer *STbp = STp->buffer;
1537 i = STp->try_dio_now && try_rdio;
1539 i = STp->try_dio_now && try_wdio;
1541 if (i && ((unsigned long)buf & queue_dma_alignment(
1542 STp->device->request_queue)) == 0) {
1543 i = sgl_map_user_pages(&(STbp->sg[0]), STbp->use_sg,
1544 (unsigned long)buf, count, (is_read ? READ : WRITE));
1547 STbp->buffer_bytes = 0; /* can be used as transfer counter */
1550 STbp->do_dio = 0; /* fall back to buffering with any error */
1551 STbp->sg_segs = STbp->do_dio;
1552 STbp->frp_sg_current = 0;
1556 STp->nbr_pages += STbp->do_dio;
1561 DEB( STp->nbr_requests++; )
1563 if (!STbp->do_dio) {
1564 if (STp->block_size)
1565 bufsize = STp->block_size > st_fixed_buffer_size ?
1566 STp->block_size : st_fixed_buffer_size;
1569 /* Make sure that data from previous user is not leaked even if
1570 HBA does not return correct residual */
1571 if (is_read && STp->sili && !STbp->cleared)
1575 if (bufsize > STbp->buffer_size &&
1576 !enlarge_buffer(STbp, bufsize, STp->restr_dma)) {
1577 printk(KERN_WARNING "%s: Can't allocate %d byte tape buffer.\n",
1578 tape_name(STp), bufsize);
1579 retval = (-EOVERFLOW);
1582 if (STp->block_size)
1583 STbp->buffer_blocks = bufsize / STp->block_size;
1591 /* Can be called more than once after each setup_buffer() */
1592 static void release_buffering(struct scsi_tape *STp, int is_read)
1594 struct st_buffer *STbp;
1598 sgl_unmap_user_pages(&(STbp->sg[0]), STbp->do_dio, is_read);
1607 st_write(struct file *filp, const char __user *buf, size_t count, loff_t * ppos)
1610 ssize_t i, do_count, blks, transfer;
1612 int undone, retry_eot = 0, scode;
1614 unsigned char cmd[MAX_COMMAND_SIZE];
1615 const char __user *b_point;
1616 struct st_request *SRpnt = NULL;
1617 struct scsi_tape *STp = filp->private_data;
1618 struct st_modedef *STm;
1619 struct st_partstat *STps;
1620 struct st_buffer *STbp;
1621 char *name = tape_name(STp);
1623 if (mutex_lock_interruptible(&STp->lock))
1624 return -ERESTARTSYS;
1626 retval = rw_checks(STp, filp, count);
1627 if (retval || count == 0)
1630 /* Write must be integral number of blocks */
1631 if (STp->block_size != 0 && (count % STp->block_size) != 0) {
1632 printk(KERN_WARNING "%s: Write not multiple of tape block size.\n",
1638 STm = &(STp->modes[STp->current_mode]);
1639 STps = &(STp->ps[STp->partition]);
1641 if (STp->write_prot) {
1647 if (STps->rw == ST_READING) {
1648 retval = flush_buffer(STp, 0);
1651 STps->rw = ST_WRITING;
1652 } else if (STps->rw != ST_WRITING &&
1653 STps->drv_file == 0 && STps->drv_block == 0) {
1654 if ((retval = set_mode_densblk(STp, STm)) < 0)
1656 if (STm->default_compression != ST_DONT_TOUCH &&
1657 !(STp->compression_changed)) {
1658 if (st_compression(STp, (STm->default_compression == ST_YES))) {
1659 printk(KERN_WARNING "%s: Can't set default compression.\n",
1661 if (modes_defined) {
1670 i = write_behind_check(STp);
1673 STps->eof = ST_EOM_OK;
1675 STps->eof = ST_EOM_ERROR;
1678 if (STps->eof == ST_EOM_OK) {
1679 STps->eof = ST_EOD_1; /* allow next write */
1683 else if (STps->eof == ST_EOM_ERROR) {
1688 /* Check the buffer readability in cases where copy_user might catch
1689 the problems after some tape movement. */
1690 if (STp->block_size != 0 &&
1692 (copy_from_user(&i, buf, 1) != 0 ||
1693 copy_from_user(&i, buf + count - 1, 1) != 0)) {
1698 retval = setup_buffering(STp, buf, count, 0);
1704 memset(cmd, 0, MAX_COMMAND_SIZE);
1706 cmd[1] = (STp->block_size != 0);
1708 STps->rw = ST_WRITING;
1711 while (count > 0 && !retry_eot) {
1717 if (STp->block_size == 0)
1720 do_count = STbp->buffer_blocks * STp->block_size -
1722 if (do_count > count)
1726 i = append_to_buffer(b_point, STbp, do_count);
1733 b_point += do_count;
1735 async_write = STp->block_size == 0 && !STbp->do_dio &&
1736 STm->do_async_writes && STps->eof < ST_EOM_OK;
1738 if (STp->block_size != 0 && STm->do_buffer_writes &&
1739 !(STp->try_dio_now && try_wdio) && STps->eof < ST_EOM_OK &&
1740 STbp->buffer_bytes < STbp->buffer_size) {
1742 /* Don't write a buffer that is not full enough. */
1743 if (!async_write && count == 0)
1748 if (STp->block_size == 0)
1749 blks = transfer = do_count;
1752 blks = STbp->buffer_bytes;
1755 blks /= STp->block_size;
1756 transfer = blks * STp->block_size;
1758 cmd[2] = blks >> 16;
1762 SRpnt = st_do_scsi(SRpnt, STp, cmd, transfer, DMA_TO_DEVICE,
1763 STp->device->request_queue->rq_timeout,
1764 MAX_WRITE_RETRIES, !async_write);
1766 retval = STbp->syscall_result;
1769 if (async_write && !STbp->syscall_result) {
1770 STbp->writing = transfer;
1771 STp->dirty = !(STbp->writing ==
1772 STbp->buffer_bytes);
1773 SRpnt = NULL; /* Prevent releasing this request! */
1774 DEB( STp->write_pending = 1; )
1778 if (STbp->syscall_result != 0) {
1779 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
1781 DEBC(printk(ST_DEB_MSG "%s: Error on write:\n", name));
1782 if (cmdstatp->have_sense && (cmdstatp->flags & SENSE_EOM)) {
1783 scode = cmdstatp->sense_hdr.sense_key;
1784 if (cmdstatp->remainder_valid)
1785 undone = (int)cmdstatp->uremainder64;
1786 else if (STp->block_size == 0 &&
1787 scode == VOLUME_OVERFLOW)
1791 if (STp->block_size != 0)
1792 undone *= STp->block_size;
1793 if (undone <= do_count) {
1794 /* Only data from this write is not written */
1798 if (STp->block_size)
1799 blks = (transfer - undone) / STp->block_size;
1800 STps->eof = ST_EOM_OK;
1801 /* Continue in fixed block mode if all written
1802 in this request but still something left to write
1803 (retval left to zero)
1805 if (STp->block_size == 0 ||
1806 undone > 0 || count == 0)
1807 retval = (-ENOSPC); /* EOM within current request */
1808 DEBC(printk(ST_DEB_MSG
1809 "%s: EOM with %d bytes unwritten.\n",
1812 /* EOT within data buffered earlier (possible only
1813 in fixed block mode without direct i/o) */
1814 if (!retry_eot && !cmdstatp->deferred &&
1815 (scode == NO_SENSE || scode == RECOVERED_ERROR)) {
1816 move_buffer_data(STp->buffer, transfer - undone);
1818 if (STps->drv_block >= 0) {
1819 STps->drv_block += (transfer - undone) /
1822 STps->eof = ST_EOM_OK;
1823 DEBC(printk(ST_DEB_MSG
1824 "%s: Retry write of %d bytes at EOM.\n",
1825 name, STp->buffer->buffer_bytes));
1829 /* Either error within data buffered by driver or
1832 blks = do_count = 0;
1833 STps->eof = ST_EOM_ERROR;
1834 STps->drv_block = (-1); /* Too cautious? */
1835 retval = (-EIO); /* EOM for old data */
1836 DEBC(printk(ST_DEB_MSG
1837 "%s: EOM with lost data.\n",
1843 STps->drv_block = (-1); /* Too cautious? */
1844 retval = STbp->syscall_result;
1849 if (STps->drv_block >= 0) {
1850 if (STp->block_size == 0)
1851 STps->drv_block += (do_count > 0);
1853 STps->drv_block += blks;
1856 STbp->buffer_bytes = 0;
1859 if (retval || retry_eot) {
1861 retval = total - count;
1866 if (STps->eof == ST_EOD_1)
1867 STps->eof = ST_EOM_OK;
1868 else if (STps->eof != ST_EOM_OK)
1869 STps->eof = ST_NOEOF;
1870 retval = total - count;
1874 st_release_request(SRpnt);
1875 release_buffering(STp, 0);
1876 mutex_unlock(&STp->lock);
1881 /* Read data from the tape. Returns zero in the normal case, one if the
1882 eof status has changed, and the negative error code in case of a
1883 fatal error. Otherwise updates the buffer and the eof state.
1885 Does release user buffer mapping if it is set.
1887 static long read_tape(struct scsi_tape *STp, long count,
1888 struct st_request ** aSRpnt)
1890 int transfer, blks, bytes;
1891 unsigned char cmd[MAX_COMMAND_SIZE];
1892 struct st_request *SRpnt;
1893 struct st_modedef *STm;
1894 struct st_partstat *STps;
1895 struct st_buffer *STbp;
1897 char *name = tape_name(STp);
1902 STm = &(STp->modes[STp->current_mode]);
1903 STps = &(STp->ps[STp->partition]);
1904 if (STps->eof == ST_FM_HIT)
1908 if (STp->block_size == 0)
1909 blks = bytes = count;
1911 if (!(STp->try_dio_now && try_rdio) && STm->do_read_ahead) {
1912 blks = (STp->buffer)->buffer_blocks;
1913 bytes = blks * STp->block_size;
1916 if (!STbp->do_dio && bytes > (STp->buffer)->buffer_size)
1917 bytes = (STp->buffer)->buffer_size;
1918 blks = bytes / STp->block_size;
1919 bytes = blks * STp->block_size;
1923 memset(cmd, 0, MAX_COMMAND_SIZE);
1925 cmd[1] = (STp->block_size != 0);
1926 if (!cmd[1] && STp->sili)
1928 cmd[2] = blks >> 16;
1933 SRpnt = st_do_scsi(SRpnt, STp, cmd, bytes, DMA_FROM_DEVICE,
1934 STp->device->request_queue->rq_timeout,
1936 release_buffering(STp, 1);
1939 return STbp->syscall_result;
1941 STbp->read_pointer = 0;
1944 /* Something to check */
1945 if (STbp->syscall_result) {
1946 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
1949 DEBC(printk(ST_DEB_MSG "%s: Sense: %2x %2x %2x %2x %2x %2x %2x %2x\n",
1951 SRpnt->sense[0], SRpnt->sense[1],
1952 SRpnt->sense[2], SRpnt->sense[3],
1953 SRpnt->sense[4], SRpnt->sense[5],
1954 SRpnt->sense[6], SRpnt->sense[7]));
1955 if (cmdstatp->have_sense) {
1957 if (cmdstatp->sense_hdr.sense_key == BLANK_CHECK)
1958 cmdstatp->flags &= 0xcf; /* No need for EOM in this case */
1960 if (cmdstatp->flags != 0) { /* EOF, EOM, or ILI */
1961 /* Compute the residual count */
1962 if (cmdstatp->remainder_valid)
1963 transfer = (int)cmdstatp->uremainder64;
1966 if (STp->block_size == 0 &&
1967 cmdstatp->sense_hdr.sense_key == MEDIUM_ERROR)
1970 if (cmdstatp->flags & SENSE_ILI) { /* ILI */
1971 if (STp->block_size == 0) {
1972 if (transfer <= 0) {
1975 "%s: Failed to read %d byte block with %d byte transfer.\n",
1976 name, bytes - transfer, bytes);
1977 if (STps->drv_block >= 0)
1978 STps->drv_block += 1;
1979 STbp->buffer_bytes = 0;
1982 STbp->buffer_bytes = bytes - transfer;
1984 st_release_request(SRpnt);
1985 SRpnt = *aSRpnt = NULL;
1986 if (transfer == blks) { /* We did not get anything, error */
1987 printk(KERN_NOTICE "%s: Incorrect block size.\n", name);
1988 if (STps->drv_block >= 0)
1989 STps->drv_block += blks - transfer + 1;
1990 st_int_ioctl(STp, MTBSR, 1);
1993 /* We have some data, deliver it */
1994 STbp->buffer_bytes = (blks - transfer) *
1996 DEBC(printk(ST_DEB_MSG
1997 "%s: ILI but enough data received %ld %d.\n",
1998 name, count, STbp->buffer_bytes));
1999 if (STps->drv_block >= 0)
2000 STps->drv_block += 1;
2001 if (st_int_ioctl(STp, MTBSR, 1))
2004 } else if (cmdstatp->flags & SENSE_FMK) { /* FM overrides EOM */
2005 if (STps->eof != ST_FM_HIT)
2006 STps->eof = ST_FM_HIT;
2008 STps->eof = ST_EOD_2;
2009 if (STp->block_size == 0)
2010 STbp->buffer_bytes = 0;
2012 STbp->buffer_bytes =
2013 bytes - transfer * STp->block_size;
2014 DEBC(printk(ST_DEB_MSG
2015 "%s: EOF detected (%d bytes read).\n",
2016 name, STbp->buffer_bytes));
2017 } else if (cmdstatp->flags & SENSE_EOM) {
2018 if (STps->eof == ST_FM)
2019 STps->eof = ST_EOD_1;
2021 STps->eof = ST_EOM_OK;
2022 if (STp->block_size == 0)
2023 STbp->buffer_bytes = bytes - transfer;
2025 STbp->buffer_bytes =
2026 bytes - transfer * STp->block_size;
2028 DEBC(printk(ST_DEB_MSG "%s: EOM detected (%d bytes read).\n",
2029 name, STbp->buffer_bytes));
2032 /* end of EOF, EOM, ILI test */
2033 else { /* nonzero sense key */
2034 DEBC(printk(ST_DEB_MSG
2035 "%s: Tape error while reading.\n", name));
2036 STps->drv_block = (-1);
2037 if (STps->eof == ST_FM &&
2038 cmdstatp->sense_hdr.sense_key == BLANK_CHECK) {
2039 DEBC(printk(ST_DEB_MSG
2040 "%s: Zero returned for first BLANK CHECK after EOF.\n",
2042 STps->eof = ST_EOD_2; /* First BLANK_CHECK after FM */
2043 } else /* Some other extended sense code */
2047 if (STbp->buffer_bytes < 0) /* Caused by bogus sense data */
2048 STbp->buffer_bytes = 0;
2050 /* End of extended sense test */
2051 else { /* Non-extended sense */
2052 retval = STbp->syscall_result;
2056 /* End of error handling */
2057 else { /* Read successful */
2058 STbp->buffer_bytes = bytes;
2059 if (STp->sili) /* In fixed block mode residual is always zero here */
2060 STbp->buffer_bytes -= STp->buffer->cmdstat.residual;
2063 if (STps->drv_block >= 0) {
2064 if (STp->block_size == 0)
2067 STps->drv_block += STbp->buffer_bytes / STp->block_size;
2075 st_read(struct file *filp, char __user *buf, size_t count, loff_t * ppos)
2079 ssize_t i, transfer;
2080 int special, do_dio = 0;
2081 struct st_request *SRpnt = NULL;
2082 struct scsi_tape *STp = filp->private_data;
2083 struct st_modedef *STm;
2084 struct st_partstat *STps;
2085 struct st_buffer *STbp = STp->buffer;
2086 DEB( char *name = tape_name(STp); )
2088 if (mutex_lock_interruptible(&STp->lock))
2089 return -ERESTARTSYS;
2091 retval = rw_checks(STp, filp, count);
2092 if (retval || count == 0)
2095 STm = &(STp->modes[STp->current_mode]);
2096 if (STp->block_size != 0 && (count % STp->block_size) != 0) {
2097 if (!STm->do_read_ahead) {
2098 retval = (-EINVAL); /* Read must be integral number of blocks */
2101 STp->try_dio_now = 0; /* Direct i/o can't handle split blocks */
2104 STps = &(STp->ps[STp->partition]);
2105 if (STps->rw == ST_WRITING) {
2106 retval = flush_buffer(STp, 0);
2109 STps->rw = ST_READING;
2112 if (debugging && STps->eof != ST_NOEOF)
2113 printk(ST_DEB_MSG "%s: EOF/EOM flag up (%d). Bytes %d\n", name,
2114 STps->eof, STbp->buffer_bytes);
2117 retval = setup_buffering(STp, buf, count, 1);
2120 do_dio = STbp->do_dio;
2122 if (STbp->buffer_bytes == 0 &&
2123 STps->eof >= ST_EOD_1) {
2124 if (STps->eof < ST_EOD) {
2129 retval = (-EIO); /* EOM or Blank Check */
2134 /* Check the buffer writability before any tape movement. Don't alter
2136 if (copy_from_user(&i, buf, 1) != 0 ||
2137 copy_to_user(buf, &i, 1) != 0 ||
2138 copy_from_user(&i, buf + count - 1, 1) != 0 ||
2139 copy_to_user(buf + count - 1, &i, 1) != 0) {
2145 STps->rw = ST_READING;
2148 /* Loop until enough data in buffer or a special condition found */
2149 for (total = 0, special = 0; total < count && !special;) {
2151 /* Get new data if the buffer is empty */
2152 if (STbp->buffer_bytes == 0) {
2153 special = read_tape(STp, count - total, &SRpnt);
2154 if (special < 0) { /* No need to continue read */
2160 /* Move the data from driver buffer to user buffer */
2161 if (STbp->buffer_bytes > 0) {
2163 if (debugging && STps->eof != ST_NOEOF)
2165 "%s: EOF up (%d). Left %d, needed %d.\n", name,
2166 STps->eof, STbp->buffer_bytes,
2167 (int)(count - total));
2169 transfer = STbp->buffer_bytes < count - total ?
2170 STbp->buffer_bytes : count - total;
2172 i = from_buffer(STbp, buf, transfer);
2182 if (STp->block_size == 0)
2183 break; /* Read only one variable length block */
2185 } /* for (total = 0, special = 0;
2186 total < count && !special; ) */
2188 /* Change the eof state if no data from tape or buffer */
2190 if (STps->eof == ST_FM_HIT) {
2192 STps->drv_block = 0;
2193 if (STps->drv_file >= 0)
2195 } else if (STps->eof == ST_EOD_1) {
2196 STps->eof = ST_EOD_2;
2197 STps->drv_block = 0;
2198 if (STps->drv_file >= 0)
2200 } else if (STps->eof == ST_EOD_2)
2202 } else if (STps->eof == ST_FM)
2203 STps->eof = ST_NOEOF;
2207 if (SRpnt != NULL) {
2208 st_release_request(SRpnt);
2212 release_buffering(STp, 1);
2213 STbp->buffer_bytes = 0;
2215 mutex_unlock(&STp->lock);
2223 /* Set the driver options */
2224 static void st_log_options(struct scsi_tape * STp, struct st_modedef * STm, char *name)
2228 "%s: Mode %d options: buffer writes: %d, async writes: %d, read ahead: %d\n",
2229 name, STp->current_mode, STm->do_buffer_writes, STm->do_async_writes,
2230 STm->do_read_ahead);
2232 "%s: can bsr: %d, two FMs: %d, fast mteom: %d, auto lock: %d,\n",
2233 name, STp->can_bsr, STp->two_fm, STp->fast_mteom, STp->do_auto_lock);
2235 "%s: defs for wr: %d, no block limits: %d, partitions: %d, s2 log: %d\n",
2236 name, STm->defaults_for_writes, STp->omit_blklims, STp->can_partitions,
2237 STp->scsi2_logical);
2239 "%s: sysv: %d nowait: %d sili: %d\n", name, STm->sysv, STp->immediate,
2241 printk(KERN_INFO "%s: debugging: %d\n",
2248 static int st_set_options(struct scsi_tape *STp, long options)
2252 struct st_modedef *STm;
2253 char *name = tape_name(STp);
2254 struct cdev *cd0, *cd1;
2256 STm = &(STp->modes[STp->current_mode]);
2257 if (!STm->defined) {
2258 cd0 = STm->cdevs[0]; cd1 = STm->cdevs[1];
2259 memcpy(STm, &(STp->modes[0]), sizeof(struct st_modedef));
2260 STm->cdevs[0] = cd0; STm->cdevs[1] = cd1;
2262 DEBC(printk(ST_DEB_MSG
2263 "%s: Initialized mode %d definition from mode 0\n",
2264 name, STp->current_mode));
2267 code = options & MT_ST_OPTIONS;
2268 if (code == MT_ST_BOOLEANS) {
2269 STm->do_buffer_writes = (options & MT_ST_BUFFER_WRITES) != 0;
2270 STm->do_async_writes = (options & MT_ST_ASYNC_WRITES) != 0;
2271 STm->defaults_for_writes = (options & MT_ST_DEF_WRITES) != 0;
2272 STm->do_read_ahead = (options & MT_ST_READ_AHEAD) != 0;
2273 STp->two_fm = (options & MT_ST_TWO_FM) != 0;
2274 STp->fast_mteom = (options & MT_ST_FAST_MTEOM) != 0;
2275 STp->do_auto_lock = (options & MT_ST_AUTO_LOCK) != 0;
2276 STp->can_bsr = (options & MT_ST_CAN_BSR) != 0;
2277 STp->omit_blklims = (options & MT_ST_NO_BLKLIMS) != 0;
2278 if ((STp->device)->scsi_level >= SCSI_2)
2279 STp->can_partitions = (options & MT_ST_CAN_PARTITIONS) != 0;
2280 STp->scsi2_logical = (options & MT_ST_SCSI2LOGICAL) != 0;
2281 STp->immediate = (options & MT_ST_NOWAIT) != 0;
2282 STm->sysv = (options & MT_ST_SYSV) != 0;
2283 STp->sili = (options & MT_ST_SILI) != 0;
2284 DEB( debugging = (options & MT_ST_DEBUGGING) != 0;
2285 st_log_options(STp, STm, name); )
2286 } else if (code == MT_ST_SETBOOLEANS || code == MT_ST_CLEARBOOLEANS) {
2287 value = (code == MT_ST_SETBOOLEANS);
2288 if ((options & MT_ST_BUFFER_WRITES) != 0)
2289 STm->do_buffer_writes = value;
2290 if ((options & MT_ST_ASYNC_WRITES) != 0)
2291 STm->do_async_writes = value;
2292 if ((options & MT_ST_DEF_WRITES) != 0)
2293 STm->defaults_for_writes = value;
2294 if ((options & MT_ST_READ_AHEAD) != 0)
2295 STm->do_read_ahead = value;
2296 if ((options & MT_ST_TWO_FM) != 0)
2297 STp->two_fm = value;
2298 if ((options & MT_ST_FAST_MTEOM) != 0)
2299 STp->fast_mteom = value;
2300 if ((options & MT_ST_AUTO_LOCK) != 0)
2301 STp->do_auto_lock = value;
2302 if ((options & MT_ST_CAN_BSR) != 0)
2303 STp->can_bsr = value;
2304 if ((options & MT_ST_NO_BLKLIMS) != 0)
2305 STp->omit_blklims = value;
2306 if ((STp->device)->scsi_level >= SCSI_2 &&
2307 (options & MT_ST_CAN_PARTITIONS) != 0)
2308 STp->can_partitions = value;
2309 if ((options & MT_ST_SCSI2LOGICAL) != 0)
2310 STp->scsi2_logical = value;
2311 if ((options & MT_ST_NOWAIT) != 0)
2312 STp->immediate = value;
2313 if ((options & MT_ST_SYSV) != 0)
2315 if ((options & MT_ST_SILI) != 0)
2318 if ((options & MT_ST_DEBUGGING) != 0)
2320 st_log_options(STp, STm, name); )
2321 } else if (code == MT_ST_WRITE_THRESHOLD) {
2322 /* Retained for compatibility */
2323 } else if (code == MT_ST_DEF_BLKSIZE) {
2324 value = (options & ~MT_ST_OPTIONS);
2325 if (value == ~MT_ST_OPTIONS) {
2326 STm->default_blksize = (-1);
2327 DEBC( printk(KERN_INFO "%s: Default block size disabled.\n", name));
2329 STm->default_blksize = value;
2330 DEBC( printk(KERN_INFO "%s: Default block size set to %d bytes.\n",
2331 name, STm->default_blksize));
2332 if (STp->ready == ST_READY) {
2333 STp->blksize_changed = 0;
2334 set_mode_densblk(STp, STm);
2337 } else if (code == MT_ST_TIMEOUTS) {
2338 value = (options & ~MT_ST_OPTIONS);
2339 if ((value & MT_ST_SET_LONG_TIMEOUT) != 0) {
2340 STp->long_timeout = (value & ~MT_ST_SET_LONG_TIMEOUT) * HZ;
2341 DEBC( printk(KERN_INFO "%s: Long timeout set to %d seconds.\n", name,
2342 (value & ~MT_ST_SET_LONG_TIMEOUT)));
2344 blk_queue_rq_timeout(STp->device->request_queue,
2346 DEBC( printk(KERN_INFO "%s: Normal timeout set to %d seconds.\n",
2349 } else if (code == MT_ST_SET_CLN) {
2350 value = (options & ~MT_ST_OPTIONS) & 0xff;
2352 value < EXTENDED_SENSE_START && value >= SCSI_SENSE_BUFFERSIZE)
2354 STp->cln_mode = value;
2355 STp->cln_sense_mask = (options >> 8) & 0xff;
2356 STp->cln_sense_value = (options >> 16) & 0xff;
2358 "%s: Cleaning request mode %d, mask %02x, value %02x\n",
2359 name, value, STp->cln_sense_mask, STp->cln_sense_value);
2360 } else if (code == MT_ST_DEF_OPTIONS) {
2361 code = (options & ~MT_ST_CLEAR_DEFAULT);
2362 value = (options & MT_ST_CLEAR_DEFAULT);
2363 if (code == MT_ST_DEF_DENSITY) {
2364 if (value == MT_ST_CLEAR_DEFAULT) {
2365 STm->default_density = (-1);
2366 DEBC( printk(KERN_INFO "%s: Density default disabled.\n",
2369 STm->default_density = value & 0xff;
2370 DEBC( printk(KERN_INFO "%s: Density default set to %x\n",
2371 name, STm->default_density));
2372 if (STp->ready == ST_READY) {
2373 STp->density_changed = 0;
2374 set_mode_densblk(STp, STm);
2377 } else if (code == MT_ST_DEF_DRVBUFFER) {
2378 if (value == MT_ST_CLEAR_DEFAULT) {
2379 STp->default_drvbuffer = 0xff;
2380 DEBC( printk(KERN_INFO
2381 "%s: Drive buffer default disabled.\n", name));
2383 STp->default_drvbuffer = value & 7;
2384 DEBC( printk(KERN_INFO
2385 "%s: Drive buffer default set to %x\n",
2386 name, STp->default_drvbuffer));
2387 if (STp->ready == ST_READY)
2388 st_int_ioctl(STp, MTSETDRVBUFFER, STp->default_drvbuffer);
2390 } else if (code == MT_ST_DEF_COMPRESSION) {
2391 if (value == MT_ST_CLEAR_DEFAULT) {
2392 STm->default_compression = ST_DONT_TOUCH;
2393 DEBC( printk(KERN_INFO
2394 "%s: Compression default disabled.\n", name));
2396 if ((value & 0xff00) != 0) {
2397 STp->c_algo = (value & 0xff00) >> 8;
2398 DEBC( printk(KERN_INFO "%s: Compression algorithm set to 0x%x.\n",
2399 name, STp->c_algo));
2401 if ((value & 0xff) != 0xff) {
2402 STm->default_compression = (value & 1 ? ST_YES : ST_NO);
2403 DEBC( printk(KERN_INFO "%s: Compression default set to %x\n",
2404 name, (value & 1)));
2405 if (STp->ready == ST_READY) {
2406 STp->compression_changed = 0;
2407 st_compression(STp, (STm->default_compression == ST_YES));
2418 #define MODE_HEADER_LENGTH 4
2420 /* Mode header and page byte offsets */
2421 #define MH_OFF_DATA_LENGTH 0
2422 #define MH_OFF_MEDIUM_TYPE 1
2423 #define MH_OFF_DEV_SPECIFIC 2
2424 #define MH_OFF_BDESCS_LENGTH 3
2425 #define MP_OFF_PAGE_NBR 0
2426 #define MP_OFF_PAGE_LENGTH 1
2428 /* Mode header and page bit masks */
2429 #define MH_BIT_WP 0x80
2430 #define MP_MSK_PAGE_NBR 0x3f
2432 /* Don't return block descriptors */
2433 #define MODE_SENSE_OMIT_BDESCS 0x08
2435 #define MODE_SELECT_PAGE_FORMAT 0x10
2437 /* Read a mode page into the tape buffer. The block descriptors are included
2438 if incl_block_descs is true. The page control is ored to the page number
2439 parameter, if necessary. */
2440 static int read_mode_page(struct scsi_tape *STp, int page, int omit_block_descs)
2442 unsigned char cmd[MAX_COMMAND_SIZE];
2443 struct st_request *SRpnt;
2446 memset(cmd, 0, MAX_COMMAND_SIZE);
2447 cmd[0] = MODE_SENSE;
2448 if (omit_block_descs)
2449 cmd[1] = MODE_SENSE_OMIT_BDESCS;
2453 SRpnt = st_allocate_request(STp);
2455 return STp->buffer->syscall_result;
2457 ret = st_scsi_kern_execute(SRpnt, cmd, DMA_FROM_DEVICE,
2458 STp->buffer->b_data, cmd[4],
2459 STp->device->request_queue->rq_timeout,
2461 st_release_request(SRpnt);
2463 return ret ? : STp->buffer->syscall_result;
2467 /* Send the mode page in the tape buffer to the drive. Assumes that the mode data
2468 in the buffer is correctly formatted. The long timeout is used if slow is non-zero. */
2469 static int write_mode_page(struct scsi_tape *STp, int page, int slow)
2471 int pgo, timeout, ret = 0;
2472 unsigned char cmd[MAX_COMMAND_SIZE];
2473 struct st_request *SRpnt;
2475 memset(cmd, 0, MAX_COMMAND_SIZE);
2476 cmd[0] = MODE_SELECT;
2477 cmd[1] = MODE_SELECT_PAGE_FORMAT;
2478 pgo = MODE_HEADER_LENGTH + (STp->buffer)->b_data[MH_OFF_BDESCS_LENGTH];
2479 cmd[4] = pgo + (STp->buffer)->b_data[pgo + MP_OFF_PAGE_LENGTH] + 2;
2481 /* Clear reserved fields */
2482 (STp->buffer)->b_data[MH_OFF_DATA_LENGTH] = 0;
2483 (STp->buffer)->b_data[MH_OFF_MEDIUM_TYPE] = 0;
2484 (STp->buffer)->b_data[MH_OFF_DEV_SPECIFIC] &= ~MH_BIT_WP;
2485 (STp->buffer)->b_data[pgo + MP_OFF_PAGE_NBR] &= MP_MSK_PAGE_NBR;
2487 SRpnt = st_allocate_request(STp);
2491 timeout = slow ? STp->long_timeout :
2492 STp->device->request_queue->rq_timeout;
2494 ret = st_scsi_kern_execute(SRpnt, cmd, DMA_TO_DEVICE,
2495 STp->buffer->b_data, cmd[4], timeout, 0);
2497 ret = STp->buffer->syscall_result;
2499 st_release_request(SRpnt);
2505 #define COMPRESSION_PAGE 0x0f
2506 #define COMPRESSION_PAGE_LENGTH 16
2508 #define CP_OFF_DCE_DCC 2
2509 #define CP_OFF_C_ALGO 7
2511 #define DCE_MASK 0x80
2512 #define DCC_MASK 0x40
2513 #define RED_MASK 0x60
2516 /* Control the compression with mode page 15. Algorithm not changed if zero.
2518 The block descriptors are read and written because Sony SDT-7000 does not
2519 work without this (suggestion from Michael Schaefer <Michael.Schaefer@dlr.de>).
2520 Including block descriptors should not cause any harm to other drives. */
2522 static int st_compression(struct scsi_tape * STp, int state)
2525 int mpoffs; /* Offset to mode page start */
2526 unsigned char *b_data = (STp->buffer)->b_data;
2527 DEB( char *name = tape_name(STp); )
2529 if (STp->ready != ST_READY)
2532 /* Read the current page contents */
2533 retval = read_mode_page(STp, COMPRESSION_PAGE, 0);
2535 DEBC(printk(ST_DEB_MSG "%s: Compression mode page not supported.\n",
2540 mpoffs = MODE_HEADER_LENGTH + b_data[MH_OFF_BDESCS_LENGTH];
2541 DEBC(printk(ST_DEB_MSG "%s: Compression state is %d.\n", name,
2542 (b_data[mpoffs + CP_OFF_DCE_DCC] & DCE_MASK ? 1 : 0)));
2544 /* Check if compression can be changed */
2545 if ((b_data[mpoffs + CP_OFF_DCE_DCC] & DCC_MASK) == 0) {
2546 DEBC(printk(ST_DEB_MSG "%s: Compression not supported.\n", name));
2552 b_data[mpoffs + CP_OFF_DCE_DCC] |= DCE_MASK;
2553 if (STp->c_algo != 0)
2554 b_data[mpoffs + CP_OFF_C_ALGO] = STp->c_algo;
2557 b_data[mpoffs + CP_OFF_DCE_DCC] &= ~DCE_MASK;
2558 if (STp->c_algo != 0)
2559 b_data[mpoffs + CP_OFF_C_ALGO] = 0; /* no compression */
2562 retval = write_mode_page(STp, COMPRESSION_PAGE, 0);
2564 DEBC(printk(ST_DEB_MSG "%s: Compression change failed.\n", name));
2567 DEBC(printk(ST_DEB_MSG "%s: Compression state changed to %d.\n",
2570 STp->compression_changed = 1;
2575 /* Process the load and unload commands (does unload if the load code is zero) */
2576 static int do_load_unload(struct scsi_tape *STp, struct file *filp, int load_code)
2578 int retval = (-EIO), timeout;
2579 DEB( char *name = tape_name(STp); )
2580 unsigned char cmd[MAX_COMMAND_SIZE];
2581 struct st_partstat *STps;
2582 struct st_request *SRpnt;
2584 if (STp->ready != ST_READY && !load_code) {
2585 if (STp->ready == ST_NO_TAPE)
2586 return (-ENOMEDIUM);
2591 memset(cmd, 0, MAX_COMMAND_SIZE);
2592 cmd[0] = START_STOP;
2596 * If arg >= 1 && arg <= 6 Enhanced load/unload in HP C1553A
2598 if (load_code >= 1 + MT_ST_HPLOADER_OFFSET
2599 && load_code <= 6 + MT_ST_HPLOADER_OFFSET) {
2600 DEBC(printk(ST_DEB_MSG "%s: Enhanced %sload slot %2d.\n",
2601 name, (cmd[4]) ? "" : "un",
2602 load_code - MT_ST_HPLOADER_OFFSET));
2603 cmd[3] = load_code - MT_ST_HPLOADER_OFFSET; /* MediaID field of C1553A */
2605 if (STp->immediate) {
2606 cmd[1] = 1; /* Don't wait for completion */
2607 timeout = STp->device->request_queue->rq_timeout;
2610 timeout = STp->long_timeout;
2614 printk(ST_DEB_MSG "%s: Unloading tape.\n", name);
2616 printk(ST_DEB_MSG "%s: Loading tape.\n", name);
2619 SRpnt = st_allocate_request(STp);
2621 return STp->buffer->syscall_result;
2623 retval = st_scsi_kern_execute(SRpnt, cmd, DMA_NONE, NULL, 0, timeout,
2628 retval = (STp->buffer)->syscall_result;
2630 if (!retval) { /* SCSI command successful */
2633 STp->rew_at_close = 0;
2634 STp->ready = ST_NO_TAPE;
2637 STp->rew_at_close = STp->autorew_dev;
2638 retval = check_tape(STp, filp);
2644 STps = &(STp->ps[STp->partition]);
2645 STps->drv_file = STps->drv_block = (-1);
2648 st_release_request(SRpnt);
2654 #define ST_DEB_FORWARD 0
2655 #define ST_DEB_BACKWARD 1
2656 static void deb_space_print(char *name, int direction, char *units, unsigned char *cmd)
2660 sc = cmd[2] & 0x80 ? 0xff000000 : 0;
2661 sc |= (cmd[2] << 16) | (cmd[3] << 8) | cmd[4];
2664 printk(ST_DEB_MSG "%s: Spacing tape %s over %d %s.\n", name,
2665 direction ? "backward" : "forward", sc, units);
2670 /* Internal ioctl function */
2671 static int st_int_ioctl(struct scsi_tape *STp, unsigned int cmd_in, unsigned long arg)
2677 unsigned char cmd[MAX_COMMAND_SIZE];
2678 struct st_request *SRpnt;
2679 struct st_partstat *STps;
2680 int fileno, blkno, at_sm, undone;
2681 int datalen = 0, direction = DMA_NONE;
2682 char *name = tape_name(STp);
2684 WARN_ON(STp->buffer->do_dio != 0);
2685 if (STp->ready != ST_READY) {
2686 if (STp->ready == ST_NO_TAPE)
2687 return (-ENOMEDIUM);
2691 timeout = STp->long_timeout;
2692 STps = &(STp->ps[STp->partition]);
2693 fileno = STps->drv_file;
2694 blkno = STps->drv_block;
2695 at_sm = STps->at_sm;
2697 memset(cmd, 0, MAX_COMMAND_SIZE);
2700 chg_eof = 0; /* Changed from the FSF after this */
2703 cmd[1] = 0x01; /* Space FileMarks */
2704 cmd[2] = (arg >> 16);
2705 cmd[3] = (arg >> 8);
2707 DEBC(deb_space_print(name, ST_DEB_FORWARD, "filemarks", cmd);)
2711 at_sm &= (arg == 0);
2714 chg_eof = 0; /* Changed from the FSF after this */
2717 cmd[1] = 0x01; /* Space FileMarks */
2719 cmd[2] = (ltmp >> 16);
2720 cmd[3] = (ltmp >> 8);
2722 DEBC(deb_space_print(name, ST_DEB_BACKWARD, "filemarks", cmd);)
2725 blkno = (-1); /* We can't know the block number */
2726 at_sm &= (arg == 0);
2730 cmd[1] = 0x00; /* Space Blocks */
2731 cmd[2] = (arg >> 16);
2732 cmd[3] = (arg >> 8);
2734 DEBC(deb_space_print(name, ST_DEB_FORWARD, "blocks", cmd);)
2737 at_sm &= (arg == 0);
2741 cmd[1] = 0x00; /* Space Blocks */
2743 cmd[2] = (ltmp >> 16);
2744 cmd[3] = (ltmp >> 8);
2746 DEBC(deb_space_print(name, ST_DEB_BACKWARD, "blocks", cmd);)
2749 at_sm &= (arg == 0);
2753 cmd[1] = 0x04; /* Space Setmarks */
2754 cmd[2] = (arg >> 16);
2755 cmd[3] = (arg >> 8);
2757 DEBC(deb_space_print(name, ST_DEB_FORWARD, "setmarks", cmd);)
2759 blkno = fileno = (-1);
2765 cmd[1] = 0x04; /* Space Setmarks */
2767 cmd[2] = (ltmp >> 16);
2768 cmd[3] = (ltmp >> 8);
2770 DEBC(deb_space_print(name, ST_DEB_BACKWARD, "setmarks", cmd);)
2772 blkno = fileno = (-1);
2778 if (STp->write_prot)
2780 cmd[0] = WRITE_FILEMARKS;
2781 if (cmd_in == MTWSM)
2783 cmd[2] = (arg >> 16);
2784 cmd[3] = (arg >> 8);
2786 timeout = STp->device->request_queue->rq_timeout;
2788 if (cmd_in == MTWEOF)
2789 printk(ST_DEB_MSG "%s: Writing %d filemarks.\n", name,
2790 cmd[2] * 65536 + cmd[3] * 256 + cmd[4]);
2792 printk(ST_DEB_MSG "%s: Writing %d setmarks.\n", name,
2793 cmd[2] * 65536 + cmd[3] * 256 + cmd[4]);
2798 at_sm = (cmd_in == MTWSM);
2801 cmd[0] = REZERO_UNIT;
2802 if (STp->immediate) {
2803 cmd[1] = 1; /* Don't wait for completion */
2804 timeout = STp->device->request_queue->rq_timeout;
2806 DEBC(printk(ST_DEB_MSG "%s: Rewinding tape.\n", name));
2807 fileno = blkno = at_sm = 0;
2810 DEBC(printk(ST_DEB_MSG "%s: No op on tape.\n", name));
2811 return 0; /* Should do something ? */
2814 cmd[0] = START_STOP;
2815 if (STp->immediate) {
2816 cmd[1] = 1; /* Don't wait for completion */
2817 timeout = STp->device->request_queue->rq_timeout;
2820 DEBC(printk(ST_DEB_MSG "%s: Retensioning tape.\n", name));
2821 fileno = blkno = at_sm = 0;
2824 if (!STp->fast_mteom) {
2825 /* space to the end of tape */
2826 ioctl_result = st_int_ioctl(STp, MTFSF, 0x7fffff);
2827 fileno = STps->drv_file;
2828 if (STps->eof >= ST_EOD_1)
2830 /* The next lines would hide the number of spaced FileMarks
2831 That's why I inserted the previous lines. I had no luck
2832 with detecting EOM with FSF, so we go now to EOM.
2838 DEBC(printk(ST_DEB_MSG "%s: Spacing to end of recorded medium.\n",
2844 if (STp->write_prot)
2847 cmd[1] = (arg ? 1 : 0); /* Long erase with non-zero argument */
2848 if (STp->immediate) {
2849 cmd[1] |= 2; /* Don't wait for completion */
2850 timeout = STp->device->request_queue->rq_timeout;
2853 timeout = STp->long_timeout * 8;
2855 DEBC(printk(ST_DEB_MSG "%s: Erasing tape.\n", name));
2856 fileno = blkno = at_sm = 0;
2858 case MTSETBLK: /* Set block length */
2859 case MTSETDENSITY: /* Set tape density */
2860 case MTSETDRVBUFFER: /* Set drive buffering */
2861 case SET_DENS_AND_BLK: /* Set density and block size */
2863 if (STp->dirty || (STp->buffer)->buffer_bytes != 0)
2864 return (-EIO); /* Not allowed if data in buffer */
2865 if ((cmd_in == MTSETBLK || cmd_in == SET_DENS_AND_BLK) &&
2866 (arg & MT_ST_BLKSIZE_MASK) != 0 &&
2867 STp->max_block > 0 &&
2868 ((arg & MT_ST_BLKSIZE_MASK) < STp->min_block ||
2869 (arg & MT_ST_BLKSIZE_MASK) > STp->max_block)) {
2870 printk(KERN_WARNING "%s: Illegal block size.\n", name);
2873 cmd[0] = MODE_SELECT;
2874 if ((STp->use_pf & USE_PF))
2875 cmd[1] = MODE_SELECT_PAGE_FORMAT;
2876 cmd[4] = datalen = 12;
2877 direction = DMA_TO_DEVICE;
2879 memset((STp->buffer)->b_data, 0, 12);
2880 if (cmd_in == MTSETDRVBUFFER)
2881 (STp->buffer)->b_data[2] = (arg & 7) << 4;
2883 (STp->buffer)->b_data[2] =
2884 STp->drv_buffer << 4;
2885 (STp->buffer)->b_data[3] = 8; /* block descriptor length */
2886 if (cmd_in == MTSETDENSITY) {
2887 (STp->buffer)->b_data[4] = arg;
2888 STp->density_changed = 1; /* At least we tried ;-) */
2889 } else if (cmd_in == SET_DENS_AND_BLK)
2890 (STp->buffer)->b_data[4] = arg >> 24;
2892 (STp->buffer)->b_data[4] = STp->density;
2893 if (cmd_in == MTSETBLK || cmd_in == SET_DENS_AND_BLK) {
2894 ltmp = arg & MT_ST_BLKSIZE_MASK;
2895 if (cmd_in == MTSETBLK)
2896 STp->blksize_changed = 1; /* At least we tried ;-) */
2898 ltmp = STp->block_size;
2899 (STp->buffer)->b_data[9] = (ltmp >> 16);
2900 (STp->buffer)->b_data[10] = (ltmp >> 8);
2901 (STp->buffer)->b_data[11] = ltmp;
2902 timeout = STp->device->request_queue->rq_timeout;
2904 if (cmd_in == MTSETBLK || cmd_in == SET_DENS_AND_BLK)
2906 "%s: Setting block size to %d bytes.\n", name,
2907 (STp->buffer)->b_data[9] * 65536 +
2908 (STp->buffer)->b_data[10] * 256 +
2909 (STp->buffer)->b_data[11]);
2910 if (cmd_in == MTSETDENSITY || cmd_in == SET_DENS_AND_BLK)
2912 "%s: Setting density code to %x.\n", name,
2913 (STp->buffer)->b_data[4]);
2914 if (cmd_in == MTSETDRVBUFFER)
2916 "%s: Setting drive buffer code to %d.\n", name,
2917 ((STp->buffer)->b_data[2] >> 4) & 7);
2924 SRpnt = st_allocate_request(STp);
2926 return (STp->buffer)->syscall_result;
2928 ioctl_result = st_scsi_kern_execute(SRpnt, cmd, direction,
2929 STp->buffer->b_data, datalen,
2930 timeout, MAX_RETRIES);
2932 ioctl_result = (STp->buffer)->syscall_result;
2934 if (!ioctl_result) { /* SCSI command successful */
2935 st_release_request(SRpnt);
2937 STps->drv_block = blkno;
2938 STps->drv_file = fileno;
2939 STps->at_sm = at_sm;
2941 if (cmd_in == MTBSFM)
2942 ioctl_result = st_int_ioctl(STp, MTFSF, 1);
2943 else if (cmd_in == MTFSFM)
2944 ioctl_result = st_int_ioctl(STp, MTBSF, 1);
2946 if (cmd_in == MTSETBLK || cmd_in == SET_DENS_AND_BLK) {
2947 int old_block_size = STp->block_size;
2948 STp->block_size = arg & MT_ST_BLKSIZE_MASK;
2949 if (STp->block_size != 0) {
2950 if (old_block_size == 0)
2951 normalize_buffer(STp->buffer);
2952 (STp->buffer)->buffer_blocks =
2953 (STp->buffer)->buffer_size / STp->block_size;
2955 (STp->buffer)->buffer_bytes = (STp->buffer)->read_pointer = 0;
2956 if (cmd_in == SET_DENS_AND_BLK)
2957 STp->density = arg >> MT_ST_DENSITY_SHIFT;
2958 } else if (cmd_in == MTSETDRVBUFFER)
2959 STp->drv_buffer = (arg & 7);
2960 else if (cmd_in == MTSETDENSITY)
2963 if (cmd_in == MTEOM)
2965 else if (cmd_in == MTFSF)
2968 STps->eof = ST_NOEOF;
2970 if (cmd_in == MTWEOF)
2972 } else { /* SCSI command was not completely successful. Don't return
2973 from this block without releasing the SCSI command block! */
2974 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
2976 if (cmdstatp->flags & SENSE_EOM) {
2977 if (cmd_in != MTBSF && cmd_in != MTBSFM &&
2978 cmd_in != MTBSR && cmd_in != MTBSS)
2979 STps->eof = ST_EOM_OK;
2980 STps->drv_block = 0;
2983 if (cmdstatp->remainder_valid)
2984 undone = (int)cmdstatp->uremainder64;
2988 if (cmd_in == MTWEOF &&
2989 cmdstatp->have_sense &&
2990 (cmdstatp->flags & SENSE_EOM)) {
2991 if (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
2992 cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) {
2993 ioctl_result = 0; /* EOF(s) written successfully at EOM */
2994 STps->eof = ST_NOEOF;
2995 } else { /* Writing EOF(s) failed */
2999 STps->eof = ST_NOEOF;
3001 STps->drv_file = fileno;
3002 } else if ((cmd_in == MTFSF) || (cmd_in == MTFSFM)) {
3004 STps->drv_file = fileno - undone;
3006 STps->drv_file = fileno;
3007 STps->drv_block = -1;
3008 STps->eof = ST_NOEOF;
3009 } else if ((cmd_in == MTBSF) || (cmd_in == MTBSFM)) {
3010 if (arg > 0 && undone < 0) /* Some drives get this wrong */
3012 if (STps->drv_file >= 0)
3013 STps->drv_file = fileno + undone;
3014 STps->drv_block = 0;
3015 STps->eof = ST_NOEOF;
3016 } else if (cmd_in == MTFSR) {
3017 if (cmdstatp->flags & SENSE_FMK) { /* Hit filemark */
3018 if (STps->drv_file >= 0)
3020 STps->drv_block = 0;
3023 if (blkno >= undone)
3024 STps->drv_block = blkno - undone;
3026 STps->drv_block = (-1);
3027 STps->eof = ST_NOEOF;
3029 } else if (cmd_in == MTBSR) {
3030 if (cmdstatp->flags & SENSE_FMK) { /* Hit filemark */
3032 STps->drv_block = (-1);
3034 if (arg > 0 && undone < 0) /* Some drives get this wrong */
3036 if (STps->drv_block >= 0)
3037 STps->drv_block = blkno + undone;
3039 STps->eof = ST_NOEOF;
3040 } else if (cmd_in == MTEOM) {
3041 STps->drv_file = (-1);
3042 STps->drv_block = (-1);
3044 } else if (cmd_in == MTSETBLK ||
3045 cmd_in == MTSETDENSITY ||
3046 cmd_in == MTSETDRVBUFFER ||
3047 cmd_in == SET_DENS_AND_BLK) {
3048 if (cmdstatp->sense_hdr.sense_key == ILLEGAL_REQUEST &&
3049 !(STp->use_pf & PF_TESTED)) {
3050 /* Try the other possible state of Page Format if not
3052 STp->use_pf = !STp->use_pf | PF_TESTED;
3053 st_release_request(SRpnt);
3055 return st_int_ioctl(STp, cmd_in, arg);
3058 STps->eof = ST_NOEOF;
3060 if (cmdstatp->sense_hdr.sense_key == BLANK_CHECK)
3063 st_release_request(SRpnt);
3067 return ioctl_result;
3071 /* Get the tape position. If bt == 2, arg points into a kernel space mt_loc
3074 static int get_location(struct scsi_tape *STp, unsigned int *block, int *partition,
3078 unsigned char scmd[MAX_COMMAND_SIZE];
3079 struct st_request *SRpnt;
3080 DEB( char *name = tape_name(STp); )
3082 if (STp->ready != ST_READY)
3085 memset(scmd, 0, MAX_COMMAND_SIZE);
3086 if ((STp->device)->scsi_level < SCSI_2) {
3087 scmd[0] = QFA_REQUEST_BLOCK;
3090 scmd[0] = READ_POSITION;
3091 if (!logical && !STp->scsi2_logical)
3095 SRpnt = st_allocate_request(STp);
3097 return STp->buffer->syscall_result;
3099 result = st_scsi_kern_execute(SRpnt, scmd, DMA_FROM_DEVICE,
3100 STp->buffer->b_data, 20,
3101 STp->device->request_queue->rq_timeout,
3106 if ((STp->buffer)->syscall_result != 0 ||
3107 (STp->device->scsi_level >= SCSI_2 &&
3108 ((STp->buffer)->b_data[0] & 4) != 0)) {
3109 *block = *partition = 0;
3110 DEBC(printk(ST_DEB_MSG "%s: Can't read tape position.\n", name));
3114 if ((STp->device)->scsi_level < SCSI_2) {
3115 *block = ((STp->buffer)->b_data[0] << 16)
3116 + ((STp->buffer)->b_data[1] << 8)
3117 + (STp->buffer)->b_data[2];
3120 *block = ((STp->buffer)->b_data[4] << 24)
3121 + ((STp->buffer)->b_data[5] << 16)
3122 + ((STp->buffer)->b_data[6] << 8)
3123 + (STp->buffer)->b_data[7];
3124 *partition = (STp->buffer)->b_data[1];
3125 if (((STp->buffer)->b_data[0] & 0x80) &&
3126 (STp->buffer)->b_data[1] == 0) /* BOP of partition 0 */
3127 STp->ps[0].drv_block = STp->ps[0].drv_file = 0;
3129 DEBC(printk(ST_DEB_MSG "%s: Got tape pos. blk %d part %d.\n", name,
3130 *block, *partition));
3133 st_release_request(SRpnt);
3140 /* Set the tape block and partition. Negative partition means that only the
3141 block should be set in vendor specific way. */
3142 static int set_location(struct scsi_tape *STp, unsigned int block, int partition,
3145 struct st_partstat *STps;
3149 unsigned char scmd[MAX_COMMAND_SIZE];
3150 struct st_request *SRpnt;
3151 DEB( char *name = tape_name(STp); )
3153 if (STp->ready != ST_READY)
3155 timeout = STp->long_timeout;
3156 STps = &(STp->ps[STp->partition]);
3158 DEBC(printk(ST_DEB_MSG "%s: Setting block to %d and partition to %d.\n",
3159 name, block, partition));
3160 DEB(if (partition < 0)
3163 /* Update the location at the partition we are leaving */
3164 if ((!STp->can_partitions && partition != 0) ||
3165 partition >= ST_NBR_PARTITIONS)
3167 if (partition != STp->partition) {
3168 if (get_location(STp, &blk, &p, 1))
3169 STps->last_block_valid = 0;
3171 STps->last_block_valid = 1;
3172 STps->last_block_visited = blk;
3173 DEBC(printk(ST_DEB_MSG
3174 "%s: Visited block %d for partition %d saved.\n",
3175 name, blk, STp->partition));
3179 memset(scmd, 0, MAX_COMMAND_SIZE);
3180 if ((STp->device)->scsi_level < SCSI_2) {
3181 scmd[0] = QFA_SEEK_BLOCK;
3182 scmd[2] = (block >> 16);
3183 scmd[3] = (block >> 8);
3188 scmd[3] = (block >> 24);
3189 scmd[4] = (block >> 16);
3190 scmd[5] = (block >> 8);
3192 if (!logical && !STp->scsi2_logical)
3194 if (STp->partition != partition) {
3196 scmd[8] = partition;
3197 DEBC(printk(ST_DEB_MSG
3198 "%s: Trying to change partition from %d to %d\n",
3199 name, STp->partition, partition));
3202 if (STp->immediate) {
3203 scmd[1] |= 1; /* Don't wait for completion */
3204 timeout = STp->device->request_queue->rq_timeout;
3207 SRpnt = st_allocate_request(STp);
3209 return STp->buffer->syscall_result;
3211 result = st_scsi_kern_execute(SRpnt, scmd, DMA_NONE, NULL, 0,
3212 timeout, MAX_READY_RETRIES);
3216 STps->drv_block = STps->drv_file = (-1);
3217 STps->eof = ST_NOEOF;
3218 if ((STp->buffer)->syscall_result != 0) {
3220 if (STp->can_partitions &&
3221 (STp->device)->scsi_level >= SCSI_2 &&
3222 (p = find_partition(STp)) >= 0)
3225 if (STp->can_partitions) {
3226 STp->partition = partition;
3227 STps = &(STp->ps[partition]);
3228 if (!STps->last_block_valid ||
3229 STps->last_block_visited != block) {
3236 STps->drv_block = STps->drv_file = 0;
3240 st_release_request(SRpnt);
3247 /* Find the current partition number for the drive status. Called from open and
3248 returns either partition number of negative error code. */
3249 static int find_partition(struct scsi_tape *STp)
3254 if ((i = get_location(STp, &block, &partition, 1)) < 0)
3256 if (partition >= ST_NBR_PARTITIONS)
3262 /* Change the partition if necessary */
3263 static int switch_partition(struct scsi_tape *STp)
3265 struct st_partstat *STps;
3267 if (STp->partition == STp->new_partition)
3269 STps = &(STp->ps[STp->new_partition]);
3270 if (!STps->last_block_valid)
3271 STps->last_block_visited = 0;
3272 return set_location(STp, STps->last_block_visited, STp->new_partition, 1);
3275 /* Functions for reading and writing the medium partition mode page. */
3277 #define PART_PAGE 0x11
3278 #define PART_PAGE_FIXED_LENGTH 8
3280 #define PP_OFF_MAX_ADD_PARTS 2
3281 #define PP_OFF_NBR_ADD_PARTS 3
3282 #define PP_OFF_FLAGS 4
3283 #define PP_OFF_PART_UNITS 6
3284 #define PP_OFF_RESERVED 7
3286 #define PP_BIT_IDP 0x20
3287 #define PP_MSK_PSUM_MB 0x10
3289 /* Get the number of partitions on the tape. As a side effect reads the
3290 mode page into the tape buffer. */
3291 static int nbr_partitions(struct scsi_tape *STp)
3294 DEB( char *name = tape_name(STp); )
3296 if (STp->ready != ST_READY)
3299 result = read_mode_page(STp, PART_PAGE, 1);
3302 DEBC(printk(ST_DEB_MSG "%s: Can't read medium partition page.\n",
3306 result = (STp->buffer)->b_data[MODE_HEADER_LENGTH +
3307 PP_OFF_NBR_ADD_PARTS] + 1;
3308 DEBC(printk(ST_DEB_MSG "%s: Number of partitions %d.\n", name, result));
3315 /* Partition the tape into two partitions if size > 0 or one partition if
3318 The block descriptors are read and written because Sony SDT-7000 does not
3319 work without this (suggestion from Michael Schaefer <Michael.Schaefer@dlr.de>).
3321 My HP C1533A drive returns only one partition size field. This is used to
3322 set the size of partition 1. There is no size field for the default partition.
3323 Michael Schaefer's Sony SDT-7000 returns two descriptors and the second is
3324 used to set the size of partition 1 (this is what the SCSI-3 standard specifies).
3325 The following algorithm is used to accommodate both drives: if the number of
3326 partition size fields is greater than the maximum number of additional partitions
3327 in the mode page, the second field is used. Otherwise the first field is used.
3329 For Seagate DDS drives the page length must be 8 when no partitions is defined
3330 and 10 when 1 partition is defined (information from Eric Lee Green). This is
3331 is acceptable also to some other old drives and enforced if the first partition
3332 size field is used for the first additional partition size.
3334 static int partition_tape(struct scsi_tape *STp, int size)
3336 char *name = tape_name(STp);
3338 int pgo, psd_cnt, psdo;
3341 result = read_mode_page(STp, PART_PAGE, 0);
3343 DEBC(printk(ST_DEB_MSG "%s: Can't read partition mode page.\n", name));
3346 /* The mode page is in the buffer. Let's modify it and write it. */
3347 bp = (STp->buffer)->b_data;
3348 pgo = MODE_HEADER_LENGTH + bp[MH_OFF_BDESCS_LENGTH];
3349 DEBC(printk(ST_DEB_MSG "%s: Partition page length is %d bytes.\n",
3350 name, bp[pgo + MP_OFF_PAGE_LENGTH] + 2));
3352 psd_cnt = (bp[pgo + MP_OFF_PAGE_LENGTH] + 2 - PART_PAGE_FIXED_LENGTH) / 2;
3353 psdo = pgo + PART_PAGE_FIXED_LENGTH;
3354 if (psd_cnt > bp[pgo + PP_OFF_MAX_ADD_PARTS]) {
3355 bp[psdo] = bp[psdo + 1] = 0xff; /* Rest of the tape */
3358 memset(bp + psdo, 0, bp[pgo + PP_OFF_NBR_ADD_PARTS] * 2);
3360 DEBC(printk("%s: psd_cnt %d, max.parts %d, nbr_parts %d\n", name,
3361 psd_cnt, bp[pgo + PP_OFF_MAX_ADD_PARTS],
3362 bp[pgo + PP_OFF_NBR_ADD_PARTS]));
3365 bp[pgo + PP_OFF_NBR_ADD_PARTS] = 0;
3366 if (psd_cnt <= bp[pgo + PP_OFF_MAX_ADD_PARTS])
3367 bp[pgo + MP_OFF_PAGE_LENGTH] = 6;
3368 DEBC(printk(ST_DEB_MSG "%s: Formatting tape with one partition.\n",
3371 bp[psdo] = (size >> 8) & 0xff;
3372 bp[psdo + 1] = size & 0xff;
3374 if (bp[pgo + MP_OFF_PAGE_LENGTH] < 8)
3375 bp[pgo + MP_OFF_PAGE_LENGTH] = 8;
3376 DEBC(printk(ST_DEB_MSG
3377 "%s: Formatting tape with two partitions (1 = %d MB).\n",
3380 bp[pgo + PP_OFF_PART_UNITS] = 0;
3381 bp[pgo + PP_OFF_RESERVED] = 0;
3382 bp[pgo + PP_OFF_FLAGS] = PP_BIT_IDP | PP_MSK_PSUM_MB;
3384 result = write_mode_page(STp, PART_PAGE, 1);
3386 printk(KERN_INFO "%s: Partitioning of tape failed.\n", name);
3395 /* The ioctl command */
3396 static long st_ioctl(struct file *file, unsigned int cmd_in, unsigned long arg)
3398 int i, cmd_nr, cmd_type, bt;
3401 struct scsi_tape *STp = file->private_data;
3402 struct st_modedef *STm;
3403 struct st_partstat *STps;
3404 char *name = tape_name(STp);
3405 void __user *p = (void __user *)arg;
3407 if (mutex_lock_interruptible(&STp->lock))
3408 return -ERESTARTSYS;
3411 if (debugging && !STp->in_use) {
3412 printk(ST_DEB_MSG "%s: Incorrect device.\n", name);
3417 STm = &(STp->modes[STp->current_mode]);
3418 STps = &(STp->ps[STp->partition]);
3421 * If we are in the middle of error recovery, don't let anyone
3422 * else try and use this device. Also, if error recovery fails, it
3423 * may try and take the device offline, in which case all further
3424 * access to the device is prohibited.
3426 retval = scsi_nonblockable_ioctl(STp->device, cmd_in, p,
3427 file->f_flags & O_NDELAY);
3428 if (!scsi_block_when_processing_errors(STp->device) || retval != -ENODEV)
3432 cmd_type = _IOC_TYPE(cmd_in);
3433 cmd_nr = _IOC_NR(cmd_in);
3435 if (cmd_type == _IOC_TYPE(MTIOCTOP) && cmd_nr == _IOC_NR(MTIOCTOP)) {
3438 if (_IOC_SIZE(cmd_in) != sizeof(mtc)) {
3443 i = copy_from_user(&mtc, p, sizeof(struct mtop));
3449 if (mtc.mt_op == MTSETDRVBUFFER && !capable(CAP_SYS_ADMIN)) {
3451 "%s: MTSETDRVBUFFER only allowed for root.\n", name);
3455 if (!STm->defined &&
3456 (mtc.mt_op != MTSETDRVBUFFER &&
3457 (mtc.mt_count & MT_ST_OPTIONS) == 0)) {
3462 if (!STp->pos_unknown) {
3464 if (STps->eof == ST_FM_HIT) {
3465 if (mtc.mt_op == MTFSF || mtc.mt_op == MTFSFM ||
3466 mtc.mt_op == MTEOM) {
3468 if (STps->drv_file >= 0)
3469 STps->drv_file += 1;
3470 } else if (mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM) {
3472 if (STps->drv_file >= 0)
3473 STps->drv_file += 1;
3477 if (mtc.mt_op == MTSEEK) {
3478 /* Old position must be restored if partition will be
3480 i = !STp->can_partitions ||
3481 (STp->new_partition != STp->partition);
3483 i = mtc.mt_op == MTREW || mtc.mt_op == MTOFFL ||
3484 mtc.mt_op == MTRETEN || mtc.mt_op == MTEOM ||
3485 mtc.mt_op == MTLOCK || mtc.mt_op == MTLOAD ||
3486 mtc.mt_op == MTFSF || mtc.mt_op == MTFSFM ||
3487 mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM ||
3488 mtc.mt_op == MTCOMPRESSION;
3490 i = flush_buffer(STp, i);
3495 if (STps->rw == ST_WRITING &&
3496 (mtc.mt_op == MTREW || mtc.mt_op == MTOFFL ||
3497 mtc.mt_op == MTSEEK ||
3498 mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM)) {
3499 i = st_int_ioctl(STp, MTWEOF, 1);
3504 if (mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM)
3511 * If there was a bus reset, block further access
3512 * to this device. If the user wants to rewind the tape,
3513 * then reset the flag and allow access again.
3515 if (mtc.mt_op != MTREW &&
3516 mtc.mt_op != MTOFFL &&
3517 mtc.mt_op != MTRETEN &&
3518 mtc.mt_op != MTERASE &&
3519 mtc.mt_op != MTSEEK &&
3520 mtc.mt_op != MTEOM) {
3525 /* remove this when the midlevel properly clears was_reset */
3526 STp->device->was_reset = 0;
3529 if (mtc.mt_op != MTNOP && mtc.mt_op != MTSETBLK &&
3530 mtc.mt_op != MTSETDENSITY && mtc.mt_op != MTWSM &&
3531 mtc.mt_op != MTSETDRVBUFFER && mtc.mt_op != MTSETPART)
3532 STps->rw = ST_IDLE; /* Prevent automatic WEOF and fsf */
3534 if (mtc.mt_op == MTOFFL && STp->door_locked != ST_UNLOCKED)
3535 do_door_lock(STp, 0); /* Ignore result! */
3537 if (mtc.mt_op == MTSETDRVBUFFER &&
3538 (mtc.mt_count & MT_ST_OPTIONS) != 0) {
3539 retval = st_set_options(STp, mtc.mt_count);
3543 if (mtc.mt_op == MTSETPART) {
3544 if (!STp->can_partitions ||
3545 mtc.mt_count < 0 || mtc.mt_count >= ST_NBR_PARTITIONS) {
3549 if (mtc.mt_count >= STp->nbr_partitions &&
3550 (STp->nbr_partitions = nbr_partitions(STp)) < 0) {
3554 if (mtc.mt_count >= STp->nbr_partitions) {
3558 STp->new_partition = mtc.mt_count;
3563 if (mtc.mt_op == MTMKPART) {
3564 if (!STp->can_partitions) {
3568 if ((i = st_int_ioctl(STp, MTREW, 0)) < 0 ||
3569 (i = partition_tape(STp, mtc.mt_count)) < 0) {
3573 for (i = 0; i < ST_NBR_PARTITIONS; i++) {
3574 STp->ps[i].rw = ST_IDLE;
3575 STp->ps[i].at_sm = 0;
3576 STp->ps[i].last_block_valid = 0;
3578 STp->partition = STp->new_partition = 0;
3579 STp->nbr_partitions = 1; /* Bad guess ?-) */
3580 STps->drv_block = STps->drv_file = 0;
3585 if (mtc.mt_op == MTSEEK) {
3586 i = set_location(STp, mtc.mt_count, STp->new_partition, 0);
3587 if (!STp->can_partitions)
3588 STp->ps[0].rw = ST_IDLE;
3593 if (mtc.mt_op == MTUNLOAD || mtc.mt_op == MTOFFL) {
3594 retval = do_load_unload(STp, file, 0);
3598 if (mtc.mt_op == MTLOAD) {
3599 retval = do_load_unload(STp, file, max(1, mtc.mt_count));
3603 if (mtc.mt_op == MTLOCK || mtc.mt_op == MTUNLOCK) {
3604 retval = do_door_lock(STp, (mtc.mt_op == MTLOCK));
3608 if (STp->can_partitions && STp->ready == ST_READY &&
3609 (i = switch_partition(STp)) < 0) {
3614 if (mtc.mt_op == MTCOMPRESSION)
3615 retval = st_compression(STp, (mtc.mt_count & 1));
3617 retval = st_int_ioctl(STp, mtc.mt_op, mtc.mt_count);
3620 if (!STm->defined) {
3625 if ((i = flush_buffer(STp, 0)) < 0) {
3629 if (STp->can_partitions &&
3630 (i = switch_partition(STp)) < 0) {
3635 if (cmd_type == _IOC_TYPE(MTIOCGET) && cmd_nr == _IOC_NR(MTIOCGET)) {
3636 struct mtget mt_status;
3638 if (_IOC_SIZE(cmd_in) != sizeof(struct mtget)) {
3643 mt_status.mt_type = STp->tape_type;
3644 mt_status.mt_dsreg =
3645 ((STp->block_size << MT_ST_BLKSIZE_SHIFT) & MT_ST_BLKSIZE_MASK) |
3646 ((STp->density << MT_ST_DENSITY_SHIFT) & MT_ST_DENSITY_MASK);
3647 mt_status.mt_blkno = STps->drv_block;
3648 mt_status.mt_fileno = STps->drv_file;
3649 if (STp->block_size != 0) {
3650 if (STps->rw == ST_WRITING)
3651 mt_status.mt_blkno +=
3652 (STp->buffer)->buffer_bytes / STp->block_size;
3653 else if (STps->rw == ST_READING)
3654 mt_status.mt_blkno -=
3655 ((STp->buffer)->buffer_bytes +
3656 STp->block_size - 1) / STp->block_size;
3659 mt_status.mt_gstat = 0;
3660 if (STp->drv_write_prot)
3661 mt_status.mt_gstat |= GMT_WR_PROT(0xffffffff);
3662 if (mt_status.mt_blkno == 0) {
3663 if (mt_status.mt_fileno == 0)
3664 mt_status.mt_gstat |= GMT_BOT(0xffffffff);
3666 mt_status.mt_gstat |= GMT_EOF(0xffffffff);
3668 mt_status.mt_erreg = (STp->recover_reg << MT_ST_SOFTERR_SHIFT);
3669 mt_status.mt_resid = STp->partition;
3670 if (STps->eof == ST_EOM_OK || STps->eof == ST_EOM_ERROR)
3671 mt_status.mt_gstat |= GMT_EOT(0xffffffff);
3672 else if (STps->eof >= ST_EOM_OK)
3673 mt_status.mt_gstat |= GMT_EOD(0xffffffff);
3674 if (STp->density == 1)
3675 mt_status.mt_gstat |= GMT_D_800(0xffffffff);
3676 else if (STp->density == 2)
3677 mt_status.mt_gstat |= GMT_D_1600(0xffffffff);
3678 else if (STp->density == 3)
3679 mt_status.mt_gstat |= GMT_D_6250(0xffffffff);
3680 if (STp->ready == ST_READY)
3681 mt_status.mt_gstat |= GMT_ONLINE(0xffffffff);
3682 if (STp->ready == ST_NO_TAPE)
3683 mt_status.mt_gstat |= GMT_DR_OPEN(0xffffffff);
3685 mt_status.mt_gstat |= GMT_SM(0xffffffff);
3686 if (STm->do_async_writes ||
3687 (STm->do_buffer_writes && STp->block_size != 0) ||
3688 STp->drv_buffer != 0)
3689 mt_status.mt_gstat |= GMT_IM_REP_EN(0xffffffff);
3690 if (STp->cleaning_req)
3691 mt_status.mt_gstat |= GMT_CLN(0xffffffff);
3693 i = copy_to_user(p, &mt_status, sizeof(struct mtget));
3699 STp->recover_reg = 0; /* Clear after read */
3702 } /* End of MTIOCGET */
3703 if (cmd_type == _IOC_TYPE(MTIOCPOS) && cmd_nr == _IOC_NR(MTIOCPOS)) {
3704 struct mtpos mt_pos;
3705 if (_IOC_SIZE(cmd_in) != sizeof(struct mtpos)) {
3709 if ((i = get_location(STp, &blk, &bt, 0)) < 0) {
3713 mt_pos.mt_blkno = blk;
3714 i = copy_to_user(p, &mt_pos, sizeof(struct mtpos));
3719 mutex_unlock(&STp->lock);
3721 case SCSI_IOCTL_GET_IDLUN:
3722 case SCSI_IOCTL_GET_BUS_NUMBER:
3725 if ((cmd_in == SG_IO ||
3726 cmd_in == SCSI_IOCTL_SEND_COMMAND ||
3727 cmd_in == CDROM_SEND_PACKET) &&
3728 !capable(CAP_SYS_RAWIO))
3731 i = scsi_cmd_ioctl(STp->disk->queue, STp->disk,
3732 file->f_mode, cmd_in, p);
3737 retval = scsi_ioctl(STp->device, cmd_in, p);
3738 if (!retval && cmd_in == SCSI_IOCTL_STOP_UNIT) { /* unload */
3739 STp->rew_at_close = 0;
3740 STp->ready = ST_NO_TAPE;
3745 mutex_unlock(&STp->lock);
3749 #ifdef CONFIG_COMPAT
3750 static long st_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
3752 struct scsi_tape *STp = file->private_data;
3753 struct scsi_device *sdev = STp->device;
3754 int ret = -ENOIOCTLCMD;
3755 if (sdev->host->hostt->compat_ioctl) {
3757 ret = sdev->host->hostt->compat_ioctl(sdev, cmd, (void __user *)arg);
3766 /* Try to allocate a new tape buffer. Calling function must not hold
3768 static struct st_buffer *
3769 new_tape_buffer(int from_initialization, int need_dma, int max_sg)
3773 struct st_buffer *tb;
3775 if (from_initialization)
3776 priority = GFP_ATOMIC;
3778 priority = GFP_KERNEL;
3780 i = sizeof(struct st_buffer) + (max_sg - 1) * sizeof(struct scatterlist) +
3781 max_sg * sizeof(struct st_buf_fragment);
3782 tb = kzalloc(i, priority);
3784 printk(KERN_NOTICE "st: Can't allocate new tape buffer.\n");
3787 tb->frp_segs = tb->orig_frp_segs = 0;
3788 tb->use_sg = max_sg;
3789 tb->frp = (struct st_buf_fragment *)(&(tb->sg[0]) + max_sg);
3792 tb->buffer_size = got;
3793 sg_init_table(tb->sg, max_sg);
3795 tb->reserved_pages = kzalloc(max_sg * sizeof(struct page *), priority);
3796 if (!tb->reserved_pages) {
3805 /* Try to allocate enough space in the tape buffer */
3806 static int enlarge_buffer(struct st_buffer * STbuffer, int new_size, int need_dma)
3808 int segs, nbr, max_segs, b_size, order, got;
3811 if (new_size <= STbuffer->buffer_size)
3814 if (STbuffer->buffer_size <= PAGE_SIZE)
3815 normalize_buffer(STbuffer); /* Avoid extra segment */
3817 max_segs = STbuffer->use_sg;
3818 nbr = max_segs - STbuffer->frp_segs;
3822 priority = GFP_KERNEL | __GFP_NOWARN;
3824 priority |= GFP_DMA;
3826 if (STbuffer->frp_segs) {
3827 b_size = STbuffer->frp[0].length;
3828 order = get_order(b_size);
3830 for (b_size = PAGE_SIZE, order = 0;
3831 order <= 6 && b_size < new_size; order++, b_size *= 2)
3835 for (segs = STbuffer->frp_segs, got = STbuffer->buffer_size;
3836 segs < max_segs && got < new_size;) {
3837 STbuffer->frp[segs].page = alloc_pages(priority, order);
3838 if (STbuffer->frp[segs].page == NULL) {
3839 DEB(STbuffer->buffer_size = got);
3840 normalize_buffer(STbuffer);
3843 STbuffer->frp[segs].length = b_size;
3844 STbuffer->frp_segs += 1;
3846 STbuffer->buffer_size = got;
3847 if (STbuffer->cleared)
3848 memset(page_address(STbuffer->frp[segs].page), 0, b_size);
3849 STbuffer->reserved_pages[segs] = STbuffer->frp[segs].page;
3852 STbuffer->b_data = page_address(STbuffer->frp[0].page);
3853 STbuffer->map_data.page_order = order;
3859 /* Make sure that no data from previous user is in the internal buffer */
3860 static void clear_buffer(struct st_buffer * st_bp)
3864 for (i=0; i < st_bp->frp_segs; i++)
3865 memset(page_address(st_bp->frp[i].page), 0, st_bp->frp[i].length);
3870 /* Release the extra buffer */
3871 static void normalize_buffer(struct st_buffer * STbuffer)
3875 for (i = STbuffer->orig_frp_segs; i < STbuffer->frp_segs; i++) {
3876 order = get_order(STbuffer->frp[i].length);
3877 __free_pages(STbuffer->frp[i].page, order);
3878 STbuffer->buffer_size -= STbuffer->frp[i].length;
3880 STbuffer->frp_segs = STbuffer->orig_frp_segs;
3881 STbuffer->frp_sg_current = 0;
3882 STbuffer->sg_segs = 0;
3883 STbuffer->map_data.page_order = 0;
3884 STbuffer->map_data.offset = 0;
3888 /* Move data from the user buffer to the tape buffer. Returns zero (success) or
3889 negative error code. */
3890 static int append_to_buffer(const char __user *ubp, struct st_buffer * st_bp, int do_count)
3892 int i, cnt, res, offset;
3894 for (i = 0, offset = st_bp->buffer_bytes;
3895 i < st_bp->frp_segs && offset >= st_bp->frp[i].length; i++)
3896 offset -= st_bp->frp[i].length;
3897 if (i == st_bp->frp_segs) { /* Should never happen */
3898 printk(KERN_WARNING "st: append_to_buffer offset overflow.\n");
3901 for (; i < st_bp->frp_segs && do_count > 0; i++) {
3902 cnt = st_bp->frp[i].length - offset < do_count ?
3903 st_bp->frp[i].length - offset : do_count;
3904 res = copy_from_user(page_address(st_bp->frp[i].page) + offset, ubp, cnt);
3908 st_bp->buffer_bytes += cnt;
3912 if (do_count) /* Should never happen */
3919 /* Move data from the tape buffer to the user buffer. Returns zero (success) or
3920 negative error code. */
3921 static int from_buffer(struct st_buffer * st_bp, char __user *ubp, int do_count)
3923 int i, cnt, res, offset;
3925 for (i = 0, offset = st_bp->read_pointer;
3926 i < st_bp->frp_segs && offset >= st_bp->frp[i].length; i++)
3927 offset -= st_bp->frp[i].length;
3928 if (i == st_bp->frp_segs) { /* Should never happen */
3929 printk(KERN_WARNING "st: from_buffer offset overflow.\n");
3932 for (; i < st_bp->frp_segs && do_count > 0; i++) {
3933 cnt = st_bp->frp[i].length - offset < do_count ?
3934 st_bp->frp[i].length - offset : do_count;
3935 res = copy_to_user(ubp, page_address(st_bp->frp[i].page) + offset, cnt);
3939 st_bp->buffer_bytes -= cnt;
3940 st_bp->read_pointer += cnt;
3944 if (do_count) /* Should never happen */
3951 /* Move data towards start of buffer */
3952 static void move_buffer_data(struct st_buffer * st_bp, int offset)
3954 int src_seg, dst_seg, src_offset = 0, dst_offset;
3960 total=st_bp->buffer_bytes - offset;
3961 for (src_seg=0; src_seg < st_bp->frp_segs; src_seg++) {
3962 src_offset = offset;
3963 if (src_offset < st_bp->frp[src_seg].length)
3965 offset -= st_bp->frp[src_seg].length;
3968 st_bp->buffer_bytes = st_bp->read_pointer = total;
3969 for (dst_seg=dst_offset=0; total > 0; ) {
3970 count = min(st_bp->frp[dst_seg].length - dst_offset,
3971 st_bp->frp[src_seg].length - src_offset);
3972 memmove(page_address(st_bp->frp[dst_seg].page) + dst_offset,
3973 page_address(st_bp->frp[src_seg].page) + src_offset, count);
3974 src_offset += count;
3975 if (src_offset >= st_bp->frp[src_seg].length) {
3979 dst_offset += count;
3980 if (dst_offset >= st_bp->frp[dst_seg].length) {
3989 /* Fill the s/g list up to the length required for this transfer */
3990 static void buf_to_sg(struct st_buffer *STbp, unsigned int length)
3994 struct scatterlist *sg;
3995 struct st_buf_fragment *frp;
3997 if (length == STbp->frp_sg_current)
3998 return; /* work already done */
4000 sg = &(STbp->sg[0]);
4002 for (i=count=0; count < length; i++) {
4003 if (length - count > frp[i].length)
4004 sg_set_page(&sg[i], frp[i].page, frp[i].length, 0);
4006 sg_set_page(&sg[i], frp[i].page, length - count, 0);
4007 count += sg[i].length;
4010 STbp->frp_sg_current = length;
4014 /* Validate the options from command line or module parameters */
4015 static void validate_options(void)
4018 st_fixed_buffer_size = buffer_kbs * ST_KILOBYTE;
4019 if (max_sg_segs >= ST_FIRST_SG)
4020 st_max_sg_segs = max_sg_segs;
4024 /* Set the boot options. Syntax is defined in Documenation/scsi/st.txt.
4026 static int __init st_setup(char *str)
4028 int i, len, ints[5];
4031 stp = get_options(str, ARRAY_SIZE(ints), ints);
4034 for (i = 0; i < ints[0] && i < ARRAY_SIZE(parms); i++)
4036 *parms[i].val = ints[i + 1];
4038 while (stp != NULL) {
4039 for (i = 0; i < ARRAY_SIZE(parms); i++) {
4040 len = strlen(parms[i].name);
4041 if (!strncmp(stp, parms[i].name, len) &&
4042 (*(stp + len) == ':' || *(stp + len) == '=')) {
4045 simple_strtoul(stp + len + 1, NULL, 0);
4047 printk(KERN_WARNING "st: Obsolete parameter %s\n",
4052 if (i >= ARRAY_SIZE(parms))
4053 printk(KERN_WARNING "st: invalid parameter in '%s'\n",
4055 stp = strchr(stp, ',');
4066 __setup("st=", st_setup);
4070 static const struct file_operations st_fops =
4072 .owner = THIS_MODULE,
4075 .unlocked_ioctl = st_ioctl,
4076 #ifdef CONFIG_COMPAT
4077 .compat_ioctl = st_compat_ioctl,
4081 .release = st_release,
4084 static int st_probe(struct device *dev)
4086 struct scsi_device *SDp = to_scsi_device(dev);
4087 struct gendisk *disk = NULL;
4088 struct cdev *cdev = NULL;
4089 struct scsi_tape *tpnt = NULL;
4090 struct st_modedef *STm;
4091 struct st_partstat *STps;
4092 struct st_buffer *buffer;
4093 int i, j, mode, dev_num, error;
4096 if (SDp->type != TYPE_TAPE)
4098 if ((stp = st_incompatible(SDp))) {
4099 sdev_printk(KERN_INFO, SDp, "Found incompatible tape\n");
4100 printk(KERN_INFO "st: The suggested driver is %s.\n", stp);
4104 i = min(SDp->request_queue->max_hw_segments,
4105 SDp->request_queue->max_phys_segments);
4106 if (st_max_sg_segs < i)
4108 buffer = new_tape_buffer(1, (SDp->host)->unchecked_isa_dma, i);
4109 if (buffer == NULL) {
4111 "st: Can't allocate new tape buffer. Device not attached.\n");
4115 disk = alloc_disk(1);
4117 printk(KERN_ERR "st: out of memory. Device not attached.\n");
4118 goto out_buffer_free;
4121 write_lock(&st_dev_arr_lock);
4122 if (st_nr_dev >= st_dev_max) {
4123 struct scsi_tape **tmp_da;
4126 tmp_dev_max = max(st_nr_dev * 2, 8);
4127 if (tmp_dev_max > ST_MAX_TAPES)
4128 tmp_dev_max = ST_MAX_TAPES;
4129 if (tmp_dev_max <= st_nr_dev) {
4130 write_unlock(&st_dev_arr_lock);
4131 printk(KERN_ERR "st: Too many tape devices (max. %d).\n",
4136 tmp_da = kzalloc(tmp_dev_max * sizeof(struct scsi_tape *), GFP_ATOMIC);
4137 if (tmp_da == NULL) {
4138 write_unlock(&st_dev_arr_lock);
4139 printk(KERN_ERR "st: Can't extend device array.\n");
4143 if (scsi_tapes != NULL) {
4144 memcpy(tmp_da, scsi_tapes,
4145 st_dev_max * sizeof(struct scsi_tape *));
4148 scsi_tapes = tmp_da;
4150 st_dev_max = tmp_dev_max;
4153 for (i = 0; i < st_dev_max; i++)
4154 if (scsi_tapes[i] == NULL)
4156 if (i >= st_dev_max)
4157 panic("scsi_devices corrupt (st)");
4159 tpnt = kzalloc(sizeof(struct scsi_tape), GFP_ATOMIC);
4161 write_unlock(&st_dev_arr_lock);
4162 printk(KERN_ERR "st: Can't allocate device descriptor.\n");
4165 kref_init(&tpnt->kref);
4167 sprintf(disk->disk_name, "st%d", i);
4168 disk->private_data = &tpnt->driver;
4169 disk->queue = SDp->request_queue;
4170 tpnt->driver = &st_template;
4171 scsi_tapes[i] = tpnt;
4175 if (SDp->scsi_level <= 2)
4176 tpnt->tape_type = MT_ISSCSI1;
4178 tpnt->tape_type = MT_ISSCSI2;
4180 tpnt->buffer = buffer;
4181 tpnt->buffer->last_SRpnt = NULL;
4186 tpnt->drv_buffer = 1; /* Try buffering if no mode sense */
4187 tpnt->restr_dma = (SDp->host)->unchecked_isa_dma;
4188 tpnt->use_pf = (SDp->scsi_level >= SCSI_2);
4190 tpnt->do_auto_lock = ST_AUTO_LOCK;
4191 tpnt->can_bsr = (SDp->scsi_level > 2 ? 1 : ST_IN_FILE_POS); /* BSR mandatory in SCSI3 */
4192 tpnt->can_partitions = 0;
4193 tpnt->two_fm = ST_TWO_FM;
4194 tpnt->fast_mteom = ST_FAST_MTEOM;
4195 tpnt->scsi2_logical = ST_SCSI2LOGICAL;
4196 tpnt->sili = ST_SILI;
4197 tpnt->immediate = ST_NOWAIT;
4198 tpnt->default_drvbuffer = 0xff; /* No forced buffering */
4199 tpnt->partition = 0;
4200 tpnt->new_partition = 0;
4201 tpnt->nbr_partitions = 0;
4202 blk_queue_rq_timeout(tpnt->device->request_queue, ST_TIMEOUT);
4203 tpnt->long_timeout = ST_LONG_TIMEOUT;
4204 tpnt->try_dio = try_direct_io && !SDp->host->unchecked_isa_dma;
4206 for (i = 0; i < ST_NBR_MODES; i++) {
4207 STm = &(tpnt->modes[i]);
4209 STm->sysv = ST_SYSV;
4210 STm->defaults_for_writes = 0;
4211 STm->do_async_writes = ST_ASYNC_WRITES;
4212 STm->do_buffer_writes = ST_BUFFER_WRITES;
4213 STm->do_read_ahead = ST_READ_AHEAD;
4214 STm->default_compression = ST_DONT_TOUCH;
4215 STm->default_blksize = (-1); /* No forced size */
4216 STm->default_density = (-1); /* No forced density */
4219 for (i = 0; i < ST_NBR_PARTITIONS; i++) {
4220 STps = &(tpnt->ps[i]);
4222 STps->eof = ST_NOEOF;
4224 STps->last_block_valid = 0;
4225 STps->drv_block = (-1);
4226 STps->drv_file = (-1);
4229 tpnt->current_mode = 0;
4230 tpnt->modes[0].defined = 1;
4232 tpnt->density_changed = tpnt->compression_changed =
4233 tpnt->blksize_changed = 0;
4234 mutex_init(&tpnt->lock);
4237 write_unlock(&st_dev_arr_lock);
4239 for (mode = 0; mode < ST_NBR_MODES; ++mode) {
4240 STm = &(tpnt->modes[mode]);
4241 for (j=0; j < 2; j++) {
4242 cdev = cdev_alloc();
4245 "st%d: out of memory. Device not attached.\n",
4249 cdev->owner = THIS_MODULE;
4250 cdev->ops = &st_fops;
4252 error = cdev_add(cdev,
4253 MKDEV(SCSI_TAPE_MAJOR, TAPE_MINOR(dev_num, mode, j)),
4256 printk(KERN_ERR "st%d: Can't add %s-rewind mode %d\n",
4257 dev_num, j ? "non" : "auto", mode);
4258 printk(KERN_ERR "st%d: Device not attached.\n", dev_num);
4261 STm->cdevs[j] = cdev;
4264 error = do_create_class_files(tpnt, dev_num, mode);
4269 sdev_printk(KERN_NOTICE, SDp,
4270 "Attached scsi tape %s\n", tape_name(tpnt));
4271 sdev_printk(KERN_INFO, SDp, "%s: try direct i/o: %s (alignment %d B)\n",
4272 tape_name(tpnt), tpnt->try_dio ? "yes" : "no",
4273 queue_dma_alignment(SDp->request_queue) + 1);
4278 for (mode=0; mode < ST_NBR_MODES; mode++) {
4279 STm = &(tpnt->modes[mode]);
4280 sysfs_remove_link(&tpnt->device->sdev_gendev.kobj,
4282 for (j=0; j < 2; j++) {
4283 if (STm->cdevs[j]) {
4284 if (cdev == STm->cdevs[j])
4286 device_destroy(st_sysfs_class,
4287 MKDEV(SCSI_TAPE_MAJOR,
4288 TAPE_MINOR(i, mode, j)));
4289 cdev_del(STm->cdevs[j]);
4295 write_lock(&st_dev_arr_lock);
4296 scsi_tapes[dev_num] = NULL;
4298 write_unlock(&st_dev_arr_lock);
4309 static int st_remove(struct device *dev)
4311 struct scsi_device *SDp = to_scsi_device(dev);
4312 struct scsi_tape *tpnt;
4315 write_lock(&st_dev_arr_lock);
4316 for (i = 0; i < st_dev_max; i++) {
4317 tpnt = scsi_tapes[i];
4318 if (tpnt != NULL && tpnt->device == SDp) {
4319 scsi_tapes[i] = NULL;
4321 write_unlock(&st_dev_arr_lock);
4322 sysfs_remove_link(&tpnt->device->sdev_gendev.kobj,
4324 for (mode = 0; mode < ST_NBR_MODES; ++mode) {
4325 for (j=0; j < 2; j++) {
4326 device_destroy(st_sysfs_class,
4327 MKDEV(SCSI_TAPE_MAJOR,
4328 TAPE_MINOR(i, mode, j)));
4329 cdev_del(tpnt->modes[mode].cdevs[j]);
4330 tpnt->modes[mode].cdevs[j] = NULL;
4334 mutex_lock(&st_ref_mutex);
4335 kref_put(&tpnt->kref, scsi_tape_release);
4336 mutex_unlock(&st_ref_mutex);
4341 write_unlock(&st_dev_arr_lock);
4346 * scsi_tape_release - Called to free the Scsi_Tape structure
4347 * @kref: pointer to embedded kref
4349 * st_ref_mutex must be held entering this routine. Because it is
4350 * called on last put, you should always use the scsi_tape_get()
4351 * scsi_tape_put() helpers which manipulate the semaphore directly
4352 * and never do a direct kref_put().
4354 static void scsi_tape_release(struct kref *kref)
4356 struct scsi_tape *tpnt = to_scsi_tape(kref);
4357 struct gendisk *disk = tpnt->disk;
4359 tpnt->device = NULL;
4362 tpnt->buffer->orig_frp_segs = 0;
4363 normalize_buffer(tpnt->buffer);
4364 kfree(tpnt->buffer->reserved_pages);
4365 kfree(tpnt->buffer);
4368 disk->private_data = NULL;
4374 static int __init init_st(void)
4380 printk(KERN_INFO "st: Version %s, fixed bufsize %d, s/g segs %d\n",
4381 verstr, st_fixed_buffer_size, st_max_sg_segs);
4383 st_sysfs_class = class_create(THIS_MODULE, "scsi_tape");
4384 if (IS_ERR(st_sysfs_class)) {
4385 printk(KERN_ERR "Unable create sysfs class for SCSI tapes\n");
4386 return PTR_ERR(st_sysfs_class);
4389 err = register_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
4390 ST_MAX_TAPE_ENTRIES, "st");
4392 printk(KERN_ERR "Unable to get major %d for SCSI tapes\n",
4397 err = scsi_register_driver(&st_template.gendrv);
4401 err = do_create_sysfs_files();
4408 scsi_unregister_driver(&st_template.gendrv);
4410 unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
4411 ST_MAX_TAPE_ENTRIES);
4413 class_destroy(st_sysfs_class);
4417 static void __exit exit_st(void)
4419 do_remove_sysfs_files();
4420 scsi_unregister_driver(&st_template.gendrv);
4421 unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
4422 ST_MAX_TAPE_ENTRIES);
4423 class_destroy(st_sysfs_class);
4425 printk(KERN_INFO "st: Unloaded.\n");
4428 module_init(init_st);
4429 module_exit(exit_st);
4432 /* The sysfs driver interface. Read-only at the moment */
4433 static ssize_t st_try_direct_io_show(struct device_driver *ddp, char *buf)
4435 return snprintf(buf, PAGE_SIZE, "%d\n", try_direct_io);
4437 static DRIVER_ATTR(try_direct_io, S_IRUGO, st_try_direct_io_show, NULL);
4439 static ssize_t st_fixed_buffer_size_show(struct device_driver *ddp, char *buf)
4441 return snprintf(buf, PAGE_SIZE, "%d\n", st_fixed_buffer_size);
4443 static DRIVER_ATTR(fixed_buffer_size, S_IRUGO, st_fixed_buffer_size_show, NULL);
4445 static ssize_t st_max_sg_segs_show(struct device_driver *ddp, char *buf)
4447 return snprintf(buf, PAGE_SIZE, "%d\n", st_max_sg_segs);
4449 static DRIVER_ATTR(max_sg_segs, S_IRUGO, st_max_sg_segs_show, NULL);
4451 static ssize_t st_version_show(struct device_driver *ddd, char *buf)
4453 return snprintf(buf, PAGE_SIZE, "[%s]\n", verstr);
4455 static DRIVER_ATTR(version, S_IRUGO, st_version_show, NULL);
4457 static int do_create_sysfs_files(void)
4459 struct device_driver *sysfs = &st_template.gendrv;
4462 err = driver_create_file(sysfs, &driver_attr_try_direct_io);
4465 err = driver_create_file(sysfs, &driver_attr_fixed_buffer_size);
4467 goto err_try_direct_io;
4468 err = driver_create_file(sysfs, &driver_attr_max_sg_segs);
4470 goto err_attr_fixed_buf;
4471 err = driver_create_file(sysfs, &driver_attr_version);
4473 goto err_attr_max_sg;
4478 driver_remove_file(sysfs, &driver_attr_max_sg_segs);
4480 driver_remove_file(sysfs, &driver_attr_fixed_buffer_size);
4482 driver_remove_file(sysfs, &driver_attr_try_direct_io);
4486 static void do_remove_sysfs_files(void)
4488 struct device_driver *sysfs = &st_template.gendrv;
4490 driver_remove_file(sysfs, &driver_attr_version);
4491 driver_remove_file(sysfs, &driver_attr_max_sg_segs);
4492 driver_remove_file(sysfs, &driver_attr_fixed_buffer_size);
4493 driver_remove_file(sysfs, &driver_attr_try_direct_io);
4497 /* The sysfs simple class interface */
4499 st_defined_show(struct device *dev, struct device_attribute *attr, char *buf)
4501 struct st_modedef *STm = dev_get_drvdata(dev);
4504 l = snprintf(buf, PAGE_SIZE, "%d\n", STm->defined);
4508 DEVICE_ATTR(defined, S_IRUGO, st_defined_show, NULL);
4511 st_defblk_show(struct device *dev, struct device_attribute *attr, char *buf)
4513 struct st_modedef *STm = dev_get_drvdata(dev);
4516 l = snprintf(buf, PAGE_SIZE, "%d\n", STm->default_blksize);
4520 DEVICE_ATTR(default_blksize, S_IRUGO, st_defblk_show, NULL);
4523 st_defdensity_show(struct device *dev, struct device_attribute *attr, char *buf)
4525 struct st_modedef *STm = dev_get_drvdata(dev);
4529 fmt = STm->default_density >= 0 ? "0x%02x\n" : "%d\n";
4530 l = snprintf(buf, PAGE_SIZE, fmt, STm->default_density);
4534 DEVICE_ATTR(default_density, S_IRUGO, st_defdensity_show, NULL);
4537 st_defcompression_show(struct device *dev, struct device_attribute *attr,
4540 struct st_modedef *STm = dev_get_drvdata(dev);
4543 l = snprintf(buf, PAGE_SIZE, "%d\n", STm->default_compression - 1);
4547 DEVICE_ATTR(default_compression, S_IRUGO, st_defcompression_show, NULL);
4550 st_options_show(struct device *dev, struct device_attribute *attr, char *buf)
4552 struct st_modedef *STm = dev_get_drvdata(dev);
4553 struct scsi_tape *STp;
4557 for (i=0; i < st_dev_max; i++) {
4558 for (j=0; j < ST_NBR_MODES; j++)
4559 if (&scsi_tapes[i]->modes[j] == STm)
4561 if (j < ST_NBR_MODES)
4564 if (i == st_dev_max)
4565 return 0; /* should never happen */
4567 STp = scsi_tapes[i];
4569 options = STm->do_buffer_writes ? MT_ST_BUFFER_WRITES : 0;
4570 options |= STm->do_async_writes ? MT_ST_ASYNC_WRITES : 0;
4571 options |= STm->do_read_ahead ? MT_ST_READ_AHEAD : 0;
4572 DEB( options |= debugging ? MT_ST_DEBUGGING : 0 );
4573 options |= STp->two_fm ? MT_ST_TWO_FM : 0;
4574 options |= STp->fast_mteom ? MT_ST_FAST_MTEOM : 0;
4575 options |= STm->defaults_for_writes ? MT_ST_DEF_WRITES : 0;
4576 options |= STp->can_bsr ? MT_ST_CAN_BSR : 0;
4577 options |= STp->omit_blklims ? MT_ST_NO_BLKLIMS : 0;
4578 options |= STp->can_partitions ? MT_ST_CAN_PARTITIONS : 0;
4579 options |= STp->scsi2_logical ? MT_ST_SCSI2LOGICAL : 0;
4580 options |= STm->sysv ? MT_ST_SYSV : 0;
4581 options |= STp->immediate ? MT_ST_NOWAIT : 0;
4582 options |= STp->sili ? MT_ST_SILI : 0;
4584 l = snprintf(buf, PAGE_SIZE, "0x%08x\n", options);
4588 DEVICE_ATTR(options, S_IRUGO, st_options_show, NULL);
4590 static int do_create_class_files(struct scsi_tape *STp, int dev_num, int mode)
4594 struct device *st_class_member;
4596 for (rew=0; rew < 2; rew++) {
4597 /* Make sure that the minor numbers corresponding to the four
4598 first modes always get the same names */
4599 i = mode << (4 - ST_NBR_MODE_BITS);
4600 snprintf(name, 10, "%s%s%s", rew ? "n" : "",
4601 STp->disk->disk_name, st_formats[i]);
4603 device_create(st_sysfs_class, &STp->device->sdev_gendev,
4604 MKDEV(SCSI_TAPE_MAJOR,
4605 TAPE_MINOR(dev_num, mode, rew)),
4606 &STp->modes[mode], "%s", name);
4607 if (IS_ERR(st_class_member)) {
4608 printk(KERN_WARNING "st%d: device_create failed\n",
4610 error = PTR_ERR(st_class_member);
4614 error = device_create_file(st_class_member,
4616 if (error) goto out;
4617 error = device_create_file(st_class_member,
4618 &dev_attr_default_blksize);
4619 if (error) goto out;
4620 error = device_create_file(st_class_member,
4621 &dev_attr_default_density);
4622 if (error) goto out;
4623 error = device_create_file(st_class_member,
4624 &dev_attr_default_compression);
4625 if (error) goto out;
4626 error = device_create_file(st_class_member,
4628 if (error) goto out;
4630 if (mode == 0 && rew == 0) {
4631 error = sysfs_create_link(&STp->device->sdev_gendev.kobj,
4632 &st_class_member->kobj,
4636 "st%d: Can't create sysfs link from SCSI device.\n",
4649 /* The following functions may be useful for a larger audience. */
4650 static int sgl_map_user_pages(struct scatterlist *sgl, const unsigned int max_pages,
4651 unsigned long uaddr, size_t count, int rw)
4653 unsigned long end = (uaddr + count + PAGE_SIZE - 1) >> PAGE_SHIFT;
4654 unsigned long start = uaddr >> PAGE_SHIFT;
4655 const int nr_pages = end - start;
4657 struct page **pages;
4659 /* User attempted Overflow! */
4660 if ((uaddr + count) < uaddr)
4664 if (nr_pages > max_pages)
4671 if ((pages = kmalloc(max_pages * sizeof(*pages), GFP_KERNEL)) == NULL)
4674 /* Try to fault in all of the necessary pages */
4675 down_read(¤t->mm->mmap_sem);
4676 /* rw==READ means read from drive, write into memory area */
4677 res = get_user_pages(
4683 0, /* don't force */
4686 up_read(¤t->mm->mmap_sem);
4688 /* Errors and no page mapped should return here */
4692 for (i=0; i < nr_pages; i++) {
4693 /* FIXME: flush superflous for rw==READ,
4694 * probably wrong function for rw==WRITE
4696 flush_dcache_page(pages[i]);
4699 /* Populate the scatter/gather list */
4700 sg_set_page(&sgl[0], pages[0], 0, uaddr & ~PAGE_MASK);
4702 sgl[0].length = PAGE_SIZE - sgl[0].offset;
4703 count -= sgl[0].length;
4704 for (i=1; i < nr_pages ; i++) {
4705 sg_set_page(&sgl[i], pages[i],
4706 count < PAGE_SIZE ? count : PAGE_SIZE, 0);;
4711 sgl[0].length = count;
4719 for (j=0; j < res; j++)
4720 page_cache_release(pages[j]);
4728 /* And unmap them... */
4729 static int sgl_unmap_user_pages(struct scatterlist *sgl, const unsigned int nr_pages,
4734 for (i=0; i < nr_pages; i++) {
4735 struct page *page = sg_page(&sgl[i]);
4739 /* FIXME: cache flush missing for rw==READ
4740 * FIXME: call the correct reference counting function
4742 page_cache_release(page);