1/*
2   SCSI Tape Driver for Linux version 1.1 and newer. See the accompanying
3   file Documentation/scsi/st.txt for more information.
4
5   History:
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.
11
12   Copyright 1992 - 2010 Kai Makisara
13   email Kai.Makisara@kolumbus.fi
14
15   Some small formal changes - aeb, 950809
16
17   Last modified: 18-JAN-1998 Richard Gooch <rgooch@atnf.csiro.au> Devfs support
18 */
19
20static const char *verstr = "20101219";
21
22#include <linux/module.h>
23
24#include <linux/fs.h>
25#include <linux/kernel.h>
26#include <linux/sched.h>
27#include <linux/mm.h>
28#include <linux/init.h>
29#include <linux/string.h>
30#include <linux/slab.h>
31#include <linux/errno.h>
32#include <linux/mtio.h>
33#include <linux/cdrom.h>
34#include <linux/ioctl.h>
35#include <linux/fcntl.h>
36#include <linux/spinlock.h>
37#include <linux/blkdev.h>
38#include <linux/moduleparam.h>
39#include <linux/cdev.h>
40#include <linux/idr.h>
41#include <linux/delay.h>
42#include <linux/mutex.h>
43
44#include <asm/uaccess.h>
45#include <asm/dma.h>
46
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>
54#include <scsi/sg.h>
55
56
57/* The driver prints some debugging information on the console if DEBUG
58   is defined and non-zero. */
59#define DEBUG 0
60
61#define ST_DEB_MSG  KERN_NOTICE
62#if DEBUG
63/* The message level for the debug messages is currently set to KERN_NOTICE
64   so that people can easily see the messages. Later when the debugging messages
65   in the drivers are more widely classified, this may be changed to KERN_DEBUG. */
66#define DEB(a) a
67#define DEBC(a) if (debugging) { a ; }
68#else
69#define DEB(a)
70#define DEBC(a)
71#endif
72
73#define ST_KILOBYTE 1024
74
75#include "st_options.h"
76#include "st.h"
77
78static int buffer_kbs;
79static int max_sg_segs;
80static int try_direct_io = TRY_DIRECT_IO;
81static int try_rdio = 1;
82static int try_wdio = 1;
83
84static struct class st_sysfs_class;
85static const struct attribute_group *st_dev_groups[];
86
87MODULE_AUTHOR("Kai Makisara");
88MODULE_DESCRIPTION("SCSI tape (st) driver");
89MODULE_LICENSE("GPL");
90MODULE_ALIAS_CHARDEV_MAJOR(SCSI_TAPE_MAJOR);
91MODULE_ALIAS_SCSI_DEVICE(TYPE_TAPE);
92
93/* Set 'perm' (4th argument) to 0 to disable module_param's definition
94 * of sysfs parameters (which module_param doesn't yet support).
95 * Sysfs parameters defined explicitly later.
96 */
97module_param_named(buffer_kbs, buffer_kbs, int, 0);
98MODULE_PARM_DESC(buffer_kbs, "Default driver buffer size for fixed block mode (KB; 32)");
99module_param_named(max_sg_segs, max_sg_segs, int, 0);
100MODULE_PARM_DESC(max_sg_segs, "Maximum number of scatter/gather segments to use (256)");
101module_param_named(try_direct_io, try_direct_io, int, 0);
102MODULE_PARM_DESC(try_direct_io, "Try direct I/O between user buffer and tape drive (1)");
103
104/* Extra parameters for testing */
105module_param_named(try_rdio, try_rdio, int, 0);
106MODULE_PARM_DESC(try_rdio, "Try direct read i/o when possible");
107module_param_named(try_wdio, try_wdio, int, 0);
108MODULE_PARM_DESC(try_wdio, "Try direct write i/o when possible");
109
110#ifndef MODULE
111static int write_threshold_kbs;  /* retained for compatibility */
112static struct st_dev_parm {
113	char *name;
114	int *val;
115} parms[] __initdata = {
116	{
117		"buffer_kbs", &buffer_kbs
118	},
119	{       /* Retained for compatibility with 2.4 */
120		"write_threshold_kbs", &write_threshold_kbs
121	},
122	{
123		"max_sg_segs", NULL
124	},
125	{
126		"try_direct_io", &try_direct_io
127	}
128};
129#endif
130
131/* Restrict the number of modes so that names for all are assigned */
132#if ST_NBR_MODES > 16
133#error "Maximum number of modes is 16"
134#endif
135/* Bit reversed order to get same names for same minors with all
136   mode counts */
137static const char *st_formats[] = {
138	"",  "r", "k", "s", "l", "t", "o", "u",
139	"m", "v", "p", "x", "a", "y", "q", "z"};
140
141/* The default definitions have been moved to st_options.h */
142
143#define ST_FIXED_BUFFER_SIZE (ST_FIXED_BUFFER_BLOCKS * ST_KILOBYTE)
144
145/* The buffer size should fit into the 24 bits for length in the
146   6-byte SCSI read and write commands. */
147#if ST_FIXED_BUFFER_SIZE >= (2 << 24 - 1)
148#error "Buffer size should not exceed (2 << 24 - 1) bytes!"
149#endif
150
151static int debugging = DEBUG;
152
153#define MAX_RETRIES 0
154#define MAX_WRITE_RETRIES 0
155#define MAX_READY_RETRIES 0
156#define NO_TAPE  NOT_READY
157
158#define ST_TIMEOUT (900 * HZ)
159#define ST_LONG_TIMEOUT (14000 * HZ)
160
161/* Remove mode bits and auto-rewind bit (7) */
162#define TAPE_NR(x) ( ((iminor(x) & ~255) >> (ST_NBR_MODE_BITS + 1)) | \
163    (iminor(x) & ~(-1 << ST_MODE_SHIFT)) )
164#define TAPE_MODE(x) ((iminor(x) & ST_MODE_MASK) >> ST_MODE_SHIFT)
165
166/* Construct the minor number from the device (d), mode (m), and non-rewind (n) data */
167#define TAPE_MINOR(d, m, n) (((d & ~(255 >> (ST_NBR_MODE_BITS + 1))) << (ST_NBR_MODE_BITS + 1)) | \
168  (d & (255 >> (ST_NBR_MODE_BITS + 1))) | (m << ST_MODE_SHIFT) | ((n != 0) << 7) )
169
170/* Internal ioctl to set both density (uppermost 8 bits) and blocksize (lower
171   24 bits) */
172#define SET_DENS_AND_BLK 0x10001
173
174static int st_fixed_buffer_size = ST_FIXED_BUFFER_SIZE;
175static int st_max_sg_segs = ST_MAX_SG;
176
177static int modes_defined;
178
179static int enlarge_buffer(struct st_buffer *, int, int);
180static void clear_buffer(struct st_buffer *);
181static void normalize_buffer(struct st_buffer *);
182static int append_to_buffer(const char __user *, struct st_buffer *, int);
183static int from_buffer(struct st_buffer *, char __user *, int);
184static void move_buffer_data(struct st_buffer *, int);
185
186static int sgl_map_user_pages(struct st_buffer *, const unsigned int,
187			      unsigned long, size_t, int);
188static int sgl_unmap_user_pages(struct st_buffer *, const unsigned int, int);
189
190static int st_probe(struct device *);
191static int st_remove(struct device *);
192
193static int do_create_sysfs_files(void);
194static void do_remove_sysfs_files(void);
195
196static struct scsi_driver st_template = {
197	.owner			= THIS_MODULE,
198	.gendrv = {
199		.name		= "st",
200		.probe		= st_probe,
201		.remove		= st_remove,
202	},
203};
204
205static int st_compression(struct scsi_tape *, int);
206
207static int find_partition(struct scsi_tape *);
208static int switch_partition(struct scsi_tape *);
209
210static int st_int_ioctl(struct scsi_tape *, unsigned int, unsigned long);
211
212static void scsi_tape_release(struct kref *);
213
214#define to_scsi_tape(obj) container_of(obj, struct scsi_tape, kref)
215
216static DEFINE_MUTEX(st_ref_mutex);
217static DEFINE_SPINLOCK(st_index_lock);
218static DEFINE_SPINLOCK(st_use_lock);
219static DEFINE_IDR(st_index_idr);
220
221
222
223#include "osst_detect.h"
224#ifndef SIGS_FROM_OSST
225#define SIGS_FROM_OSST \
226	{"OnStream", "SC-", "", "osst"}, \
227	{"OnStream", "DI-", "", "osst"}, \
228	{"OnStream", "DP-", "", "osst"}, \
229	{"OnStream", "USB", "", "osst"}, \
230	{"OnStream", "FW-", "", "osst"}
231#endif
232
233static struct scsi_tape *scsi_tape_get(int dev)
234{
235	struct scsi_tape *STp = NULL;
236
237	mutex_lock(&st_ref_mutex);
238	spin_lock(&st_index_lock);
239
240	STp = idr_find(&st_index_idr, dev);
241	if (!STp) goto out;
242
243	kref_get(&STp->kref);
244
245	if (!STp->device)
246		goto out_put;
247
248	if (scsi_device_get(STp->device))
249		goto out_put;
250
251	goto out;
252
253out_put:
254	kref_put(&STp->kref, scsi_tape_release);
255	STp = NULL;
256out:
257	spin_unlock(&st_index_lock);
258	mutex_unlock(&st_ref_mutex);
259	return STp;
260}
261
262static void scsi_tape_put(struct scsi_tape *STp)
263{
264	struct scsi_device *sdev = STp->device;
265
266	mutex_lock(&st_ref_mutex);
267	kref_put(&STp->kref, scsi_tape_release);
268	scsi_device_put(sdev);
269	mutex_unlock(&st_ref_mutex);
270}
271
272struct st_reject_data {
273	char *vendor;
274	char *model;
275	char *rev;
276	char *driver_hint; /* Name of the correct driver, NULL if unknown */
277};
278
279static struct st_reject_data reject_list[] = {
280	/* {"XXX", "Yy-", "", NULL},  example */
281	SIGS_FROM_OSST,
282	{NULL, }};
283
284/* If the device signature is on the list of incompatible drives, the
285   function returns a pointer to the name of the correct driver (if known) */
286static char * st_incompatible(struct scsi_device* SDp)
287{
288	struct st_reject_data *rp;
289
290	for (rp=&(reject_list[0]); rp->vendor != NULL; rp++)
291		if (!strncmp(rp->vendor, SDp->vendor, strlen(rp->vendor)) &&
292		    !strncmp(rp->model, SDp->model, strlen(rp->model)) &&
293		    !strncmp(rp->rev, SDp->rev, strlen(rp->rev))) {
294			if (rp->driver_hint)
295				return rp->driver_hint;
296			else
297				return "unknown";
298		}
299	return NULL;
300}
301
302
303static inline char *tape_name(struct scsi_tape *tape)
304{
305	return tape->disk->disk_name;
306}
307
308#define st_printk(prefix, t, fmt, a...) \
309	sdev_printk(prefix, (t)->device, "%s: " fmt, \
310		    tape_name(t), ##a)
311#ifdef DEBUG
312#define DEBC_printk(t, fmt, a...) \
313	if (debugging) { st_printk(ST_DEB_MSG, t, fmt, ##a ); }
314#else
315#define DEBC_printk(t, fmt, a...)
316#endif
317
318static void st_analyze_sense(struct st_request *SRpnt, struct st_cmdstatus *s)
319{
320	const u8 *ucp;
321	const u8 *sense = SRpnt->sense;
322
323	s->have_sense = scsi_normalize_sense(SRpnt->sense,
324				SCSI_SENSE_BUFFERSIZE, &s->sense_hdr);
325	s->flags = 0;
326
327	if (s->have_sense) {
328		s->deferred = 0;
329		s->remainder_valid =
330			scsi_get_sense_info_fld(sense, SCSI_SENSE_BUFFERSIZE, &s->uremainder64);
331		switch (sense[0] & 0x7f) {
332		case 0x71:
333			s->deferred = 1;
334		case 0x70:
335			s->fixed_format = 1;
336			s->flags = sense[2] & 0xe0;
337			break;
338		case 0x73:
339			s->deferred = 1;
340		case 0x72:
341			s->fixed_format = 0;
342			ucp = scsi_sense_desc_find(sense, SCSI_SENSE_BUFFERSIZE, 4);
343			s->flags = ucp ? (ucp[3] & 0xe0) : 0;
344			break;
345		}
346	}
347}
348
349
350/* Convert the result to success code */
351static int st_chk_result(struct scsi_tape *STp, struct st_request * SRpnt)
352{
353	int result = SRpnt->result;
354	u8 scode;
355	DEB(const char *stp;)
356	char *name = tape_name(STp);
357	struct st_cmdstatus *cmdstatp;
358
359	if (!result)
360		return 0;
361
362	cmdstatp = &STp->buffer->cmdstat;
363	st_analyze_sense(SRpnt, cmdstatp);
364
365	if (cmdstatp->have_sense)
366		scode = STp->buffer->cmdstat.sense_hdr.sense_key;
367	else
368		scode = 0;
369
370	DEB(
371	if (debugging) {
372		st_printk(ST_DEB_MSG, STp,
373			    "Error: %x, cmd: %x %x %x %x %x %x\n", result,
374			    SRpnt->cmd[0], SRpnt->cmd[1], SRpnt->cmd[2],
375			    SRpnt->cmd[3], SRpnt->cmd[4], SRpnt->cmd[5]);
376		if (cmdstatp->have_sense)
377			 __scsi_print_sense(name, SRpnt->sense, SCSI_SENSE_BUFFERSIZE);
378	} ) /* end DEB */
379	if (!debugging) { /* Abnormal conditions for tape */
380		if (!cmdstatp->have_sense)
381			st_printk(KERN_WARNING, STp,
382			       "Error %x (driver bt 0x%x, host bt 0x%x).\n",
383			       result, driver_byte(result), host_byte(result));
384		else if (cmdstatp->have_sense &&
385			 scode != NO_SENSE &&
386			 scode != RECOVERED_ERROR &&
387			 /* scode != UNIT_ATTENTION && */
388			 scode != BLANK_CHECK &&
389			 scode != VOLUME_OVERFLOW &&
390			 SRpnt->cmd[0] != MODE_SENSE &&
391			 SRpnt->cmd[0] != TEST_UNIT_READY) {
392
393			__scsi_print_sense(name, SRpnt->sense, SCSI_SENSE_BUFFERSIZE);
394		}
395	}
396
397	if (cmdstatp->fixed_format &&
398	    STp->cln_mode >= EXTENDED_SENSE_START) {  /* Only fixed format sense */
399		if (STp->cln_sense_value)
400			STp->cleaning_req |= ((SRpnt->sense[STp->cln_mode] &
401					       STp->cln_sense_mask) == STp->cln_sense_value);
402		else
403			STp->cleaning_req |= ((SRpnt->sense[STp->cln_mode] &
404					       STp->cln_sense_mask) != 0);
405	}
406	if (cmdstatp->have_sense &&
407	    cmdstatp->sense_hdr.asc == 0 && cmdstatp->sense_hdr.ascq == 0x17)
408		STp->cleaning_req = 1; /* ASC and ASCQ => cleaning requested */
409
410	STp->pos_unknown |= STp->device->was_reset;
411
412	if (cmdstatp->have_sense &&
413	    scode == RECOVERED_ERROR
414#if ST_RECOVERED_WRITE_FATAL
415	    && SRpnt->cmd[0] != WRITE_6
416	    && SRpnt->cmd[0] != WRITE_FILEMARKS
417#endif
418	    ) {
419		STp->recover_count++;
420		STp->recover_reg++;
421
422		DEB(
423		if (debugging) {
424			if (SRpnt->cmd[0] == READ_6)
425				stp = "read";
426			else if (SRpnt->cmd[0] == WRITE_6)
427				stp = "write";
428			else
429				stp = "ioctl";
430			st_printk(ST_DEB_MSG, STp,
431				  "Recovered %s error (%d).\n",
432				  stp, STp->recover_count);
433		} ) /* end DEB */
434
435		if (cmdstatp->flags == 0)
436			return 0;
437	}
438	return (-EIO);
439}
440
441static struct st_request *st_allocate_request(struct scsi_tape *stp)
442{
443	struct st_request *streq;
444
445	streq = kzalloc(sizeof(*streq), GFP_KERNEL);
446	if (streq)
447		streq->stp = stp;
448	else {
449		st_printk(KERN_ERR, stp,
450			  "Can't get SCSI request.\n");
451		if (signal_pending(current))
452			stp->buffer->syscall_result = -EINTR;
453		else
454			stp->buffer->syscall_result = -EBUSY;
455	}
456
457	return streq;
458}
459
460static void st_release_request(struct st_request *streq)
461{
462	kfree(streq);
463}
464
465static void st_scsi_execute_end(struct request *req, int uptodate)
466{
467	struct st_request *SRpnt = req->end_io_data;
468	struct scsi_tape *STp = SRpnt->stp;
469	struct bio *tmp;
470
471	STp->buffer->cmdstat.midlevel_result = SRpnt->result = req->errors;
472	STp->buffer->cmdstat.residual = req->resid_len;
473
474	tmp = SRpnt->bio;
475	if (SRpnt->waiting)
476		complete(SRpnt->waiting);
477
478	blk_rq_unmap_user(tmp);
479	__blk_put_request(req->q, req);
480}
481
482static int st_scsi_execute(struct st_request *SRpnt, const unsigned char *cmd,
483			   int data_direction, void *buffer, unsigned bufflen,
484			   int timeout, int retries)
485{
486	struct request *req;
487	struct rq_map_data *mdata = &SRpnt->stp->buffer->map_data;
488	int err = 0;
489	int write = (data_direction == DMA_TO_DEVICE);
490
491	req = blk_get_request(SRpnt->stp->device->request_queue, write,
492			      GFP_KERNEL);
493	if (IS_ERR(req))
494		return DRIVER_ERROR << 24;
495
496	blk_rq_set_block_pc(req);
497	req->cmd_flags |= REQ_QUIET;
498
499	mdata->null_mapped = 1;
500
501	if (bufflen) {
502		err = blk_rq_map_user(req->q, req, mdata, NULL, bufflen,
503				      GFP_KERNEL);
504		if (err) {
505			blk_put_request(req);
506			return DRIVER_ERROR << 24;
507		}
508	}
509
510	SRpnt->bio = req->bio;
511	req->cmd_len = COMMAND_SIZE(cmd[0]);
512	memset(req->cmd, 0, BLK_MAX_CDB);
513	memcpy(req->cmd, cmd, req->cmd_len);
514	req->sense = SRpnt->sense;
515	req->sense_len = 0;
516	req->timeout = timeout;
517	req->retries = retries;
518	req->end_io_data = SRpnt;
519
520	blk_execute_rq_nowait(req->q, NULL, req, 1, st_scsi_execute_end);
521	return 0;
522}
523
524/* Do the scsi command. Waits until command performed if do_wait is true.
525   Otherwise write_behind_check() is used to check that the command
526   has finished. */
527static struct st_request *
528st_do_scsi(struct st_request * SRpnt, struct scsi_tape * STp, unsigned char *cmd,
529	   int bytes, int direction, int timeout, int retries, int do_wait)
530{
531	struct completion *waiting;
532	struct rq_map_data *mdata = &STp->buffer->map_data;
533	int ret;
534
535	/* if async, make sure there's no command outstanding */
536	if (!do_wait && ((STp->buffer)->last_SRpnt)) {
537		st_printk(KERN_ERR, STp,
538			  "Async command already active.\n");
539		if (signal_pending(current))
540			(STp->buffer)->syscall_result = (-EINTR);
541		else
542			(STp->buffer)->syscall_result = (-EBUSY);
543		return NULL;
544	}
545
546	if (!SRpnt) {
547		SRpnt = st_allocate_request(STp);
548		if (!SRpnt)
549			return NULL;
550	}
551
552	/* If async IO, set last_SRpnt. This ptr tells write_behind_check
553	   which IO is outstanding. It's nulled out when the IO completes. */
554	if (!do_wait)
555		(STp->buffer)->last_SRpnt = SRpnt;
556
557	waiting = &STp->wait;
558	init_completion(waiting);
559	SRpnt->waiting = waiting;
560
561	if (STp->buffer->do_dio) {
562		mdata->page_order = 0;
563		mdata->nr_entries = STp->buffer->sg_segs;
564		mdata->pages = STp->buffer->mapped_pages;
565	} else {
566		mdata->page_order = STp->buffer->reserved_page_order;
567		mdata->nr_entries =
568			DIV_ROUND_UP(bytes, PAGE_SIZE << mdata->page_order);
569		mdata->pages = STp->buffer->reserved_pages;
570		mdata->offset = 0;
571	}
572
573	memcpy(SRpnt->cmd, cmd, sizeof(SRpnt->cmd));
574	STp->buffer->cmdstat.have_sense = 0;
575	STp->buffer->syscall_result = 0;
576
577	ret = st_scsi_execute(SRpnt, cmd, direction, NULL, bytes, timeout,
578			      retries);
579	if (ret) {
580		/* could not allocate the buffer or request was too large */
581		(STp->buffer)->syscall_result = (-EBUSY);
582		(STp->buffer)->last_SRpnt = NULL;
583	} else if (do_wait) {
584		wait_for_completion(waiting);
585		SRpnt->waiting = NULL;
586		(STp->buffer)->syscall_result = st_chk_result(STp, SRpnt);
587	}
588
589	return SRpnt;
590}
591
592
593/* Handle the write-behind checking (waits for completion). Returns -ENOSPC if
594   write has been correct but EOM early warning reached, -EIO if write ended in
595   error or zero if write successful. Asynchronous writes are used only in
596   variable block mode. */
597static int write_behind_check(struct scsi_tape * STp)
598{
599	int retval = 0;
600	struct st_buffer *STbuffer;
601	struct st_partstat *STps;
602	struct st_cmdstatus *cmdstatp;
603	struct st_request *SRpnt;
604
605	STbuffer = STp->buffer;
606	if (!STbuffer->writing)
607		return 0;
608
609	DEB(
610	if (STp->write_pending)
611		STp->nbr_waits++;
612	else
613		STp->nbr_finished++;
614	) /* end DEB */
615
616	wait_for_completion(&(STp->wait));
617	SRpnt = STbuffer->last_SRpnt;
618	STbuffer->last_SRpnt = NULL;
619	SRpnt->waiting = NULL;
620
621	(STp->buffer)->syscall_result = st_chk_result(STp, SRpnt);
622	st_release_request(SRpnt);
623
624	STbuffer->buffer_bytes -= STbuffer->writing;
625	STps = &(STp->ps[STp->partition]);
626	if (STps->drv_block >= 0) {
627		if (STp->block_size == 0)
628			STps->drv_block++;
629		else
630			STps->drv_block += STbuffer->writing / STp->block_size;
631	}
632
633	cmdstatp = &STbuffer->cmdstat;
634	if (STbuffer->syscall_result) {
635		retval = -EIO;
636		if (cmdstatp->have_sense && !cmdstatp->deferred &&
637		    (cmdstatp->flags & SENSE_EOM) &&
638		    (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
639		     cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR)) {
640			/* EOM at write-behind, has all data been written? */
641			if (!cmdstatp->remainder_valid ||
642			    cmdstatp->uremainder64 == 0)
643				retval = -ENOSPC;
644		}
645		if (retval == -EIO)
646			STps->drv_block = -1;
647	}
648	STbuffer->writing = 0;
649
650	DEB(if (debugging && retval)
651		    st_printk(ST_DEB_MSG, STp,
652				"Async write error %x, return value %d.\n",
653				STbuffer->cmdstat.midlevel_result, retval);) /* end DEB */
654
655	return retval;
656}
657
658
659/* Step over EOF if it has been inadvertently crossed (ioctl not used because
660   it messes up the block number). */
661static int cross_eof(struct scsi_tape * STp, int forward)
662{
663	struct st_request *SRpnt;
664	unsigned char cmd[MAX_COMMAND_SIZE];
665
666	cmd[0] = SPACE;
667	cmd[1] = 0x01;		/* Space FileMarks */
668	if (forward) {
669		cmd[2] = cmd[3] = 0;
670		cmd[4] = 1;
671	} else
672		cmd[2] = cmd[3] = cmd[4] = 0xff;	/* -1 filemarks */
673	cmd[5] = 0;
674
675	DEBC_printk(STp, "Stepping over filemark %s.\n",
676		    forward ? "forward" : "backward");
677
678	SRpnt = st_do_scsi(NULL, STp, cmd, 0, DMA_NONE,
679			   STp->device->request_queue->rq_timeout,
680			   MAX_RETRIES, 1);
681	if (!SRpnt)
682		return (STp->buffer)->syscall_result;
683
684	st_release_request(SRpnt);
685	SRpnt = NULL;
686
687	if ((STp->buffer)->cmdstat.midlevel_result != 0)
688		st_printk(KERN_ERR, STp,
689			  "Stepping over filemark %s failed.\n",
690			  forward ? "forward" : "backward");
691
692	return (STp->buffer)->syscall_result;
693}
694
695
696/* Flush the write buffer (never need to write if variable blocksize). */
697static int st_flush_write_buffer(struct scsi_tape * STp)
698{
699	int transfer, blks;
700	int result;
701	unsigned char cmd[MAX_COMMAND_SIZE];
702	struct st_request *SRpnt;
703	struct st_partstat *STps;
704
705	result = write_behind_check(STp);
706	if (result)
707		return result;
708
709	result = 0;
710	if (STp->dirty == 1) {
711
712		transfer = STp->buffer->buffer_bytes;
713		DEBC_printk(STp, "Flushing %d bytes.\n", transfer);
714
715		memset(cmd, 0, MAX_COMMAND_SIZE);
716		cmd[0] = WRITE_6;
717		cmd[1] = 1;
718		blks = transfer / STp->block_size;
719		cmd[2] = blks >> 16;
720		cmd[3] = blks >> 8;
721		cmd[4] = blks;
722
723		SRpnt = st_do_scsi(NULL, STp, cmd, transfer, DMA_TO_DEVICE,
724				   STp->device->request_queue->rq_timeout,
725				   MAX_WRITE_RETRIES, 1);
726		if (!SRpnt)
727			return (STp->buffer)->syscall_result;
728
729		STps = &(STp->ps[STp->partition]);
730		if ((STp->buffer)->syscall_result != 0) {
731			struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
732
733			if (cmdstatp->have_sense && !cmdstatp->deferred &&
734			    (cmdstatp->flags & SENSE_EOM) &&
735			    (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
736			     cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) &&
737			    (!cmdstatp->remainder_valid ||
738			     cmdstatp->uremainder64 == 0)) { /* All written at EOM early warning */
739				STp->dirty = 0;
740				(STp->buffer)->buffer_bytes = 0;
741				if (STps->drv_block >= 0)
742					STps->drv_block += blks;
743				result = (-ENOSPC);
744			} else {
745				st_printk(KERN_ERR, STp, "Error on flush.\n");
746				STps->drv_block = (-1);
747				result = (-EIO);
748			}
749		} else {
750			if (STps->drv_block >= 0)
751				STps->drv_block += blks;
752			STp->dirty = 0;
753			(STp->buffer)->buffer_bytes = 0;
754		}
755		st_release_request(SRpnt);
756		SRpnt = NULL;
757	}
758	return result;
759}
760
761
762/* Flush the tape buffer. The tape will be positioned correctly unless
763   seek_next is true. */
764static int flush_buffer(struct scsi_tape *STp, int seek_next)
765{
766	int backspace, result;
767	struct st_buffer *STbuffer;
768	struct st_partstat *STps;
769
770	STbuffer = STp->buffer;
771
772	/*
773	 * If there was a bus reset, block further access
774	 * to this device.
775	 */
776	if (STp->pos_unknown)
777		return (-EIO);
778
779	if (STp->ready != ST_READY)
780		return 0;
781	STps = &(STp->ps[STp->partition]);
782	if (STps->rw == ST_WRITING)	/* Writing */
783		return st_flush_write_buffer(STp);
784
785	if (STp->block_size == 0)
786		return 0;
787
788	backspace = ((STp->buffer)->buffer_bytes +
789		     (STp->buffer)->read_pointer) / STp->block_size -
790	    ((STp->buffer)->read_pointer + STp->block_size - 1) /
791	    STp->block_size;
792	(STp->buffer)->buffer_bytes = 0;
793	(STp->buffer)->read_pointer = 0;
794	result = 0;
795	if (!seek_next) {
796		if (STps->eof == ST_FM_HIT) {
797			result = cross_eof(STp, 0);	/* Back over the EOF hit */
798			if (!result)
799				STps->eof = ST_NOEOF;
800			else {
801				if (STps->drv_file >= 0)
802					STps->drv_file++;
803				STps->drv_block = 0;
804			}
805		}
806		if (!result && backspace > 0)
807			result = st_int_ioctl(STp, MTBSR, backspace);
808	} else if (STps->eof == ST_FM_HIT) {
809		if (STps->drv_file >= 0)
810			STps->drv_file++;
811		STps->drv_block = 0;
812		STps->eof = ST_NOEOF;
813	}
814	return result;
815
816}
817
818/* Set the mode parameters */
819static int set_mode_densblk(struct scsi_tape * STp, struct st_modedef * STm)
820{
821	int set_it = 0;
822	unsigned long arg;
823
824	if (!STp->density_changed &&
825	    STm->default_density >= 0 &&
826	    STm->default_density != STp->density) {
827		arg = STm->default_density;
828		set_it = 1;
829	} else
830		arg = STp->density;
831	arg <<= MT_ST_DENSITY_SHIFT;
832	if (!STp->blksize_changed &&
833	    STm->default_blksize >= 0 &&
834	    STm->default_blksize != STp->block_size) {
835		arg |= STm->default_blksize;
836		set_it = 1;
837	} else
838		arg |= STp->block_size;
839	if (set_it &&
840	    st_int_ioctl(STp, SET_DENS_AND_BLK, arg)) {
841		st_printk(KERN_WARNING, STp,
842			  "Can't set default block size to %d bytes "
843			  "and density %x.\n",
844			  STm->default_blksize, STm->default_density);
845		if (modes_defined)
846			return (-EINVAL);
847	}
848	return 0;
849}
850
851
852/* Lock or unlock the drive door. Don't use when st_request allocated. */
853static int do_door_lock(struct scsi_tape * STp, int do_lock)
854{
855	int retval, cmd;
856
857	cmd = do_lock ? SCSI_IOCTL_DOORLOCK : SCSI_IOCTL_DOORUNLOCK;
858	DEBC_printk(STp, "%socking drive door.\n", do_lock ? "L" : "Unl");
859	retval = scsi_ioctl(STp->device, cmd, NULL);
860	if (!retval) {
861		STp->door_locked = do_lock ? ST_LOCKED_EXPLICIT : ST_UNLOCKED;
862	}
863	else {
864		STp->door_locked = ST_LOCK_FAILS;
865	}
866	return retval;
867}
868
869
870/* Set the internal state after reset */
871static void reset_state(struct scsi_tape *STp)
872{
873	int i;
874	struct st_partstat *STps;
875
876	STp->pos_unknown = 0;
877	for (i = 0; i < ST_NBR_PARTITIONS; i++) {
878		STps = &(STp->ps[i]);
879		STps->rw = ST_IDLE;
880		STps->eof = ST_NOEOF;
881		STps->at_sm = 0;
882		STps->last_block_valid = 0;
883		STps->drv_block = -1;
884		STps->drv_file = -1;
885	}
886	if (STp->can_partitions) {
887		STp->partition = find_partition(STp);
888		if (STp->partition < 0)
889			STp->partition = 0;
890		STp->new_partition = STp->partition;
891	}
892}
893
894/* Test if the drive is ready. Returns either one of the codes below or a negative system
895   error code. */
896#define CHKRES_READY       0
897#define CHKRES_NEW_SESSION 1
898#define CHKRES_NOT_READY   2
899#define CHKRES_NO_TAPE     3
900
901#define MAX_ATTENTIONS    10
902
903static int test_ready(struct scsi_tape *STp, int do_wait)
904{
905	int attentions, waits, max_wait, scode;
906	int retval = CHKRES_READY, new_session = 0;
907	unsigned char cmd[MAX_COMMAND_SIZE];
908	struct st_request *SRpnt = NULL;
909	struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
910
911	max_wait = do_wait ? ST_BLOCK_SECONDS : 0;
912
913	for (attentions=waits=0; ; ) {
914		memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE);
915		cmd[0] = TEST_UNIT_READY;
916		SRpnt = st_do_scsi(SRpnt, STp, cmd, 0, DMA_NONE,
917				   STp->long_timeout, MAX_READY_RETRIES, 1);
918
919		if (!SRpnt) {
920			retval = (STp->buffer)->syscall_result;
921			break;
922		}
923
924		if (cmdstatp->have_sense) {
925
926			scode = cmdstatp->sense_hdr.sense_key;
927
928			if (scode == UNIT_ATTENTION) { /* New media? */
929				new_session = 1;
930				if (attentions < MAX_ATTENTIONS) {
931					attentions++;
932					continue;
933				}
934				else {
935					retval = (-EIO);
936					break;
937				}
938			}
939
940			if (scode == NOT_READY) {
941				if (waits < max_wait) {
942					if (msleep_interruptible(1000)) {
943						retval = (-EINTR);
944						break;
945					}
946					waits++;
947					continue;
948				}
949				else {
950					if ((STp->device)->scsi_level >= SCSI_2 &&
951					    cmdstatp->sense_hdr.asc == 0x3a)	/* Check ASC */
952						retval = CHKRES_NO_TAPE;
953					else
954						retval = CHKRES_NOT_READY;
955					break;
956				}
957			}
958		}
959
960		retval = (STp->buffer)->syscall_result;
961		if (!retval)
962			retval = new_session ? CHKRES_NEW_SESSION : CHKRES_READY;
963		break;
964	}
965
966	if (SRpnt != NULL)
967		st_release_request(SRpnt);
968	return retval;
969}
970
971
972/* See if the drive is ready and gather information about the tape. Return values:
973   < 0   negative error code from errno.h
974   0     drive ready
975   1     drive not ready (possibly no tape)
976*/
977static int check_tape(struct scsi_tape *STp, struct file *filp)
978{
979	int i, retval, new_session = 0, do_wait;
980	unsigned char cmd[MAX_COMMAND_SIZE], saved_cleaning;
981	unsigned short st_flags = filp->f_flags;
982	struct st_request *SRpnt = NULL;
983	struct st_modedef *STm;
984	struct st_partstat *STps;
985	struct inode *inode = file_inode(filp);
986	int mode = TAPE_MODE(inode);
987
988	STp->ready = ST_READY;
989
990	if (mode != STp->current_mode) {
991		DEBC_printk(STp, "Mode change from %d to %d.\n",
992			    STp->current_mode, mode);
993		new_session = 1;
994		STp->current_mode = mode;
995	}
996	STm = &(STp->modes[STp->current_mode]);
997
998	saved_cleaning = STp->cleaning_req;
999	STp->cleaning_req = 0;
1000
1001	do_wait = ((filp->f_flags & O_NONBLOCK) == 0);
1002	retval = test_ready(STp, do_wait);
1003
1004	if (retval < 0)
1005	    goto err_out;
1006
1007	if (retval == CHKRES_NEW_SESSION) {
1008		STp->pos_unknown = 0;
1009		STp->partition = STp->new_partition = 0;
1010		if (STp->can_partitions)
1011			STp->nbr_partitions = 1; /* This guess will be updated later
1012                                                    if necessary */
1013		for (i = 0; i < ST_NBR_PARTITIONS; i++) {
1014			STps = &(STp->ps[i]);
1015			STps->rw = ST_IDLE;
1016			STps->eof = ST_NOEOF;
1017			STps->at_sm = 0;
1018			STps->last_block_valid = 0;
1019			STps->drv_block = 0;
1020			STps->drv_file = 0;
1021		}
1022		new_session = 1;
1023	}
1024	else {
1025		STp->cleaning_req |= saved_cleaning;
1026
1027		if (retval == CHKRES_NOT_READY || retval == CHKRES_NO_TAPE) {
1028			if (retval == CHKRES_NO_TAPE)
1029				STp->ready = ST_NO_TAPE;
1030			else
1031				STp->ready = ST_NOT_READY;
1032
1033			STp->density = 0;	/* Clear the erroneous "residue" */
1034			STp->write_prot = 0;
1035			STp->block_size = 0;
1036			STp->ps[0].drv_file = STp->ps[0].drv_block = (-1);
1037			STp->partition = STp->new_partition = 0;
1038			STp->door_locked = ST_UNLOCKED;
1039			return CHKRES_NOT_READY;
1040		}
1041	}
1042
1043	if (STp->omit_blklims)
1044		STp->min_block = STp->max_block = (-1);
1045	else {
1046		memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE);
1047		cmd[0] = READ_BLOCK_LIMITS;
1048
1049		SRpnt = st_do_scsi(SRpnt, STp, cmd, 6, DMA_FROM_DEVICE,
1050				   STp->device->request_queue->rq_timeout,
1051				   MAX_READY_RETRIES, 1);
1052		if (!SRpnt) {
1053			retval = (STp->buffer)->syscall_result;
1054			goto err_out;
1055		}
1056
1057		if (!SRpnt->result && !STp->buffer->cmdstat.have_sense) {
1058			STp->max_block = ((STp->buffer)->b_data[1] << 16) |
1059			    ((STp->buffer)->b_data[2] << 8) | (STp->buffer)->b_data[3];
1060			STp->min_block = ((STp->buffer)->b_data[4] << 8) |
1061			    (STp->buffer)->b_data[5];
1062			if ( DEB( debugging || ) !STp->inited)
1063				st_printk(KERN_INFO, STp,
1064					  "Block limits %d - %d bytes.\n",
1065					  STp->min_block, STp->max_block);
1066		} else {
1067			STp->min_block = STp->max_block = (-1);
1068			DEBC_printk(STp, "Can't read block limits.\n");
1069		}
1070	}
1071
1072	memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE);
1073	cmd[0] = MODE_SENSE;
1074	cmd[4] = 12;
1075
1076	SRpnt = st_do_scsi(SRpnt, STp, cmd, 12, DMA_FROM_DEVICE,
1077			   STp->device->request_queue->rq_timeout,
1078			   MAX_READY_RETRIES, 1);
1079	if (!SRpnt) {
1080		retval = (STp->buffer)->syscall_result;
1081		goto err_out;
1082	}
1083
1084	if ((STp->buffer)->syscall_result != 0) {
1085		DEBC_printk(STp, "No Mode Sense.\n");
1086		STp->block_size = ST_DEFAULT_BLOCK;	/* Educated guess (?) */
1087		(STp->buffer)->syscall_result = 0;	/* Prevent error propagation */
1088		STp->drv_write_prot = 0;
1089	} else {
1090		DEBC_printk(STp,"Mode sense. Length %d, "
1091			    "medium %x, WBS %x, BLL %d\n",
1092			    (STp->buffer)->b_data[0],
1093			    (STp->buffer)->b_data[1],
1094			    (STp->buffer)->b_data[2],
1095			    (STp->buffer)->b_data[3]);
1096
1097		if ((STp->buffer)->b_data[3] >= 8) {
1098			STp->drv_buffer = ((STp->buffer)->b_data[2] >> 4) & 7;
1099			STp->density = (STp->buffer)->b_data[4];
1100			STp->block_size = (STp->buffer)->b_data[9] * 65536 +
1101			    (STp->buffer)->b_data[10] * 256 + (STp->buffer)->b_data[11];
1102			DEBC_printk(STp, "Density %x, tape length: %x, "
1103				    "drv buffer: %d\n",
1104				    STp->density,
1105				    (STp->buffer)->b_data[5] * 65536 +
1106				    (STp->buffer)->b_data[6] * 256 +
1107				    (STp->buffer)->b_data[7],
1108				    STp->drv_buffer);
1109		}
1110		STp->drv_write_prot = ((STp->buffer)->b_data[2] & 0x80) != 0;
1111		if (!STp->drv_buffer && STp->immediate_filemark) {
1112			st_printk(KERN_WARNING, STp,
1113				  "non-buffered tape: disabling "
1114				  "writing immediate filemarks\n");
1115			STp->immediate_filemark = 0;
1116		}
1117	}
1118	st_release_request(SRpnt);
1119	SRpnt = NULL;
1120	STp->inited = 1;
1121
1122	if (STp->block_size > 0)
1123		(STp->buffer)->buffer_blocks =
1124			(STp->buffer)->buffer_size / STp->block_size;
1125	else
1126		(STp->buffer)->buffer_blocks = 1;
1127	(STp->buffer)->buffer_bytes = (STp->buffer)->read_pointer = 0;
1128
1129	DEBC_printk(STp, "Block size: %d, buffer size: %d (%d blocks).\n",
1130		    STp->block_size, (STp->buffer)->buffer_size,
1131		    (STp->buffer)->buffer_blocks);
1132
1133	if (STp->drv_write_prot) {
1134		STp->write_prot = 1;
1135
1136		DEBC_printk(STp, "Write protected\n");
1137
1138		if (do_wait &&
1139		    ((st_flags & O_ACCMODE) == O_WRONLY ||
1140		     (st_flags & O_ACCMODE) == O_RDWR)) {
1141			retval = (-EROFS);
1142			goto err_out;
1143		}
1144	}
1145
1146	if (STp->can_partitions && STp->nbr_partitions < 1) {
1147		/* This code is reached when the device is opened for the first time
1148		   after the driver has been initialized with tape in the drive and the
1149		   partition support has been enabled. */
1150		DEBC_printk(STp, "Updating partition number in status.\n");
1151		if ((STp->partition = find_partition(STp)) < 0) {
1152			retval = STp->partition;
1153			goto err_out;
1154		}
1155		STp->new_partition = STp->partition;
1156		STp->nbr_partitions = 1; /* This guess will be updated when necessary */
1157	}
1158
1159	if (new_session) {	/* Change the drive parameters for the new mode */
1160		STp->density_changed = STp->blksize_changed = 0;
1161		STp->compression_changed = 0;
1162		if (!(STm->defaults_for_writes) &&
1163		    (retval = set_mode_densblk(STp, STm)) < 0)
1164		    goto err_out;
1165
1166		if (STp->default_drvbuffer != 0xff) {
1167			if (st_int_ioctl(STp, MTSETDRVBUFFER, STp->default_drvbuffer))
1168				st_printk(KERN_WARNING, STp,
1169					  "Can't set default drive "
1170					  "buffering to %d.\n",
1171					  STp->default_drvbuffer);
1172		}
1173	}
1174
1175	return CHKRES_READY;
1176
1177 err_out:
1178	return retval;
1179}
1180
1181
1182/* Open the device. Needs to take the BKL only because of incrementing the SCSI host
1183   module count. */
1184static int st_open(struct inode *inode, struct file *filp)
1185{
1186	int i, retval = (-EIO);
1187	int resumed = 0;
1188	struct scsi_tape *STp;
1189	struct st_partstat *STps;
1190	int dev = TAPE_NR(inode);
1191
1192	/*
1193	 * We really want to do nonseekable_open(inode, filp); here, but some
1194	 * versions of tar incorrectly call lseek on tapes and bail out if that
1195	 * fails.  So we disallow pread() and pwrite(), but permit lseeks.
1196	 */
1197	filp->f_mode &= ~(FMODE_PREAD | FMODE_PWRITE);
1198
1199	if (!(STp = scsi_tape_get(dev))) {
1200		return -ENXIO;
1201	}
1202
1203	filp->private_data = STp;
1204
1205	spin_lock(&st_use_lock);
1206	if (STp->in_use) {
1207		spin_unlock(&st_use_lock);
1208		scsi_tape_put(STp);
1209		DEBC_printk(STp, "Device already in use.\n");
1210		return (-EBUSY);
1211	}
1212
1213	STp->in_use = 1;
1214	spin_unlock(&st_use_lock);
1215	STp->rew_at_close = STp->autorew_dev = (iminor(inode) & 0x80) == 0;
1216
1217	if (scsi_autopm_get_device(STp->device) < 0) {
1218		retval = -EIO;
1219		goto err_out;
1220	}
1221	resumed = 1;
1222	if (!scsi_block_when_processing_errors(STp->device)) {
1223		retval = (-ENXIO);
1224		goto err_out;
1225	}
1226
1227	/* See that we have at least a one page buffer available */
1228	if (!enlarge_buffer(STp->buffer, PAGE_SIZE, STp->restr_dma)) {
1229		st_printk(KERN_WARNING, STp,
1230			  "Can't allocate one page tape buffer.\n");
1231		retval = (-EOVERFLOW);
1232		goto err_out;
1233	}
1234
1235	(STp->buffer)->cleared = 0;
1236	(STp->buffer)->writing = 0;
1237	(STp->buffer)->syscall_result = 0;
1238
1239	STp->write_prot = ((filp->f_flags & O_ACCMODE) == O_RDONLY);
1240
1241	STp->dirty = 0;
1242	for (i = 0; i < ST_NBR_PARTITIONS; i++) {
1243		STps = &(STp->ps[i]);
1244		STps->rw = ST_IDLE;
1245	}
1246	STp->try_dio_now = STp->try_dio;
1247	STp->recover_count = 0;
1248	DEB( STp->nbr_waits = STp->nbr_finished = 0;
1249	     STp->nbr_requests = STp->nbr_dio = STp->nbr_pages = 0; )
1250
1251	retval = check_tape(STp, filp);
1252	if (retval < 0)
1253		goto err_out;
1254	if ((filp->f_flags & O_NONBLOCK) == 0 &&
1255	    retval != CHKRES_READY) {
1256		if (STp->ready == NO_TAPE)
1257			retval = (-ENOMEDIUM);
1258		else
1259			retval = (-EIO);
1260		goto err_out;
1261	}
1262	return 0;
1263
1264 err_out:
1265	normalize_buffer(STp->buffer);
1266	spin_lock(&st_use_lock);
1267	STp->in_use = 0;
1268	spin_unlock(&st_use_lock);
1269	scsi_tape_put(STp);
1270	if (resumed)
1271		scsi_autopm_put_device(STp->device);
1272	return retval;
1273
1274}
1275
1276
1277/* Flush the tape buffer before close */
1278static int st_flush(struct file *filp, fl_owner_t id)
1279{
1280	int result = 0, result2;
1281	unsigned char cmd[MAX_COMMAND_SIZE];
1282	struct st_request *SRpnt;
1283	struct scsi_tape *STp = filp->private_data;
1284	struct st_modedef *STm = &(STp->modes[STp->current_mode]);
1285	struct st_partstat *STps = &(STp->ps[STp->partition]);
1286
1287	if (file_count(filp) > 1)
1288		return 0;
1289
1290	if (STps->rw == ST_WRITING && !STp->pos_unknown) {
1291		result = st_flush_write_buffer(STp);
1292		if (result != 0 && result != (-ENOSPC))
1293			goto out;
1294	}
1295
1296	if (STp->can_partitions &&
1297	    (result2 = switch_partition(STp)) < 0) {
1298		DEBC_printk(STp, "switch_partition at close failed.\n");
1299		if (result == 0)
1300			result = result2;
1301		goto out;
1302	}
1303
1304	DEBC( if (STp->nbr_requests)
1305		st_printk(KERN_DEBUG, STp,
1306			  "Number of r/w requests %d, dio used in %d, "
1307			  "pages %d.\n", STp->nbr_requests, STp->nbr_dio,
1308			  STp->nbr_pages));
1309
1310	if (STps->rw == ST_WRITING && !STp->pos_unknown) {
1311		struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
1312
1313#if DEBUG
1314		DEBC_printk(STp, "Async write waits %d, finished %d.\n",
1315			    STp->nbr_waits, STp->nbr_finished);
1316#endif
1317		memset(cmd, 0, MAX_COMMAND_SIZE);
1318		cmd[0] = WRITE_FILEMARKS;
1319		if (STp->immediate_filemark)
1320			cmd[1] = 1;
1321		cmd[4] = 1 + STp->two_fm;
1322
1323		SRpnt = st_do_scsi(NULL, STp, cmd, 0, DMA_NONE,
1324				   STp->device->request_queue->rq_timeout,
1325				   MAX_WRITE_RETRIES, 1);
1326		if (!SRpnt) {
1327			result = (STp->buffer)->syscall_result;
1328			goto out;
1329		}
1330
1331		if (STp->buffer->syscall_result == 0 ||
1332		    (cmdstatp->have_sense && !cmdstatp->deferred &&
1333		     (cmdstatp->flags & SENSE_EOM) &&
1334		     (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
1335		      cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) &&
1336		     (!cmdstatp->remainder_valid || cmdstatp->uremainder64 == 0))) {
1337			/* Write successful at EOM */
1338			st_release_request(SRpnt);
1339			SRpnt = NULL;
1340			if (STps->drv_file >= 0)
1341				STps->drv_file++;
1342			STps->drv_block = 0;
1343			if (STp->two_fm)
1344				cross_eof(STp, 0);
1345			STps->eof = ST_FM;
1346		}
1347		else { /* Write error */
1348			st_release_request(SRpnt);
1349			SRpnt = NULL;
1350			st_printk(KERN_ERR, STp,
1351				  "Error on write filemark.\n");
1352			if (result == 0)
1353				result = (-EIO);
1354		}
1355
1356		DEBC_printk(STp, "Buffer flushed, %d EOF(s) written\n", cmd[4]);
1357	} else if (!STp->rew_at_close) {
1358		STps = &(STp->ps[STp->partition]);
1359		if (!STm->sysv || STps->rw != ST_READING) {
1360			if (STp->can_bsr)
1361				result = flush_buffer(STp, 0);
1362			else if (STps->eof == ST_FM_HIT) {
1363				result = cross_eof(STp, 0);
1364				if (result) {
1365					if (STps->drv_file >= 0)
1366						STps->drv_file++;
1367					STps->drv_block = 0;
1368					STps->eof = ST_FM;
1369				} else
1370					STps->eof = ST_NOEOF;
1371			}
1372		} else if ((STps->eof == ST_NOEOF &&
1373			    !(result = cross_eof(STp, 1))) ||
1374			   STps->eof == ST_FM_HIT) {
1375			if (STps->drv_file >= 0)
1376				STps->drv_file++;
1377			STps->drv_block = 0;
1378			STps->eof = ST_FM;
1379		}
1380	}
1381
1382      out:
1383	if (STp->rew_at_close) {
1384		result2 = st_int_ioctl(STp, MTREW, 1);
1385		if (result == 0)
1386			result = result2;
1387	}
1388	return result;
1389}
1390
1391
1392/* Close the device and release it. BKL is not needed: this is the only thread
1393   accessing this tape. */
1394static int st_release(struct inode *inode, struct file *filp)
1395{
1396	int result = 0;
1397	struct scsi_tape *STp = filp->private_data;
1398
1399	if (STp->door_locked == ST_LOCKED_AUTO)
1400		do_door_lock(STp, 0);
1401
1402	normalize_buffer(STp->buffer);
1403	spin_lock(&st_use_lock);
1404	STp->in_use = 0;
1405	spin_unlock(&st_use_lock);
1406	scsi_autopm_put_device(STp->device);
1407	scsi_tape_put(STp);
1408
1409	return result;
1410}
1411
1412/* The checks common to both reading and writing */
1413static ssize_t rw_checks(struct scsi_tape *STp, struct file *filp, size_t count)
1414{
1415	ssize_t retval = 0;
1416
1417	/*
1418	 * If we are in the middle of error recovery, don't let anyone
1419	 * else try and use this device.  Also, if error recovery fails, it
1420	 * may try and take the device offline, in which case all further
1421	 * access to the device is prohibited.
1422	 */
1423	if (!scsi_block_when_processing_errors(STp->device)) {
1424		retval = (-ENXIO);
1425		goto out;
1426	}
1427
1428	if (STp->ready != ST_READY) {
1429		if (STp->ready == ST_NO_TAPE)
1430			retval = (-ENOMEDIUM);
1431		else
1432			retval = (-EIO);
1433		goto out;
1434	}
1435
1436	if (! STp->modes[STp->current_mode].defined) {
1437		retval = (-ENXIO);
1438		goto out;
1439	}
1440
1441
1442	/*
1443	 * If there was a bus reset, block further access
1444	 * to this device.
1445	 */
1446	if (STp->pos_unknown) {
1447		retval = (-EIO);
1448		goto out;
1449	}
1450
1451	if (count == 0)
1452		goto out;
1453
1454	DEB(
1455	if (!STp->in_use) {
1456		st_printk(ST_DEB_MSG, STp,
1457			  "Incorrect device.\n");
1458		retval = (-EIO);
1459		goto out;
1460	} ) /* end DEB */
1461
1462	if (STp->can_partitions &&
1463	    (retval = switch_partition(STp)) < 0)
1464		goto out;
1465
1466	if (STp->block_size == 0 && STp->max_block > 0 &&
1467	    (count < STp->min_block || count > STp->max_block)) {
1468		retval = (-EINVAL);
1469		goto out;
1470	}
1471
1472	if (STp->do_auto_lock && STp->door_locked == ST_UNLOCKED &&
1473	    !do_door_lock(STp, 1))
1474		STp->door_locked = ST_LOCKED_AUTO;
1475
1476 out:
1477	return retval;
1478}
1479
1480
1481static int setup_buffering(struct scsi_tape *STp, const char __user *buf,
1482			   size_t count, int is_read)
1483{
1484	int i, bufsize, retval = 0;
1485	struct st_buffer *STbp = STp->buffer;
1486
1487	if (is_read)
1488		i = STp->try_dio_now && try_rdio;
1489	else
1490		i = STp->try_dio_now && try_wdio;
1491
1492	if (i && ((unsigned long)buf & queue_dma_alignment(
1493					STp->device->request_queue)) == 0) {
1494		i = sgl_map_user_pages(STbp, STbp->use_sg, (unsigned long)buf,
1495				       count, (is_read ? READ : WRITE));
1496		if (i > 0) {
1497			STbp->do_dio = i;
1498			STbp->buffer_bytes = 0;   /* can be used as transfer counter */
1499		}
1500		else
1501			STbp->do_dio = 0;  /* fall back to buffering with any error */
1502		STbp->sg_segs = STbp->do_dio;
1503		DEB(
1504		     if (STbp->do_dio) {
1505			STp->nbr_dio++;
1506			STp->nbr_pages += STbp->do_dio;
1507		     }
1508		)
1509	} else
1510		STbp->do_dio = 0;
1511	DEB( STp->nbr_requests++; )
1512
1513	if (!STbp->do_dio) {
1514		if (STp->block_size)
1515			bufsize = STp->block_size > st_fixed_buffer_size ?
1516				STp->block_size : st_fixed_buffer_size;
1517		else {
1518			bufsize = count;
1519			/* Make sure that data from previous user is not leaked even if
1520			   HBA does not return correct residual */
1521			if (is_read && STp->sili && !STbp->cleared)
1522				clear_buffer(STbp);
1523		}
1524
1525		if (bufsize > STbp->buffer_size &&
1526		    !enlarge_buffer(STbp, bufsize, STp->restr_dma)) {
1527			st_printk(KERN_WARNING, STp,
1528				  "Can't allocate %d byte tape buffer.\n",
1529				  bufsize);
1530			retval = (-EOVERFLOW);
1531			goto out;
1532		}
1533		if (STp->block_size)
1534			STbp->buffer_blocks = bufsize / STp->block_size;
1535	}
1536
1537 out:
1538	return retval;
1539}
1540
1541
1542/* Can be called more than once after each setup_buffer() */
1543static void release_buffering(struct scsi_tape *STp, int is_read)
1544{
1545	struct st_buffer *STbp;
1546
1547	STbp = STp->buffer;
1548	if (STbp->do_dio) {
1549		sgl_unmap_user_pages(STbp, STbp->do_dio, is_read);
1550		STbp->do_dio = 0;
1551		STbp->sg_segs = 0;
1552	}
1553}
1554
1555
1556/* Write command */
1557static ssize_t
1558st_write(struct file *filp, const char __user *buf, size_t count, loff_t * ppos)
1559{
1560	ssize_t total;
1561	ssize_t i, do_count, blks, transfer;
1562	ssize_t retval;
1563	int undone, retry_eot = 0, scode;
1564	int async_write;
1565	unsigned char cmd[MAX_COMMAND_SIZE];
1566	const char __user *b_point;
1567	struct st_request *SRpnt = NULL;
1568	struct scsi_tape *STp = filp->private_data;
1569	struct st_modedef *STm;
1570	struct st_partstat *STps;
1571	struct st_buffer *STbp;
1572
1573	if (mutex_lock_interruptible(&STp->lock))
1574		return -ERESTARTSYS;
1575
1576	retval = rw_checks(STp, filp, count);
1577	if (retval || count == 0)
1578		goto out;
1579
1580	/* Write must be integral number of blocks */
1581	if (STp->block_size != 0 && (count % STp->block_size) != 0) {
1582		st_printk(KERN_WARNING, STp,
1583			  "Write not multiple of tape block size.\n");
1584		retval = (-EINVAL);
1585		goto out;
1586	}
1587
1588	STm = &(STp->modes[STp->current_mode]);
1589	STps = &(STp->ps[STp->partition]);
1590
1591	if (STp->write_prot) {
1592		retval = (-EACCES);
1593		goto out;
1594	}
1595
1596
1597	if (STps->rw == ST_READING) {
1598		retval = flush_buffer(STp, 0);
1599		if (retval)
1600			goto out;
1601		STps->rw = ST_WRITING;
1602	} else if (STps->rw != ST_WRITING &&
1603		   STps->drv_file == 0 && STps->drv_block == 0) {
1604		if ((retval = set_mode_densblk(STp, STm)) < 0)
1605			goto out;
1606		if (STm->default_compression != ST_DONT_TOUCH &&
1607		    !(STp->compression_changed)) {
1608			if (st_compression(STp, (STm->default_compression == ST_YES))) {
1609				st_printk(KERN_WARNING, STp,
1610					  "Can't set default compression.\n");
1611				if (modes_defined) {
1612					retval = (-EINVAL);
1613					goto out;
1614				}
1615			}
1616		}
1617	}
1618
1619	STbp = STp->buffer;
1620	i = write_behind_check(STp);
1621	if (i) {
1622		if (i == -ENOSPC)
1623			STps->eof = ST_EOM_OK;
1624		else
1625			STps->eof = ST_EOM_ERROR;
1626	}
1627
1628	if (STps->eof == ST_EOM_OK) {
1629		STps->eof = ST_EOD_1;  /* allow next write */
1630		retval = (-ENOSPC);
1631		goto out;
1632	}
1633	else if (STps->eof == ST_EOM_ERROR) {
1634		retval = (-EIO);
1635		goto out;
1636	}
1637
1638	/* Check the buffer readability in cases where copy_user might catch
1639	   the problems after some tape movement. */
1640	if (STp->block_size != 0 &&
1641	    !STbp->do_dio &&
1642	    (copy_from_user(&i, buf, 1) != 0 ||
1643	     copy_from_user(&i, buf + count - 1, 1) != 0)) {
1644		retval = (-EFAULT);
1645		goto out;
1646	}
1647
1648	retval = setup_buffering(STp, buf, count, 0);
1649	if (retval)
1650		goto out;
1651
1652	total = count;
1653
1654	memset(cmd, 0, MAX_COMMAND_SIZE);
1655	cmd[0] = WRITE_6;
1656	cmd[1] = (STp->block_size != 0);
1657
1658	STps->rw = ST_WRITING;
1659
1660	b_point = buf;
1661	while (count > 0 && !retry_eot) {
1662
1663		if (STbp->do_dio) {
1664			do_count = count;
1665		}
1666		else {
1667			if (STp->block_size == 0)
1668				do_count = count;
1669			else {
1670				do_count = STbp->buffer_blocks * STp->block_size -
1671					STbp->buffer_bytes;
1672				if (do_count > count)
1673					do_count = count;
1674			}
1675
1676			i = append_to_buffer(b_point, STbp, do_count);
1677			if (i) {
1678				retval = i;
1679				goto out;
1680			}
1681		}
1682		count -= do_count;
1683		b_point += do_count;
1684
1685		async_write = STp->block_size == 0 && !STbp->do_dio &&
1686			STm->do_async_writes && STps->eof < ST_EOM_OK;
1687
1688		if (STp->block_size != 0 && STm->do_buffer_writes &&
1689		    !(STp->try_dio_now && try_wdio) && STps->eof < ST_EOM_OK &&
1690		    STbp->buffer_bytes < STbp->buffer_size) {
1691			STp->dirty = 1;
1692			/* Don't write a buffer that is not full enough. */
1693			if (!async_write && count == 0)
1694				break;
1695		}
1696
1697	retry_write:
1698		if (STp->block_size == 0)
1699			blks = transfer = do_count;
1700		else {
1701			if (!STbp->do_dio)
1702				blks = STbp->buffer_bytes;
1703			else
1704				blks = do_count;
1705			blks /= STp->block_size;
1706			transfer = blks * STp->block_size;
1707		}
1708		cmd[2] = blks >> 16;
1709		cmd[3] = blks >> 8;
1710		cmd[4] = blks;
1711
1712		SRpnt = st_do_scsi(SRpnt, STp, cmd, transfer, DMA_TO_DEVICE,
1713				   STp->device->request_queue->rq_timeout,
1714				   MAX_WRITE_RETRIES, !async_write);
1715		if (!SRpnt) {
1716			retval = STbp->syscall_result;
1717			goto out;
1718		}
1719		if (async_write && !STbp->syscall_result) {
1720			STbp->writing = transfer;
1721			STp->dirty = !(STbp->writing ==
1722				       STbp->buffer_bytes);
1723			SRpnt = NULL;  /* Prevent releasing this request! */
1724			DEB( STp->write_pending = 1; )
1725			break;
1726		}
1727
1728		if (STbp->syscall_result != 0) {
1729			struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
1730
1731			DEBC_printk(STp, "Error on write:\n");
1732			if (cmdstatp->have_sense && (cmdstatp->flags & SENSE_EOM)) {
1733				scode = cmdstatp->sense_hdr.sense_key;
1734				if (cmdstatp->remainder_valid)
1735					undone = (int)cmdstatp->uremainder64;
1736				else if (STp->block_size == 0 &&
1737					 scode == VOLUME_OVERFLOW)
1738					undone = transfer;
1739				else
1740					undone = 0;
1741				if (STp->block_size != 0)
1742					undone *= STp->block_size;
1743				if (undone <= do_count) {
1744					/* Only data from this write is not written */
1745					count += undone;
1746					b_point -= undone;
1747					do_count -= undone;
1748					if (STp->block_size)
1749						blks = (transfer - undone) / STp->block_size;
1750					STps->eof = ST_EOM_OK;
1751					/* Continue in fixed block mode if all written
1752					   in this request but still something left to write
1753					   (retval left to zero)
1754					*/
1755					if (STp->block_size == 0 ||
1756					    undone > 0 || count == 0)
1757						retval = (-ENOSPC); /* EOM within current request */
1758					DEBC_printk(STp, "EOM with %d "
1759						    "bytes unwritten.\n",
1760						    (int)count);
1761				} else {
1762					/* EOT within data buffered earlier (possible only
1763					   in fixed block mode without direct i/o) */
1764					if (!retry_eot && !cmdstatp->deferred &&
1765					    (scode == NO_SENSE || scode == RECOVERED_ERROR)) {
1766						move_buffer_data(STp->buffer, transfer - undone);
1767						retry_eot = 1;
1768						if (STps->drv_block >= 0) {
1769							STps->drv_block += (transfer - undone) /
1770								STp->block_size;
1771						}
1772						STps->eof = ST_EOM_OK;
1773						DEBC_printk(STp, "Retry "
1774							    "write of %d "
1775							    "bytes at EOM.\n",
1776							    STp->buffer->buffer_bytes);
1777						goto retry_write;
1778					}
1779					else {
1780						/* Either error within data buffered by driver or
1781						   failed retry */
1782						count -= do_count;
1783						blks = do_count = 0;
1784						STps->eof = ST_EOM_ERROR;
1785						STps->drv_block = (-1); /* Too cautious? */
1786						retval = (-EIO);	/* EOM for old data */
1787						DEBC_printk(STp, "EOM with "
1788							    "lost data.\n");
1789					}
1790				}
1791			} else {
1792				count += do_count;
1793				STps->drv_block = (-1);		/* Too cautious? */
1794				retval = STbp->syscall_result;
1795			}
1796
1797		}
1798
1799		if (STps->drv_block >= 0) {
1800			if (STp->block_size == 0)
1801				STps->drv_block += (do_count > 0);
1802			else
1803				STps->drv_block += blks;
1804		}
1805
1806		STbp->buffer_bytes = 0;
1807		STp->dirty = 0;
1808
1809		if (retval || retry_eot) {
1810			if (count < total)
1811				retval = total - count;
1812			goto out;
1813		}
1814	}
1815
1816	if (STps->eof == ST_EOD_1)
1817		STps->eof = ST_EOM_OK;
1818	else if (STps->eof != ST_EOM_OK)
1819		STps->eof = ST_NOEOF;
1820	retval = total - count;
1821
1822 out:
1823	if (SRpnt != NULL)
1824		st_release_request(SRpnt);
1825	release_buffering(STp, 0);
1826	mutex_unlock(&STp->lock);
1827
1828	return retval;
1829}
1830
1831/* Read data from the tape. Returns zero in the normal case, one if the
1832   eof status has changed, and the negative error code in case of a
1833   fatal error. Otherwise updates the buffer and the eof state.
1834
1835   Does release user buffer mapping if it is set.
1836*/
1837static long read_tape(struct scsi_tape *STp, long count,
1838		      struct st_request ** aSRpnt)
1839{
1840	int transfer, blks, bytes;
1841	unsigned char cmd[MAX_COMMAND_SIZE];
1842	struct st_request *SRpnt;
1843	struct st_modedef *STm;
1844	struct st_partstat *STps;
1845	struct st_buffer *STbp;
1846	int retval = 0;
1847
1848	if (count == 0)
1849		return 0;
1850
1851	STm = &(STp->modes[STp->current_mode]);
1852	STps = &(STp->ps[STp->partition]);
1853	if (STps->eof == ST_FM_HIT)
1854		return 1;
1855	STbp = STp->buffer;
1856
1857	if (STp->block_size == 0)
1858		blks = bytes = count;
1859	else {
1860		if (!(STp->try_dio_now && try_rdio) && STm->do_read_ahead) {
1861			blks = (STp->buffer)->buffer_blocks;
1862			bytes = blks * STp->block_size;
1863		} else {
1864			bytes = count;
1865			if (!STbp->do_dio && bytes > (STp->buffer)->buffer_size)
1866				bytes = (STp->buffer)->buffer_size;
1867			blks = bytes / STp->block_size;
1868			bytes = blks * STp->block_size;
1869		}
1870	}
1871
1872	memset(cmd, 0, MAX_COMMAND_SIZE);
1873	cmd[0] = READ_6;
1874	cmd[1] = (STp->block_size != 0);
1875	if (!cmd[1] && STp->sili)
1876		cmd[1] |= 2;
1877	cmd[2] = blks >> 16;
1878	cmd[3] = blks >> 8;
1879	cmd[4] = blks;
1880
1881	SRpnt = *aSRpnt;
1882	SRpnt = st_do_scsi(SRpnt, STp, cmd, bytes, DMA_FROM_DEVICE,
1883			   STp->device->request_queue->rq_timeout,
1884			   MAX_RETRIES, 1);
1885	release_buffering(STp, 1);
1886	*aSRpnt = SRpnt;
1887	if (!SRpnt)
1888		return STbp->syscall_result;
1889
1890	STbp->read_pointer = 0;
1891	STps->at_sm = 0;
1892
1893	/* Something to check */
1894	if (STbp->syscall_result) {
1895		struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
1896
1897		retval = 1;
1898		DEBC_printk(STp,
1899			    "Sense: %2x %2x %2x %2x %2x %2x %2x %2x\n",
1900			    SRpnt->sense[0], SRpnt->sense[1],
1901			    SRpnt->sense[2], SRpnt->sense[3],
1902			    SRpnt->sense[4], SRpnt->sense[5],
1903			    SRpnt->sense[6], SRpnt->sense[7]);
1904		if (cmdstatp->have_sense) {
1905
1906			if (cmdstatp->sense_hdr.sense_key == BLANK_CHECK)
1907				cmdstatp->flags &= 0xcf;	/* No need for EOM in this case */
1908
1909			if (cmdstatp->flags != 0) { /* EOF, EOM, or ILI */
1910				/* Compute the residual count */
1911				if (cmdstatp->remainder_valid)
1912					transfer = (int)cmdstatp->uremainder64;
1913				else
1914					transfer = 0;
1915				if (STp->block_size == 0 &&
1916				    cmdstatp->sense_hdr.sense_key == MEDIUM_ERROR)
1917					transfer = bytes;
1918
1919				if (cmdstatp->flags & SENSE_ILI) {	/* ILI */
1920					if (STp->block_size == 0 &&
1921					    transfer < 0) {
1922						st_printk(KERN_NOTICE, STp,
1923							  "Failed to read %d "
1924							  "byte block with %d "
1925							  "byte transfer.\n",
1926							  bytes - transfer,
1927							  bytes);
1928						if (STps->drv_block >= 0)
1929							STps->drv_block += 1;
1930						STbp->buffer_bytes = 0;
1931						return (-ENOMEM);
1932					} else if (STp->block_size == 0) {
1933						STbp->buffer_bytes = bytes - transfer;
1934					} else {
1935						st_release_request(SRpnt);
1936						SRpnt = *aSRpnt = NULL;
1937						if (transfer == blks) {	/* We did not get anything, error */
1938							st_printk(KERN_NOTICE, STp,
1939								  "Incorrect "
1940								  "block size.\n");
1941							if (STps->drv_block >= 0)
1942								STps->drv_block += blks - transfer + 1;
1943							st_int_ioctl(STp, MTBSR, 1);
1944							return (-EIO);
1945						}
1946						/* We have some data, deliver it */
1947						STbp->buffer_bytes = (blks - transfer) *
1948						    STp->block_size;
1949						DEBC_printk(STp, "ILI but "
1950							    "enough data "
1951							    "received %ld "
1952							    "%d.\n", count,
1953							    STbp->buffer_bytes);
1954						if (STps->drv_block >= 0)
1955							STps->drv_block += 1;
1956						if (st_int_ioctl(STp, MTBSR, 1))
1957							return (-EIO);
1958					}
1959				} else if (cmdstatp->flags & SENSE_FMK) {	/* FM overrides EOM */
1960					if (STps->eof != ST_FM_HIT)
1961						STps->eof = ST_FM_HIT;
1962					else
1963						STps->eof = ST_EOD_2;
1964					if (STp->block_size == 0)
1965						STbp->buffer_bytes = 0;
1966					else
1967						STbp->buffer_bytes =
1968						    bytes - transfer * STp->block_size;
1969					DEBC_printk(STp, "EOF detected (%d "
1970						    "bytes read).\n",
1971						    STbp->buffer_bytes);
1972				} else if (cmdstatp->flags & SENSE_EOM) {
1973					if (STps->eof == ST_FM)
1974						STps->eof = ST_EOD_1;
1975					else
1976						STps->eof = ST_EOM_OK;
1977					if (STp->block_size == 0)
1978						STbp->buffer_bytes = bytes - transfer;
1979					else
1980						STbp->buffer_bytes =
1981						    bytes - transfer * STp->block_size;
1982
1983					DEBC_printk(STp, "EOM detected (%d "
1984						    "bytes read).\n",
1985						    STbp->buffer_bytes);
1986				}
1987			}
1988			/* end of EOF, EOM, ILI test */
1989			else {	/* nonzero sense key */
1990				DEBC_printk(STp, "Tape error while reading.\n");
1991				STps->drv_block = (-1);
1992				if (STps->eof == ST_FM &&
1993				    cmdstatp->sense_hdr.sense_key == BLANK_CHECK) {
1994					DEBC_printk(STp, "Zero returned for "
1995						    "first BLANK CHECK "
1996						    "after EOF.\n");
1997					STps->eof = ST_EOD_2;	/* First BLANK_CHECK after FM */
1998				} else	/* Some other extended sense code */
1999					retval = (-EIO);
2000			}
2001
2002			if (STbp->buffer_bytes < 0)  /* Caused by bogus sense data */
2003				STbp->buffer_bytes = 0;
2004		}
2005		/* End of extended sense test */
2006		else {		/* Non-extended sense */
2007			retval = STbp->syscall_result;
2008		}
2009
2010	}
2011	/* End of error handling */
2012	else {			/* Read successful */
2013		STbp->buffer_bytes = bytes;
2014		if (STp->sili) /* In fixed block mode residual is always zero here */
2015			STbp->buffer_bytes -= STp->buffer->cmdstat.residual;
2016	}
2017
2018	if (STps->drv_block >= 0) {
2019		if (STp->block_size == 0)
2020			STps->drv_block++;
2021		else
2022			STps->drv_block += STbp->buffer_bytes / STp->block_size;
2023	}
2024	return retval;
2025}
2026
2027
2028/* Read command */
2029static ssize_t
2030st_read(struct file *filp, char __user *buf, size_t count, loff_t * ppos)
2031{
2032	ssize_t total;
2033	ssize_t retval = 0;
2034	ssize_t i, transfer;
2035	int special, do_dio = 0;
2036	struct st_request *SRpnt = NULL;
2037	struct scsi_tape *STp = filp->private_data;
2038	struct st_modedef *STm;
2039	struct st_partstat *STps;
2040	struct st_buffer *STbp = STp->buffer;
2041
2042	if (mutex_lock_interruptible(&STp->lock))
2043		return -ERESTARTSYS;
2044
2045	retval = rw_checks(STp, filp, count);
2046	if (retval || count == 0)
2047		goto out;
2048
2049	STm = &(STp->modes[STp->current_mode]);
2050	if (STp->block_size != 0 && (count % STp->block_size) != 0) {
2051		if (!STm->do_read_ahead) {
2052			retval = (-EINVAL);	/* Read must be integral number of blocks */
2053			goto out;
2054		}
2055		STp->try_dio_now = 0;  /* Direct i/o can't handle split blocks */
2056	}
2057
2058	STps = &(STp->ps[STp->partition]);
2059	if (STps->rw == ST_WRITING) {
2060		retval = flush_buffer(STp, 0);
2061		if (retval)
2062			goto out;
2063		STps->rw = ST_READING;
2064	}
2065	DEB(
2066	if (debugging && STps->eof != ST_NOEOF)
2067		st_printk(ST_DEB_MSG, STp,
2068			  "EOF/EOM flag up (%d). Bytes %d\n",
2069			  STps->eof, STbp->buffer_bytes);
2070	) /* end DEB */
2071
2072	retval = setup_buffering(STp, buf, count, 1);
2073	if (retval)
2074		goto out;
2075	do_dio = STbp->do_dio;
2076
2077	if (STbp->buffer_bytes == 0 &&
2078	    STps->eof >= ST_EOD_1) {
2079		if (STps->eof < ST_EOD) {
2080			STps->eof += 1;
2081			retval = 0;
2082			goto out;
2083		}
2084		retval = (-EIO);	/* EOM or Blank Check */
2085		goto out;
2086	}
2087
2088	if (do_dio) {
2089		/* Check the buffer writability before any tape movement. Don't alter
2090		   buffer data. */
2091		if (copy_from_user(&i, buf, 1) != 0 ||
2092		    copy_to_user(buf, &i, 1) != 0 ||
2093		    copy_from_user(&i, buf + count - 1, 1) != 0 ||
2094		    copy_to_user(buf + count - 1, &i, 1) != 0) {
2095			retval = (-EFAULT);
2096			goto out;
2097		}
2098	}
2099
2100	STps->rw = ST_READING;
2101
2102
2103	/* Loop until enough data in buffer or a special condition found */
2104	for (total = 0, special = 0; total < count && !special;) {
2105
2106		/* Get new data if the buffer is empty */
2107		if (STbp->buffer_bytes == 0) {
2108			special = read_tape(STp, count - total, &SRpnt);
2109			if (special < 0) {	/* No need to continue read */
2110				retval = special;
2111				goto out;
2112			}
2113		}
2114
2115		/* Move the data from driver buffer to user buffer */
2116		if (STbp->buffer_bytes > 0) {
2117			DEB(
2118			if (debugging && STps->eof != ST_NOEOF)
2119				st_printk(ST_DEB_MSG, STp,
2120					  "EOF up (%d). Left %d, needed %d.\n",
2121					  STps->eof, STbp->buffer_bytes,
2122					  (int)(count - total));
2123			) /* end DEB */
2124			transfer = STbp->buffer_bytes < count - total ?
2125			    STbp->buffer_bytes : count - total;
2126			if (!do_dio) {
2127				i = from_buffer(STbp, buf, transfer);
2128				if (i) {
2129					retval = i;
2130					goto out;
2131				}
2132			}
2133			buf += transfer;
2134			total += transfer;
2135		}
2136
2137		if (STp->block_size == 0)
2138			break;	/* Read only one variable length block */
2139
2140	}			/* for (total = 0, special = 0;
2141                                   total < count && !special; ) */
2142
2143	/* Change the eof state if no data from tape or buffer */
2144	if (total == 0) {
2145		if (STps->eof == ST_FM_HIT) {
2146			STps->eof = ST_FM;
2147			STps->drv_block = 0;
2148			if (STps->drv_file >= 0)
2149				STps->drv_file++;
2150		} else if (STps->eof == ST_EOD_1) {
2151			STps->eof = ST_EOD_2;
2152			STps->drv_block = 0;
2153			if (STps->drv_file >= 0)
2154				STps->drv_file++;
2155		} else if (STps->eof == ST_EOD_2)
2156			STps->eof = ST_EOD;
2157	} else if (STps->eof == ST_FM)
2158		STps->eof = ST_NOEOF;
2159	retval = total;
2160
2161 out:
2162	if (SRpnt != NULL) {
2163		st_release_request(SRpnt);
2164		SRpnt = NULL;
2165	}
2166	if (do_dio) {
2167		release_buffering(STp, 1);
2168		STbp->buffer_bytes = 0;
2169	}
2170	mutex_unlock(&STp->lock);
2171
2172	return retval;
2173}
2174
2175
2176
2177DEB(
2178/* Set the driver options */
2179static void st_log_options(struct scsi_tape * STp, struct st_modedef * STm)
2180{
2181	if (debugging) {
2182		st_printk(KERN_INFO, STp,
2183			  "Mode %d options: buffer writes: %d, "
2184			  "async writes: %d, read ahead: %d\n",
2185			  STp->current_mode, STm->do_buffer_writes,
2186			  STm->do_async_writes, STm->do_read_ahead);
2187		st_printk(KERN_INFO, STp,
2188			  "    can bsr: %d, two FMs: %d, "
2189			  "fast mteom: %d, auto lock: %d,\n",
2190			  STp->can_bsr, STp->two_fm, STp->fast_mteom,
2191			  STp->do_auto_lock);
2192		st_printk(KERN_INFO, STp,
2193			  "    defs for wr: %d, no block limits: %d, "
2194			  "partitions: %d, s2 log: %d\n",
2195			  STm->defaults_for_writes, STp->omit_blklims,
2196			  STp->can_partitions, STp->scsi2_logical);
2197		st_printk(KERN_INFO, STp,
2198			  "    sysv: %d nowait: %d sili: %d "
2199			  "nowait_filemark: %d\n",
2200			  STm->sysv, STp->immediate, STp->sili,
2201			  STp->immediate_filemark);
2202		st_printk(KERN_INFO, STp, "    debugging: %d\n", debugging);
2203	}
2204}
2205	)
2206
2207
2208static int st_set_options(struct scsi_tape *STp, long options)
2209{
2210	int value;
2211	long code;
2212	struct st_modedef *STm;
2213	struct cdev *cd0, *cd1;
2214	struct device *d0, *d1;
2215
2216	STm = &(STp->modes[STp->current_mode]);
2217	if (!STm->defined) {
2218		cd0 = STm->cdevs[0];
2219		cd1 = STm->cdevs[1];
2220		d0  = STm->devs[0];
2221		d1  = STm->devs[1];
2222		memcpy(STm, &(STp->modes[0]), sizeof(struct st_modedef));
2223		STm->cdevs[0] = cd0;
2224		STm->cdevs[1] = cd1;
2225		STm->devs[0]  = d0;
2226		STm->devs[1]  = d1;
2227		modes_defined = 1;
2228		DEBC_printk(STp, "Initialized mode %d definition from mode 0\n",
2229			    STp->current_mode);
2230	}
2231
2232	code = options & MT_ST_OPTIONS;
2233	if (code == MT_ST_BOOLEANS) {
2234		STm->do_buffer_writes = (options & MT_ST_BUFFER_WRITES) != 0;
2235		STm->do_async_writes = (options & MT_ST_ASYNC_WRITES) != 0;
2236		STm->defaults_for_writes = (options & MT_ST_DEF_WRITES) != 0;
2237		STm->do_read_ahead = (options & MT_ST_READ_AHEAD) != 0;
2238		STp->two_fm = (options & MT_ST_TWO_FM) != 0;
2239		STp->fast_mteom = (options & MT_ST_FAST_MTEOM) != 0;
2240		STp->do_auto_lock = (options & MT_ST_AUTO_LOCK) != 0;
2241		STp->can_bsr = (options & MT_ST_CAN_BSR) != 0;
2242		STp->omit_blklims = (options & MT_ST_NO_BLKLIMS) != 0;
2243		if ((STp->device)->scsi_level >= SCSI_2)
2244			STp->can_partitions = (options & MT_ST_CAN_PARTITIONS) != 0;
2245		STp->scsi2_logical = (options & MT_ST_SCSI2LOGICAL) != 0;
2246		STp->immediate = (options & MT_ST_NOWAIT) != 0;
2247		STp->immediate_filemark = (options & MT_ST_NOWAIT_EOF) != 0;
2248		STm->sysv = (options & MT_ST_SYSV) != 0;
2249		STp->sili = (options & MT_ST_SILI) != 0;
2250		DEB( debugging = (options & MT_ST_DEBUGGING) != 0;
2251		     st_log_options(STp, STm); )
2252	} else if (code == MT_ST_SETBOOLEANS || code == MT_ST_CLEARBOOLEANS) {
2253		value = (code == MT_ST_SETBOOLEANS);
2254		if ((options & MT_ST_BUFFER_WRITES) != 0)
2255			STm->do_buffer_writes = value;
2256		if ((options & MT_ST_ASYNC_WRITES) != 0)
2257			STm->do_async_writes = value;
2258		if ((options & MT_ST_DEF_WRITES) != 0)
2259			STm->defaults_for_writes = value;
2260		if ((options & MT_ST_READ_AHEAD) != 0)
2261			STm->do_read_ahead = value;
2262		if ((options & MT_ST_TWO_FM) != 0)
2263			STp->two_fm = value;
2264		if ((options & MT_ST_FAST_MTEOM) != 0)
2265			STp->fast_mteom = value;
2266		if ((options & MT_ST_AUTO_LOCK) != 0)
2267			STp->do_auto_lock = value;
2268		if ((options & MT_ST_CAN_BSR) != 0)
2269			STp->can_bsr = value;
2270		if ((options & MT_ST_NO_BLKLIMS) != 0)
2271			STp->omit_blklims = value;
2272		if ((STp->device)->scsi_level >= SCSI_2 &&
2273		    (options & MT_ST_CAN_PARTITIONS) != 0)
2274			STp->can_partitions = value;
2275		if ((options & MT_ST_SCSI2LOGICAL) != 0)
2276			STp->scsi2_logical = value;
2277		if ((options & MT_ST_NOWAIT) != 0)
2278			STp->immediate = value;
2279		if ((options & MT_ST_NOWAIT_EOF) != 0)
2280			STp->immediate_filemark = value;
2281		if ((options & MT_ST_SYSV) != 0)
2282			STm->sysv = value;
2283		if ((options & MT_ST_SILI) != 0)
2284			STp->sili = value;
2285		DEB(
2286		if ((options & MT_ST_DEBUGGING) != 0)
2287			debugging = value;
2288			st_log_options(STp, STm); )
2289	} else if (code == MT_ST_WRITE_THRESHOLD) {
2290		/* Retained for compatibility */
2291	} else if (code == MT_ST_DEF_BLKSIZE) {
2292		value = (options & ~MT_ST_OPTIONS);
2293		if (value == ~MT_ST_OPTIONS) {
2294			STm->default_blksize = (-1);
2295			DEBC_printk(STp, "Default block size disabled.\n");
2296		} else {
2297			STm->default_blksize = value;
2298			DEBC_printk(STp,"Default block size set to "
2299				    "%d bytes.\n", STm->default_blksize);
2300			if (STp->ready == ST_READY) {
2301				STp->blksize_changed = 0;
2302				set_mode_densblk(STp, STm);
2303			}
2304		}
2305	} else if (code == MT_ST_TIMEOUTS) {
2306		value = (options & ~MT_ST_OPTIONS);
2307		if ((value & MT_ST_SET_LONG_TIMEOUT) != 0) {
2308			STp->long_timeout = (value & ~MT_ST_SET_LONG_TIMEOUT) * HZ;
2309			DEBC_printk(STp, "Long timeout set to %d seconds.\n",
2310				    (value & ~MT_ST_SET_LONG_TIMEOUT));
2311		} else {
2312			blk_queue_rq_timeout(STp->device->request_queue,
2313					     value * HZ);
2314			DEBC_printk(STp, "Normal timeout set to %d seconds.\n",
2315				    value);
2316		}
2317	} else if (code == MT_ST_SET_CLN) {
2318		value = (options & ~MT_ST_OPTIONS) & 0xff;
2319		if (value != 0 &&
2320			(value < EXTENDED_SENSE_START ||
2321				value >= SCSI_SENSE_BUFFERSIZE))
2322			return (-EINVAL);
2323		STp->cln_mode = value;
2324		STp->cln_sense_mask = (options >> 8) & 0xff;
2325		STp->cln_sense_value = (options >> 16) & 0xff;
2326		st_printk(KERN_INFO, STp,
2327			  "Cleaning request mode %d, mask %02x, value %02x\n",
2328			  value, STp->cln_sense_mask, STp->cln_sense_value);
2329	} else if (code == MT_ST_DEF_OPTIONS) {
2330		code = (options & ~MT_ST_CLEAR_DEFAULT);
2331		value = (options & MT_ST_CLEAR_DEFAULT);
2332		if (code == MT_ST_DEF_DENSITY) {
2333			if (value == MT_ST_CLEAR_DEFAULT) {
2334				STm->default_density = (-1);
2335				DEBC_printk(STp,
2336					    "Density default disabled.\n");
2337			} else {
2338				STm->default_density = value & 0xff;
2339				DEBC_printk(STp, "Density default set to %x\n",
2340					    STm->default_density);
2341				if (STp->ready == ST_READY) {
2342					STp->density_changed = 0;
2343					set_mode_densblk(STp, STm);
2344				}
2345			}
2346		} else if (code == MT_ST_DEF_DRVBUFFER) {
2347			if (value == MT_ST_CLEAR_DEFAULT) {
2348				STp->default_drvbuffer = 0xff;
2349				DEBC_printk(STp,
2350					    "Drive buffer default disabled.\n");
2351			} else {
2352				STp->default_drvbuffer = value & 7;
2353				DEBC_printk(STp,
2354					    "Drive buffer default set to %x\n",
2355					    STp->default_drvbuffer);
2356				if (STp->ready == ST_READY)
2357					st_int_ioctl(STp, MTSETDRVBUFFER, STp->default_drvbuffer);
2358			}
2359		} else if (code == MT_ST_DEF_COMPRESSION) {
2360			if (value == MT_ST_CLEAR_DEFAULT) {
2361				STm->default_compression = ST_DONT_TOUCH;
2362				DEBC_printk(STp,
2363					    "Compression default disabled.\n");
2364			} else {
2365				if ((value & 0xff00) != 0) {
2366					STp->c_algo = (value & 0xff00) >> 8;
2367					DEBC_printk(STp, "Compression "
2368						    "algorithm set to 0x%x.\n",
2369						    STp->c_algo);
2370				}
2371				if ((value & 0xff) != 0xff) {
2372					STm->default_compression = (value & 1 ? ST_YES : ST_NO);
2373					DEBC_printk(STp, "Compression default "
2374						    "set to %x\n",
2375						    (value & 1));
2376					if (STp->ready == ST_READY) {
2377						STp->compression_changed = 0;
2378						st_compression(STp, (STm->default_compression == ST_YES));
2379					}
2380				}
2381			}
2382		}
2383	} else
2384		return (-EIO);
2385
2386	return 0;
2387}
2388
2389#define MODE_HEADER_LENGTH  4
2390
2391/* Mode header and page byte offsets */
2392#define MH_OFF_DATA_LENGTH     0
2393#define MH_OFF_MEDIUM_TYPE     1
2394#define MH_OFF_DEV_SPECIFIC    2
2395#define MH_OFF_BDESCS_LENGTH   3
2396#define MP_OFF_PAGE_NBR        0
2397#define MP_OFF_PAGE_LENGTH     1
2398
2399/* Mode header and page bit masks */
2400#define MH_BIT_WP              0x80
2401#define MP_MSK_PAGE_NBR        0x3f
2402
2403/* Don't return block descriptors */
2404#define MODE_SENSE_OMIT_BDESCS 0x08
2405
2406#define MODE_SELECT_PAGE_FORMAT 0x10
2407
2408/* Read a mode page into the tape buffer. The block descriptors are included
2409   if incl_block_descs is true. The page control is ored to the page number
2410   parameter, if necessary. */
2411static int read_mode_page(struct scsi_tape *STp, int page, int omit_block_descs)
2412{
2413	unsigned char cmd[MAX_COMMAND_SIZE];
2414	struct st_request *SRpnt;
2415
2416	memset(cmd, 0, MAX_COMMAND_SIZE);
2417	cmd[0] = MODE_SENSE;
2418	if (omit_block_descs)
2419		cmd[1] = MODE_SENSE_OMIT_BDESCS;
2420	cmd[2] = page;
2421	cmd[4] = 255;
2422
2423	SRpnt = st_do_scsi(NULL, STp, cmd, cmd[4], DMA_FROM_DEVICE,
2424			   STp->device->request_queue->rq_timeout, 0, 1);
2425	if (SRpnt == NULL)
2426		return (STp->buffer)->syscall_result;
2427
2428	st_release_request(SRpnt);
2429
2430	return STp->buffer->syscall_result;
2431}
2432
2433
2434/* Send the mode page in the tape buffer to the drive. Assumes that the mode data
2435   in the buffer is correctly formatted. The long timeout is used if slow is non-zero. */
2436static int write_mode_page(struct scsi_tape *STp, int page, int slow)
2437{
2438	int pgo;
2439	unsigned char cmd[MAX_COMMAND_SIZE];
2440	struct st_request *SRpnt;
2441	int timeout;
2442
2443	memset(cmd, 0, MAX_COMMAND_SIZE);
2444	cmd[0] = MODE_SELECT;
2445	cmd[1] = MODE_SELECT_PAGE_FORMAT;
2446	pgo = MODE_HEADER_LENGTH + (STp->buffer)->b_data[MH_OFF_BDESCS_LENGTH];
2447	cmd[4] = pgo + (STp->buffer)->b_data[pgo + MP_OFF_PAGE_LENGTH] + 2;
2448
2449	/* Clear reserved fields */
2450	(STp->buffer)->b_data[MH_OFF_DATA_LENGTH] = 0;
2451	(STp->buffer)->b_data[MH_OFF_MEDIUM_TYPE] = 0;
2452	(STp->buffer)->b_data[MH_OFF_DEV_SPECIFIC] &= ~MH_BIT_WP;
2453	(STp->buffer)->b_data[pgo + MP_OFF_PAGE_NBR] &= MP_MSK_PAGE_NBR;
2454
2455	timeout = slow ?
2456		STp->long_timeout : STp->device->request_queue->rq_timeout;
2457	SRpnt = st_do_scsi(NULL, STp, cmd, cmd[4], DMA_TO_DEVICE,
2458			   timeout, 0, 1);
2459	if (SRpnt == NULL)
2460		return (STp->buffer)->syscall_result;
2461
2462	st_release_request(SRpnt);
2463
2464	return STp->buffer->syscall_result;
2465}
2466
2467
2468#define COMPRESSION_PAGE        0x0f
2469#define COMPRESSION_PAGE_LENGTH 16
2470
2471#define CP_OFF_DCE_DCC          2
2472#define CP_OFF_C_ALGO           7
2473
2474#define DCE_MASK  0x80
2475#define DCC_MASK  0x40
2476#define RED_MASK  0x60
2477
2478
2479/* Control the compression with mode page 15. Algorithm not changed if zero.
2480
2481   The block descriptors are read and written because Sony SDT-7000 does not
2482   work without this (suggestion from Michael Schaefer <Michael.Schaefer@dlr.de>).
2483   Including block descriptors should not cause any harm to other drives. */
2484
2485static int st_compression(struct scsi_tape * STp, int state)
2486{
2487	int retval;
2488	int mpoffs;  /* Offset to mode page start */
2489	unsigned char *b_data = (STp->buffer)->b_data;
2490
2491	if (STp->ready != ST_READY)
2492		return (-EIO);
2493
2494	/* Read the current page contents */
2495	retval = read_mode_page(STp, COMPRESSION_PAGE, 0);
2496	if (retval) {
2497		DEBC_printk(STp, "Compression mode page not supported.\n");
2498		return (-EIO);
2499	}
2500
2501	mpoffs = MODE_HEADER_LENGTH + b_data[MH_OFF_BDESCS_LENGTH];
2502	DEBC_printk(STp, "Compression state is %d.\n",
2503		    (b_data[mpoffs + CP_OFF_DCE_DCC] & DCE_MASK ? 1 : 0));
2504
2505	/* Check if compression can be changed */
2506	if ((b_data[mpoffs + CP_OFF_DCE_DCC] & DCC_MASK) == 0) {
2507		DEBC_printk(STp, "Compression not supported.\n");
2508		return (-EIO);
2509	}
2510
2511	/* Do the change */
2512	if (state) {
2513		b_data[mpoffs + CP_OFF_DCE_DCC] |= DCE_MASK;
2514		if (STp->c_algo != 0)
2515			b_data[mpoffs + CP_OFF_C_ALGO] = STp->c_algo;
2516	}
2517	else {
2518		b_data[mpoffs + CP_OFF_DCE_DCC] &= ~DCE_MASK;
2519		if (STp->c_algo != 0)
2520			b_data[mpoffs + CP_OFF_C_ALGO] = 0; /* no compression */
2521	}
2522
2523	retval = write_mode_page(STp, COMPRESSION_PAGE, 0);
2524	if (retval) {
2525		DEBC_printk(STp, "Compression change failed.\n");
2526		return (-EIO);
2527	}
2528	DEBC_printk(STp, "Compression state changed to %d.\n", state);
2529
2530	STp->compression_changed = 1;
2531	return 0;
2532}
2533
2534
2535/* Process the load and unload commands (does unload if the load code is zero) */
2536static int do_load_unload(struct scsi_tape *STp, struct file *filp, int load_code)
2537{
2538	int retval = (-EIO), timeout;
2539	unsigned char cmd[MAX_COMMAND_SIZE];
2540	struct st_partstat *STps;
2541	struct st_request *SRpnt;
2542
2543	if (STp->ready != ST_READY && !load_code) {
2544		if (STp->ready == ST_NO_TAPE)
2545			return (-ENOMEDIUM);
2546		else
2547			return (-EIO);
2548	}
2549
2550	memset(cmd, 0, MAX_COMMAND_SIZE);
2551	cmd[0] = START_STOP;
2552	if (load_code)
2553		cmd[4] |= 1;
2554	/*
2555	 * If arg >= 1 && arg <= 6 Enhanced load/unload in HP C1553A
2556	 */
2557	if (load_code >= 1 + MT_ST_HPLOADER_OFFSET
2558	    && load_code <= 6 + MT_ST_HPLOADER_OFFSET) {
2559		DEBC_printk(STp, " Enhanced %sload slot %2d.\n",
2560			    (cmd[4]) ? "" : "un",
2561			    load_code - MT_ST_HPLOADER_OFFSET);
2562		cmd[3] = load_code - MT_ST_HPLOADER_OFFSET; /* MediaID field of C1553A */
2563	}
2564	if (STp->immediate) {
2565		cmd[1] = 1;	/* Don't wait for completion */
2566		timeout = STp->device->request_queue->rq_timeout;
2567	}
2568	else
2569		timeout = STp->long_timeout;
2570
2571	DEBC(
2572		if (!load_code)
2573			st_printk(ST_DEB_MSG, STp, "Unloading tape.\n");
2574		else
2575			st_printk(ST_DEB_MSG, STp, "Loading tape.\n");
2576		);
2577
2578	SRpnt = st_do_scsi(NULL, STp, cmd, 0, DMA_NONE,
2579			   timeout, MAX_RETRIES, 1);
2580	if (!SRpnt)
2581		return (STp->buffer)->syscall_result;
2582
2583	retval = (STp->buffer)->syscall_result;
2584	st_release_request(SRpnt);
2585
2586	if (!retval) {	/* SCSI command successful */
2587
2588		if (!load_code) {
2589			STp->rew_at_close = 0;
2590			STp->ready = ST_NO_TAPE;
2591		}
2592		else {
2593			STp->rew_at_close = STp->autorew_dev;
2594			retval = check_tape(STp, filp);
2595			if (retval > 0)
2596				retval = 0;
2597		}
2598	}
2599	else {
2600		STps = &(STp->ps[STp->partition]);
2601		STps->drv_file = STps->drv_block = (-1);
2602	}
2603
2604	return retval;
2605}
2606
2607#if DEBUG
2608#define ST_DEB_FORWARD  0
2609#define ST_DEB_BACKWARD 1
2610static void deb_space_print(struct scsi_tape *STp, int direction, char *units, unsigned char *cmd)
2611{
2612	s32 sc;
2613
2614	if (!debugging)
2615		return;
2616
2617	sc = cmd[2] & 0x80 ? 0xff000000 : 0;
2618	sc |= (cmd[2] << 16) | (cmd[3] << 8) | cmd[4];
2619	if (direction)
2620		sc = -sc;
2621	st_printk(ST_DEB_MSG, STp, "Spacing tape %s over %d %s.\n",
2622		  direction ? "backward" : "forward", sc, units);
2623}
2624#else
2625#define ST_DEB_FORWARD  0
2626#define ST_DEB_BACKWARD 1
2627static void deb_space_print(struct scsi_tape *STp, int direction, char *units, unsigned char *cmd) {}
2628#endif
2629
2630
2631/* Internal ioctl function */
2632static int st_int_ioctl(struct scsi_tape *STp, unsigned int cmd_in, unsigned long arg)
2633{
2634	int timeout;
2635	long ltmp;
2636	int ioctl_result;
2637	int chg_eof = 1;
2638	unsigned char cmd[MAX_COMMAND_SIZE];
2639	struct st_request *SRpnt;
2640	struct st_partstat *STps;
2641	int fileno, blkno, at_sm, undone;
2642	int datalen = 0, direction = DMA_NONE;
2643
2644	WARN_ON(STp->buffer->do_dio != 0);
2645	if (STp->ready != ST_READY) {
2646		if (STp->ready == ST_NO_TAPE)
2647			return (-ENOMEDIUM);
2648		else
2649			return (-EIO);
2650	}
2651	timeout = STp->long_timeout;
2652	STps = &(STp->ps[STp->partition]);
2653	fileno = STps->drv_file;
2654	blkno = STps->drv_block;
2655	at_sm = STps->at_sm;
2656
2657	memset(cmd, 0, MAX_COMMAND_SIZE);
2658	switch (cmd_in) {
2659	case MTFSFM:
2660		chg_eof = 0;	/* Changed from the FSF after this */
2661	case MTFSF:
2662		cmd[0] = SPACE;
2663		cmd[1] = 0x01;	/* Space FileMarks */
2664		cmd[2] = (arg >> 16);
2665		cmd[3] = (arg >> 8);
2666		cmd[4] = arg;
2667		deb_space_print(STp, ST_DEB_FORWARD, "filemarks", cmd);
2668		if (fileno >= 0)
2669			fileno += arg;
2670		blkno = 0;
2671		at_sm &= (arg == 0);
2672		break;
2673	case MTBSFM:
2674		chg_eof = 0;	/* Changed from the FSF after this */
2675	case MTBSF:
2676		cmd[0] = SPACE;
2677		cmd[1] = 0x01;	/* Space FileMarks */
2678		ltmp = (-arg);
2679		cmd[2] = (ltmp >> 16);
2680		cmd[3] = (ltmp >> 8);
2681		cmd[4] = ltmp;
2682		deb_space_print(STp, ST_DEB_BACKWARD, "filemarks", cmd);
2683		if (fileno >= 0)
2684			fileno -= arg;
2685		blkno = (-1);	/* We can't know the block number */
2686		at_sm &= (arg == 0);
2687		break;
2688	case MTFSR:
2689		cmd[0] = SPACE;
2690		cmd[1] = 0x00;	/* Space Blocks */
2691		cmd[2] = (arg >> 16);
2692		cmd[3] = (arg >> 8);
2693		cmd[4] = arg;
2694		deb_space_print(STp, ST_DEB_FORWARD, "blocks", cmd);
2695		if (blkno >= 0)
2696			blkno += arg;
2697		at_sm &= (arg == 0);
2698		break;
2699	case MTBSR:
2700		cmd[0] = SPACE;
2701		cmd[1] = 0x00;	/* Space Blocks */
2702		ltmp = (-arg);
2703		cmd[2] = (ltmp >> 16);
2704		cmd[3] = (ltmp >> 8);
2705		cmd[4] = ltmp;
2706		deb_space_print(STp, ST_DEB_BACKWARD, "blocks", cmd);
2707		if (blkno >= 0)
2708			blkno -= arg;
2709		at_sm &= (arg == 0);
2710		break;
2711	case MTFSS:
2712		cmd[0] = SPACE;
2713		cmd[1] = 0x04;	/* Space Setmarks */
2714		cmd[2] = (arg >> 16);
2715		cmd[3] = (arg >> 8);
2716		cmd[4] = arg;
2717		deb_space_print(STp, ST_DEB_FORWARD, "setmarks", cmd);
2718		if (arg != 0) {
2719			blkno = fileno = (-1);
2720			at_sm = 1;
2721		}
2722		break;
2723	case MTBSS:
2724		cmd[0] = SPACE;
2725		cmd[1] = 0x04;	/* Space Setmarks */
2726		ltmp = (-arg);
2727		cmd[2] = (ltmp >> 16);
2728		cmd[3] = (ltmp >> 8);
2729		cmd[4] = ltmp;
2730		deb_space_print(STp, ST_DEB_BACKWARD, "setmarks", cmd);
2731		if (arg != 0) {
2732			blkno = fileno = (-1);
2733			at_sm = 1;
2734		}
2735		break;
2736	case MTWEOF:
2737	case MTWEOFI:
2738	case MTWSM:
2739		if (STp->write_prot)
2740			return (-EACCES);
2741		cmd[0] = WRITE_FILEMARKS;
2742		if (cmd_in == MTWSM)
2743			cmd[1] = 2;
2744		if (cmd_in == MTWEOFI ||
2745		    (cmd_in == MTWEOF && STp->immediate_filemark))
2746			cmd[1] |= 1;
2747		cmd[2] = (arg >> 16);
2748		cmd[3] = (arg >> 8);
2749		cmd[4] = arg;
2750		timeout = STp->device->request_queue->rq_timeout;
2751		DEBC(
2752			if (cmd_in != MTWSM)
2753				st_printk(ST_DEB_MSG, STp,
2754					  "Writing %d filemarks.\n",
2755					  cmd[2] * 65536 +
2756					  cmd[3] * 256 +
2757					  cmd[4]);
2758			else
2759				st_printk(ST_DEB_MSG, STp,
2760					  "Writing %d setmarks.\n",
2761					  cmd[2] * 65536 +
2762					  cmd[3] * 256 +
2763					  cmd[4]);
2764		)
2765		if (fileno >= 0)
2766			fileno += arg;
2767		blkno = 0;
2768		at_sm = (cmd_in == MTWSM);
2769		break;
2770	case MTREW:
2771		cmd[0] = REZERO_UNIT;
2772		if (STp->immediate) {
2773			cmd[1] = 1;	/* Don't wait for completion */
2774			timeout = STp->device->request_queue->rq_timeout;
2775		}
2776		DEBC_printk(STp, "Rewinding tape.\n");
2777		fileno = blkno = at_sm = 0;
2778		break;
2779	case MTNOP:
2780		DEBC_printk(STp, "No op on tape.\n");
2781		return 0;	/* Should do something ? */
2782		break;
2783	case MTRETEN:
2784		cmd[0] = START_STOP;
2785		if (STp->immediate) {
2786			cmd[1] = 1;	/* Don't wait for completion */
2787			timeout = STp->device->request_queue->rq_timeout;
2788		}
2789		cmd[4] = 3;
2790		DEBC_printk(STp, "Retensioning tape.\n");
2791		fileno = blkno = at_sm = 0;
2792		break;
2793	case MTEOM:
2794		if (!STp->fast_mteom) {
2795			/* space to the end of tape */
2796			ioctl_result = st_int_ioctl(STp, MTFSF, 0x7fffff);
2797			fileno = STps->drv_file;
2798			if (STps->eof >= ST_EOD_1)
2799				return 0;
2800			/* The next lines would hide the number of spaced FileMarks
2801			   That's why I inserted the previous lines. I had no luck
2802			   with detecting EOM with FSF, so we go now to EOM.
2803			   Joerg Weule */
2804		} else
2805			fileno = (-1);
2806		cmd[0] = SPACE;
2807		cmd[1] = 3;
2808		DEBC_printk(STp, "Spacing to end of recorded medium.\n");
2809		blkno = -1;
2810		at_sm = 0;
2811		break;
2812	case MTERASE:
2813		if (STp->write_prot)
2814			return (-EACCES);
2815		cmd[0] = ERASE;
2816		cmd[1] = (arg ? 1 : 0);	/* Long erase with non-zero argument */
2817		if (STp->immediate) {
2818			cmd[1] |= 2;	/* Don't wait for completion */
2819			timeout = STp->device->request_queue->rq_timeout;
2820		}
2821		else
2822			timeout = STp->long_timeout * 8;
2823
2824		DEBC_printk(STp, "Erasing tape.\n");
2825		fileno = blkno = at_sm = 0;
2826		break;
2827	case MTSETBLK:		/* Set block length */
2828	case MTSETDENSITY:	/* Set tape density */
2829	case MTSETDRVBUFFER:	/* Set drive buffering */
2830	case SET_DENS_AND_BLK:	/* Set density and block size */
2831		chg_eof = 0;
2832		if (STp->dirty || (STp->buffer)->buffer_bytes != 0)
2833			return (-EIO);	/* Not allowed if data in buffer */
2834		if ((cmd_in == MTSETBLK || cmd_in == SET_DENS_AND_BLK) &&
2835		    (arg & MT_ST_BLKSIZE_MASK) != 0 &&
2836		    STp->max_block > 0 &&
2837		    ((arg & MT_ST_BLKSIZE_MASK) < STp->min_block ||
2838		     (arg & MT_ST_BLKSIZE_MASK) > STp->max_block)) {
2839			st_printk(KERN_WARNING, STp, "Illegal block size.\n");
2840			return (-EINVAL);
2841		}
2842		cmd[0] = MODE_SELECT;
2843		if ((STp->use_pf & USE_PF))
2844			cmd[1] = MODE_SELECT_PAGE_FORMAT;
2845		cmd[4] = datalen = 12;
2846		direction = DMA_TO_DEVICE;
2847
2848		memset((STp->buffer)->b_data, 0, 12);
2849		if (cmd_in == MTSETDRVBUFFER)
2850			(STp->buffer)->b_data[2] = (arg & 7) << 4;
2851		else
2852			(STp->buffer)->b_data[2] =
2853			    STp->drv_buffer << 4;
2854		(STp->buffer)->b_data[3] = 8;	/* block descriptor length */
2855		if (cmd_in == MTSETDENSITY) {
2856			(STp->buffer)->b_data[4] = arg;
2857			STp->density_changed = 1;	/* At least we tried ;-) */
2858		} else if (cmd_in == SET_DENS_AND_BLK)
2859			(STp->buffer)->b_data[4] = arg >> 24;
2860		else
2861			(STp->buffer)->b_data[4] = STp->density;
2862		if (cmd_in == MTSETBLK || cmd_in == SET_DENS_AND_BLK) {
2863			ltmp = arg & MT_ST_BLKSIZE_MASK;
2864			if (cmd_in == MTSETBLK)
2865				STp->blksize_changed = 1; /* At least we tried ;-) */
2866		} else
2867			ltmp = STp->block_size;
2868		(STp->buffer)->b_data[9] = (ltmp >> 16);
2869		(STp->buffer)->b_data[10] = (ltmp >> 8);
2870		(STp->buffer)->b_data[11] = ltmp;
2871		timeout = STp->device->request_queue->rq_timeout;
2872		DEBC(
2873			if (cmd_in == MTSETBLK || cmd_in == SET_DENS_AND_BLK)
2874				st_printk(ST_DEB_MSG, STp,
2875					  "Setting block size to %d bytes.\n",
2876					  (STp->buffer)->b_data[9] * 65536 +
2877					  (STp->buffer)->b_data[10] * 256 +
2878					  (STp->buffer)->b_data[11]);
2879			if (cmd_in == MTSETDENSITY || cmd_in == SET_DENS_AND_BLK)
2880				st_printk(ST_DEB_MSG, STp,
2881					  "Setting density code to %x.\n",
2882					  (STp->buffer)->b_data[4]);
2883			if (cmd_in == MTSETDRVBUFFER)
2884				st_printk(ST_DEB_MSG, STp,
2885					  "Setting drive buffer code to %d.\n",
2886					  ((STp->buffer)->b_data[2] >> 4) & 7);
2887		)
2888		break;
2889	default:
2890		return (-ENOSYS);
2891	}
2892
2893	SRpnt = st_do_scsi(NULL, STp, cmd, datalen, direction,
2894			   timeout, MAX_RETRIES, 1);
2895	if (!SRpnt)
2896		return (STp->buffer)->syscall_result;
2897
2898	ioctl_result = (STp->buffer)->syscall_result;
2899
2900	if (!ioctl_result) {	/* SCSI command successful */
2901		st_release_request(SRpnt);
2902		SRpnt = NULL;
2903		STps->drv_block = blkno;
2904		STps->drv_file = fileno;
2905		STps->at_sm = at_sm;
2906
2907		if (cmd_in == MTBSFM)
2908			ioctl_result = st_int_ioctl(STp, MTFSF, 1);
2909		else if (cmd_in == MTFSFM)
2910			ioctl_result = st_int_ioctl(STp, MTBSF, 1);
2911
2912		if (cmd_in == MTSETBLK || cmd_in == SET_DENS_AND_BLK) {
2913			STp->block_size = arg & MT_ST_BLKSIZE_MASK;
2914			if (STp->block_size != 0) {
2915				(STp->buffer)->buffer_blocks =
2916				    (STp->buffer)->buffer_size / STp->block_size;
2917			}
2918			(STp->buffer)->buffer_bytes = (STp->buffer)->read_pointer = 0;
2919			if (cmd_in == SET_DENS_AND_BLK)
2920				STp->density = arg >> MT_ST_DENSITY_SHIFT;
2921		} else if (cmd_in == MTSETDRVBUFFER)
2922			STp->drv_buffer = (arg & 7);
2923		else if (cmd_in == MTSETDENSITY)
2924			STp->density = arg;
2925
2926		if (cmd_in == MTEOM)
2927			STps->eof = ST_EOD;
2928		else if (cmd_in == MTFSF)
2929			STps->eof = ST_FM;
2930		else if (chg_eof)
2931			STps->eof = ST_NOEOF;
2932
2933		if (cmd_in == MTWEOF || cmd_in == MTWEOFI)
2934			STps->rw = ST_IDLE;  /* prevent automatic WEOF at close */
2935	} else { /* SCSI command was not completely successful. Don't return
2936                    from this block without releasing the SCSI command block! */
2937		struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
2938
2939		if (cmdstatp->flags & SENSE_EOM) {
2940			if (cmd_in != MTBSF && cmd_in != MTBSFM &&
2941			    cmd_in != MTBSR && cmd_in != MTBSS)
2942				STps->eof = ST_EOM_OK;
2943			STps->drv_block = 0;
2944		}
2945
2946		if (cmdstatp->remainder_valid)
2947			undone = (int)cmdstatp->uremainder64;
2948		else
2949			undone = 0;
2950
2951		if ((cmd_in == MTWEOF || cmd_in == MTWEOFI) &&
2952		    cmdstatp->have_sense &&
2953		    (cmdstatp->flags & SENSE_EOM)) {
2954			if (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
2955			    cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) {
2956				ioctl_result = 0;	/* EOF(s) written successfully at EOM */
2957				STps->eof = ST_NOEOF;
2958			} else {  /* Writing EOF(s) failed */
2959				if (fileno >= 0)
2960					fileno -= undone;
2961				if (undone < arg)
2962					STps->eof = ST_NOEOF;
2963			}
2964			STps->drv_file = fileno;
2965		} else if ((cmd_in == MTFSF) || (cmd_in == MTFSFM)) {
2966			if (fileno >= 0)
2967				STps->drv_file = fileno - undone;
2968			else
2969				STps->drv_file = fileno;
2970			STps->drv_block = -1;
2971			STps->eof = ST_NOEOF;
2972		} else if ((cmd_in == MTBSF) || (cmd_in == MTBSFM)) {
2973			if (arg > 0 && undone < 0)  /* Some drives get this wrong */
2974				undone = (-undone);
2975			if (STps->drv_file >= 0)
2976				STps->drv_file = fileno + undone;
2977			STps->drv_block = 0;
2978			STps->eof = ST_NOEOF;
2979		} else if (cmd_in == MTFSR) {
2980			if (cmdstatp->flags & SENSE_FMK) {	/* Hit filemark */
2981				if (STps->drv_file >= 0)
2982					STps->drv_file++;
2983				STps->drv_block = 0;
2984				STps->eof = ST_FM;
2985			} else {
2986				if (blkno >= undone)
2987					STps->drv_block = blkno - undone;
2988				else
2989					STps->drv_block = (-1);
2990				STps->eof = ST_NOEOF;
2991			}
2992		} else if (cmd_in == MTBSR) {
2993			if (cmdstatp->flags & SENSE_FMK) {	/* Hit filemark */
2994				STps->drv_file--;
2995				STps->drv_block = (-1);
2996			} else {
2997				if (arg > 0 && undone < 0)  /* Some drives get this wrong */
2998					undone = (-undone);
2999				if (STps->drv_block >= 0)
3000					STps->drv_block = blkno + undone;
3001			}
3002			STps->eof = ST_NOEOF;
3003		} else if (cmd_in == MTEOM) {
3004			STps->drv_file = (-1);
3005			STps->drv_block = (-1);
3006			STps->eof = ST_EOD;
3007		} else if (cmd_in == MTSETBLK ||
3008			   cmd_in == MTSETDENSITY ||
3009			   cmd_in == MTSETDRVBUFFER ||
3010			   cmd_in == SET_DENS_AND_BLK) {
3011			if (cmdstatp->sense_hdr.sense_key == ILLEGAL_REQUEST &&
3012			    !(STp->use_pf & PF_TESTED)) {
3013				/* Try the other possible state of Page Format if not
3014				   already tried */
3015				STp->use_pf = (STp->use_pf ^ USE_PF) | PF_TESTED;
3016				st_release_request(SRpnt);
3017				SRpnt = NULL;
3018				return st_int_ioctl(STp, cmd_in, arg);
3019			}
3020		} else if (chg_eof)
3021			STps->eof = ST_NOEOF;
3022
3023		if (cmdstatp->sense_hdr.sense_key == BLANK_CHECK)
3024			STps->eof = ST_EOD;
3025
3026		st_release_request(SRpnt);
3027		SRpnt = NULL;
3028	}
3029
3030	return ioctl_result;
3031}
3032
3033
3034/* Get the tape position. If bt == 2, arg points into a kernel space mt_loc
3035   structure. */
3036
3037static int get_location(struct scsi_tape *STp, unsigned int *block, int *partition,
3038			int logical)
3039{
3040	int result;
3041	unsigned char scmd[MAX_COMMAND_SIZE];
3042	struct st_request *SRpnt;
3043
3044	if (STp->ready != ST_READY)
3045		return (-EIO);
3046
3047	memset(scmd, 0, MAX_COMMAND_SIZE);
3048	if ((STp->device)->scsi_level < SCSI_2) {
3049		scmd[0] = QFA_REQUEST_BLOCK;
3050		scmd[4] = 3;
3051	} else {
3052		scmd[0] = READ_POSITION;
3053		if (!logical && !STp->scsi2_logical)
3054			scmd[1] = 1;
3055	}
3056	SRpnt = st_do_scsi(NULL, STp, scmd, 20, DMA_FROM_DEVICE,
3057			   STp->device->request_queue->rq_timeout,
3058			   MAX_READY_RETRIES, 1);
3059	if (!SRpnt)
3060		return (STp->buffer)->syscall_result;
3061
3062	if ((STp->buffer)->syscall_result != 0 ||
3063	    (STp->device->scsi_level >= SCSI_2 &&
3064	     ((STp->buffer)->b_data[0] & 4) != 0)) {
3065		*block = *partition = 0;
3066		DEBC_printk(STp, " Can't read tape position.\n");
3067		result = (-EIO);
3068	} else {
3069		result = 0;
3070		if ((STp->device)->scsi_level < SCSI_2) {
3071			*block = ((STp->buffer)->b_data[0] << 16)
3072			    + ((STp->buffer)->b_data[1] << 8)
3073			    + (STp->buffer)->b_data[2];
3074			*partition = 0;
3075		} else {
3076			*block = ((STp->buffer)->b_data[4] << 24)
3077			    + ((STp->buffer)->b_data[5] << 16)
3078			    + ((STp->buffer)->b_data[6] << 8)
3079			    + (STp->buffer)->b_data[7];
3080			*partition = (STp->buffer)->b_data[1];
3081			if (((STp->buffer)->b_data[0] & 0x80) &&
3082			    (STp->buffer)->b_data[1] == 0)	/* BOP of partition 0 */
3083				STp->ps[0].drv_block = STp->ps[0].drv_file = 0;
3084		}
3085		DEBC_printk(STp, "Got tape pos. blk %d part %d.\n",
3086			    *block, *partition);
3087	}
3088	st_release_request(SRpnt);
3089	SRpnt = NULL;
3090
3091	return result;
3092}
3093
3094
3095/* Set the tape block and partition. Negative partition means that only the
3096   block should be set in vendor specific way. */
3097static int set_location(struct scsi_tape *STp, unsigned int block, int partition,
3098			int logical)
3099{
3100	struct st_partstat *STps;
3101	int result, p;
3102	unsigned int blk;
3103	int timeout;
3104	unsigned char scmd[MAX_COMMAND_SIZE];
3105	struct st_request *SRpnt;
3106
3107	if (STp->ready != ST_READY)
3108		return (-EIO);
3109	timeout = STp->long_timeout;
3110	STps = &(STp->ps[STp->partition]);
3111
3112	DEBC_printk(STp, "Setting block to %d and partition to %d.\n",
3113		    block, partition);
3114	DEB(if (partition < 0)
3115		return (-EIO); )
3116
3117	/* Update the location at the partition we are leaving */
3118	if ((!STp->can_partitions && partition != 0) ||
3119	    partition >= ST_NBR_PARTITIONS)
3120		return (-EINVAL);
3121	if (partition != STp->partition) {
3122		if (get_location(STp, &blk, &p, 1))
3123			STps->last_block_valid = 0;
3124		else {
3125			STps->last_block_valid = 1;
3126			STps->last_block_visited = blk;
3127			DEBC_printk(STp, "Visited block %d for "
3128				    "partition %d saved.\n",
3129				    blk, STp->partition);
3130		}
3131	}
3132
3133	memset(scmd, 0, MAX_COMMAND_SIZE);
3134	if ((STp->device)->scsi_level < SCSI_2) {
3135		scmd[0] = QFA_SEEK_BLOCK;
3136		scmd[2] = (block >> 16);
3137		scmd[3] = (block >> 8);
3138		scmd[4] = block;
3139		scmd[5] = 0;
3140	} else {
3141		scmd[0] = SEEK_10;
3142		scmd[3] = (block >> 24);
3143		scmd[4] = (block >> 16);
3144		scmd[5] = (block >> 8);
3145		scmd[6] = block;
3146		if (!logical && !STp->scsi2_logical)
3147			scmd[1] = 4;
3148		if (STp->partition != partition) {
3149			scmd[1] |= 2;
3150			scmd[8] = partition;
3151			DEBC_printk(STp, "Trying to change partition "
3152				    "from %d to %d\n", STp->partition,
3153				    partition);
3154		}
3155	}
3156	if (STp->immediate) {
3157		scmd[1] |= 1;		/* Don't wait for completion */
3158		timeout = STp->device->request_queue->rq_timeout;
3159	}
3160
3161	SRpnt = st_do_scsi(NULL, STp, scmd, 0, DMA_NONE,
3162			   timeout, MAX_READY_RETRIES, 1);
3163	if (!SRpnt)
3164		return (STp->buffer)->syscall_result;
3165
3166	STps->drv_block = STps->drv_file = (-1);
3167	STps->eof = ST_NOEOF;
3168	if ((STp->buffer)->syscall_result != 0) {
3169		result = (-EIO);
3170		if (STp->can_partitions &&
3171		    (STp->device)->scsi_level >= SCSI_2 &&
3172		    (p = find_partition(STp)) >= 0)
3173			STp->partition = p;
3174	} else {
3175		if (STp->can_partitions) {
3176			STp->partition = partition;
3177			STps = &(STp->ps[partition]);
3178			if (!STps->last_block_valid ||
3179			    STps->last_block_visited != block) {
3180				STps->at_sm = 0;
3181				STps->rw = ST_IDLE;
3182			}
3183		} else
3184			STps->at_sm = 0;
3185		if (block == 0)
3186			STps->drv_block = STps->drv_file = 0;
3187		result = 0;
3188	}
3189
3190	st_release_request(SRpnt);
3191	SRpnt = NULL;
3192
3193	return result;
3194}
3195
3196
3197/* Find the current partition number for the drive status. Called from open and
3198   returns either partition number of negative error code. */
3199static int find_partition(struct scsi_tape *STp)
3200{
3201	int i, partition;
3202	unsigned int block;
3203
3204	if ((i = get_location(STp, &block, &partition, 1)) < 0)
3205		return i;
3206	if (partition >= ST_NBR_PARTITIONS)
3207		return (-EIO);
3208	return partition;
3209}
3210
3211
3212/* Change the partition if necessary */
3213static int switch_partition(struct scsi_tape *STp)
3214{
3215	struct st_partstat *STps;
3216
3217	if (STp->partition == STp->new_partition)
3218		return 0;
3219	STps = &(STp->ps[STp->new_partition]);
3220	if (!STps->last_block_valid)
3221		STps->last_block_visited = 0;
3222	return set_location(STp, STps->last_block_visited, STp->new_partition, 1);
3223}
3224
3225/* Functions for reading and writing the medium partition mode page. */
3226
3227#define PART_PAGE   0x11
3228#define PART_PAGE_FIXED_LENGTH 8
3229
3230#define PP_OFF_MAX_ADD_PARTS   2
3231#define PP_OFF_NBR_ADD_PARTS   3
3232#define PP_OFF_FLAGS           4
3233#define PP_OFF_PART_UNITS      6
3234#define PP_OFF_RESERVED        7
3235
3236#define PP_BIT_IDP             0x20
3237#define PP_MSK_PSUM_MB         0x10
3238
3239/* Get the number of partitions on the tape. As a side effect reads the
3240   mode page into the tape buffer. */
3241static int nbr_partitions(struct scsi_tape *STp)
3242{
3243	int result;
3244
3245	if (STp->ready != ST_READY)
3246		return (-EIO);
3247
3248	result = read_mode_page(STp, PART_PAGE, 1);
3249
3250	if (result) {
3251		DEBC_printk(STp, "Can't read medium partition page.\n");
3252		result = (-EIO);
3253	} else {
3254		result = (STp->buffer)->b_data[MODE_HEADER_LENGTH +
3255					      PP_OFF_NBR_ADD_PARTS] + 1;
3256		DEBC_printk(STp, "Number of partitions %d.\n", result);
3257	}
3258
3259	return result;
3260}
3261
3262
3263/* Partition the tape into two partitions if size > 0 or one partition if
3264   size == 0.
3265
3266   The block descriptors are read and written because Sony SDT-7000 does not
3267   work without this (suggestion from Michael Schaefer <Michael.Schaefer@dlr.de>).
3268
3269   My HP C1533A drive returns only one partition size field. This is used to
3270   set the size of partition 1. There is no size field for the default partition.
3271   Michael Schaefer's Sony SDT-7000 returns two descriptors and the second is
3272   used to set the size of partition 1 (this is what the SCSI-3 standard specifies).
3273   The following algorithm is used to accommodate both drives: if the number of
3274   partition size fields is greater than the maximum number of additional partitions
3275   in the mode page, the second field is used. Otherwise the first field is used.
3276
3277   For Seagate DDS drives the page length must be 8 when no partitions is defined
3278   and 10 when 1 partition is defined (information from Eric Lee Green). This is
3279   is acceptable also to some other old drives and enforced if the first partition
3280   size field is used for the first additional partition size.
3281 */
3282static int partition_tape(struct scsi_tape *STp, int size)
3283{
3284	int result;
3285	int pgo, psd_cnt, psdo;
3286	unsigned char *bp;
3287
3288	result = read_mode_page(STp, PART_PAGE, 0);
3289	if (result) {
3290		DEBC_printk(STp, "Can't read partition mode page.\n");
3291		return result;
3292	}
3293	/* The mode page is in the buffer. Let's modify it and write it. */
3294	bp = (STp->buffer)->b_data;
3295	pgo = MODE_HEADER_LENGTH + bp[MH_OFF_BDESCS_LENGTH];
3296	DEBC_printk(STp, "Partition page length is %d bytes.\n",
3297		    bp[pgo + MP_OFF_PAGE_LENGTH] + 2);
3298
3299	psd_cnt = (bp[pgo + MP_OFF_PAGE_LENGTH] + 2 - PART_PAGE_FIXED_LENGTH) / 2;
3300	psdo = pgo + PART_PAGE_FIXED_LENGTH;
3301	if (psd_cnt > bp[pgo + PP_OFF_MAX_ADD_PARTS]) {
3302		bp[psdo] = bp[psdo + 1] = 0xff;  /* Rest of the tape */
3303		psdo += 2;
3304	}
3305	memset(bp + psdo, 0, bp[pgo + PP_OFF_NBR_ADD_PARTS] * 2);
3306
3307	DEBC_printk(STp, "psd_cnt %d, max.parts %d, nbr_parts %d\n",
3308		    psd_cnt, bp[pgo + PP_OFF_MAX_ADD_PARTS],
3309		    bp[pgo + PP_OFF_NBR_ADD_PARTS]);
3310
3311	if (size <= 0) {
3312		bp[pgo + PP_OFF_NBR_ADD_PARTS] = 0;
3313		if (psd_cnt <= bp[pgo + PP_OFF_MAX_ADD_PARTS])
3314		    bp[pgo + MP_OFF_PAGE_LENGTH] = 6;
3315		DEBC_printk(STp, "Formatting tape with one partition.\n");
3316	} else {
3317		bp[psdo] = (size >> 8) & 0xff;
3318		bp[psdo + 1] = size & 0xff;
3319		bp[pgo + 3] = 1;
3320		if (bp[pgo + MP_OFF_PAGE_LENGTH] < 8)
3321		    bp[pgo + MP_OFF_PAGE_LENGTH] = 8;
3322		DEBC_printk(STp, "Formatting tape with two partitions "
3323			    "(1 = %d MB).\n", size);
3324	}
3325	bp[pgo + PP_OFF_PART_UNITS] = 0;
3326	bp[pgo + PP_OFF_RESERVED] = 0;
3327	bp[pgo + PP_OFF_FLAGS] = PP_BIT_IDP | PP_MSK_PSUM_MB;
3328
3329	result = write_mode_page(STp, PART_PAGE, 1);
3330	if (result) {
3331		st_printk(KERN_INFO, STp, "Partitioning of tape failed.\n");
3332		result = (-EIO);
3333	}
3334
3335	return result;
3336}
3337
3338
3339
3340/* The ioctl command */
3341static long st_ioctl(struct file *file, unsigned int cmd_in, unsigned long arg)
3342{
3343	int i, cmd_nr, cmd_type, bt;
3344	int retval = 0;
3345	unsigned int blk;
3346	struct scsi_tape *STp = file->private_data;
3347	struct st_modedef *STm;
3348	struct st_partstat *STps;
3349	void __user *p = (void __user *)arg;
3350
3351	if (mutex_lock_interruptible(&STp->lock))
3352		return -ERESTARTSYS;
3353
3354	DEB(
3355	if (debugging && !STp->in_use) {
3356		st_printk(ST_DEB_MSG, STp, "Incorrect device.\n");
3357		retval = (-EIO);
3358		goto out;
3359	} ) /* end DEB */
3360
3361	STm = &(STp->modes[STp->current_mode]);
3362	STps = &(STp->ps[STp->partition]);
3363
3364	/*
3365	 * If we are in the middle of error recovery, don't let anyone
3366	 * else try and use this device.  Also, if error recovery fails, it
3367	 * may try and take the device offline, in which case all further
3368	 * access to the device is prohibited.
3369	 */
3370	retval = scsi_nonblockable_ioctl(STp->device, cmd_in, p,
3371					file->f_flags & O_NDELAY);
3372	if (!scsi_block_when_processing_errors(STp->device) || retval != -ENODEV)
3373		goto out;
3374	retval = 0;
3375
3376	cmd_type = _IOC_TYPE(cmd_in);
3377	cmd_nr = _IOC_NR(cmd_in);
3378
3379	if (cmd_type == _IOC_TYPE(MTIOCTOP) && cmd_nr == _IOC_NR(MTIOCTOP)) {
3380		struct mtop mtc;
3381
3382		if (_IOC_SIZE(cmd_in) != sizeof(mtc)) {
3383			retval = (-EINVAL);
3384			goto out;
3385		}
3386
3387		i = copy_from_user(&mtc, p, sizeof(struct mtop));
3388		if (i) {
3389			retval = (-EFAULT);
3390			goto out;
3391		}
3392
3393		if (mtc.mt_op == MTSETDRVBUFFER && !capable(CAP_SYS_ADMIN)) {
3394			st_printk(KERN_WARNING, STp,
3395				  "MTSETDRVBUFFER only allowed for root.\n");
3396			retval = (-EPERM);
3397			goto out;
3398		}
3399		if (!STm->defined &&
3400		    (mtc.mt_op != MTSETDRVBUFFER &&
3401		     (mtc.mt_count & MT_ST_OPTIONS) == 0)) {
3402			retval = (-ENXIO);
3403			goto out;
3404		}
3405
3406		if (!STp->pos_unknown) {
3407
3408			if (STps->eof == ST_FM_HIT) {
3409				if (mtc.mt_op == MTFSF || mtc.mt_op == MTFSFM ||
3410                                    mtc.mt_op == MTEOM) {
3411					mtc.mt_count -= 1;
3412					if (STps->drv_file >= 0)
3413						STps->drv_file += 1;
3414				} else if (mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM) {
3415					mtc.mt_count += 1;
3416					if (STps->drv_file >= 0)
3417						STps->drv_file += 1;
3418				}
3419			}
3420
3421			if (mtc.mt_op == MTSEEK) {
3422				/* Old position must be restored if partition will be
3423                                   changed */
3424				i = !STp->can_partitions ||
3425				    (STp->new_partition != STp->partition);
3426			} else {
3427				i = mtc.mt_op == MTREW || mtc.mt_op == MTOFFL ||
3428				    mtc.mt_op == MTRETEN || mtc.mt_op == MTEOM ||
3429				    mtc.mt_op == MTLOCK || mtc.mt_op == MTLOAD ||
3430				    mtc.mt_op == MTFSF || mtc.mt_op == MTFSFM ||
3431				    mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM ||
3432				    mtc.mt_op == MTCOMPRESSION;
3433			}
3434			i = flush_buffer(STp, i);
3435			if (i < 0) {
3436				retval = i;
3437				goto out;
3438			}
3439			if (STps->rw == ST_WRITING &&
3440			    (mtc.mt_op == MTREW || mtc.mt_op == MTOFFL ||
3441			     mtc.mt_op == MTSEEK ||
3442			     mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM)) {
3443				i = st_int_ioctl(STp, MTWEOF, 1);
3444				if (i < 0) {
3445					retval = i;
3446					goto out;
3447				}
3448				if (mtc.mt_op == MTBSF || mtc.mt_op == MTBSFM)
3449					mtc.mt_count++;
3450				STps->rw = ST_IDLE;
3451			     }
3452
3453		} else {
3454			/*
3455			 * If there was a bus reset, block further access
3456			 * to this device.  If the user wants to rewind the tape,
3457			 * then reset the flag and allow access again.
3458			 */
3459			if (mtc.mt_op != MTREW &&
3460			    mtc.mt_op != MTOFFL &&
3461			    mtc.mt_op != MTRETEN &&
3462			    mtc.mt_op != MTERASE &&
3463			    mtc.mt_op != MTSEEK &&
3464			    mtc.mt_op != MTEOM) {
3465				retval = (-EIO);
3466				goto out;
3467			}
3468			reset_state(STp);
3469			/* remove this when the midlevel properly clears was_reset */
3470			STp->device->was_reset = 0;
3471		}
3472
3473		if (mtc.mt_op != MTNOP && mtc.mt_op != MTSETBLK &&
3474		    mtc.mt_op != MTSETDENSITY && mtc.mt_op != MTWSM &&
3475		    mtc.mt_op != MTSETDRVBUFFER && mtc.mt_op != MTSETPART)
3476			STps->rw = ST_IDLE;	/* Prevent automatic WEOF and fsf */
3477
3478		if (mtc.mt_op == MTOFFL && STp->door_locked != ST_UNLOCKED)
3479			do_door_lock(STp, 0);	/* Ignore result! */
3480
3481		if (mtc.mt_op == MTSETDRVBUFFER &&
3482		    (mtc.mt_count & MT_ST_OPTIONS) != 0) {
3483			retval = st_set_options(STp, mtc.mt_count);
3484			goto out;
3485		}
3486
3487		if (mtc.mt_op == MTSETPART) {
3488			if (!STp->can_partitions ||
3489			    mtc.mt_count < 0 || mtc.mt_count >= ST_NBR_PARTITIONS) {
3490				retval = (-EINVAL);
3491				goto out;
3492			}
3493			if (mtc.mt_count >= STp->nbr_partitions &&
3494			    (STp->nbr_partitions = nbr_partitions(STp)) < 0) {
3495				retval = (-EIO);
3496				goto out;
3497			}
3498			if (mtc.mt_count >= STp->nbr_partitions) {
3499				retval = (-EINVAL);
3500				goto out;
3501			}
3502			STp->new_partition = mtc.mt_count;
3503			retval = 0;
3504			goto out;
3505		}
3506
3507		if (mtc.mt_op == MTMKPART) {
3508			if (!STp->can_partitions) {
3509				retval = (-EINVAL);
3510				goto out;
3511			}
3512			if ((i = st_int_ioctl(STp, MTREW, 0)) < 0 ||
3513			    (i = partition_tape(STp, mtc.mt_count)) < 0) {
3514				retval = i;
3515				goto out;
3516			}
3517			for (i = 0; i < ST_NBR_PARTITIONS; i++) {
3518				STp->ps[i].rw = ST_IDLE;
3519				STp->ps[i].at_sm = 0;
3520				STp->ps[i].last_block_valid = 0;
3521			}
3522			STp->partition = STp->new_partition = 0;
3523			STp->nbr_partitions = 1;	/* Bad guess ?-) */
3524			STps->drv_block = STps->drv_file = 0;
3525			retval = 0;
3526			goto out;
3527		}
3528
3529		if (mtc.mt_op == MTSEEK) {
3530			i = set_location(STp, mtc.mt_count, STp->new_partition, 0);
3531			if (!STp->can_partitions)
3532				STp->ps[0].rw = ST_IDLE;
3533			retval = i;
3534			goto out;
3535		}
3536
3537		if (mtc.mt_op == MTUNLOAD || mtc.mt_op == MTOFFL) {
3538			retval = do_load_unload(STp, file, 0);
3539			goto out;
3540		}
3541
3542		if (mtc.mt_op == MTLOAD) {
3543			retval = do_load_unload(STp, file, max(1, mtc.mt_count));
3544			goto out;
3545		}
3546
3547		if (mtc.mt_op == MTLOCK || mtc.mt_op == MTUNLOCK) {
3548			retval = do_door_lock(STp, (mtc.mt_op == MTLOCK));
3549			goto out;
3550		}
3551
3552		if (STp->can_partitions && STp->ready == ST_READY &&
3553		    (i = switch_partition(STp)) < 0) {
3554			retval = i;
3555			goto out;
3556		}
3557
3558		if (mtc.mt_op == MTCOMPRESSION)
3559			retval = st_compression(STp, (mtc.mt_count & 1));
3560		else
3561			retval = st_int_ioctl(STp, mtc.mt_op, mtc.mt_count);
3562		goto out;
3563	}
3564	if (!STm->defined) {
3565		retval = (-ENXIO);
3566		goto out;
3567	}
3568
3569	if ((i = flush_buffer(STp, 0)) < 0) {
3570		retval = i;
3571		goto out;
3572	}
3573	if (STp->can_partitions &&
3574	    (i = switch_partition(STp)) < 0) {
3575		retval = i;
3576		goto out;
3577	}
3578
3579	if (cmd_type == _IOC_TYPE(MTIOCGET) && cmd_nr == _IOC_NR(MTIOCGET)) {
3580		struct mtget mt_status;
3581
3582		if (_IOC_SIZE(cmd_in) != sizeof(struct mtget)) {
3583			 retval = (-EINVAL);
3584			 goto out;
3585		}
3586
3587		mt_status.mt_type = STp->tape_type;
3588		mt_status.mt_dsreg =
3589		    ((STp->block_size << MT_ST_BLKSIZE_SHIFT) & MT_ST_BLKSIZE_MASK) |
3590		    ((STp->density << MT_ST_DENSITY_SHIFT) & MT_ST_DENSITY_MASK);
3591		mt_status.mt_blkno = STps->drv_block;
3592		mt_status.mt_fileno = STps->drv_file;
3593		if (STp->block_size != 0) {
3594			if (STps->rw == ST_WRITING)
3595				mt_status.mt_blkno +=
3596				    (STp->buffer)->buffer_bytes / STp->block_size;
3597			else if (STps->rw == ST_READING)
3598				mt_status.mt_blkno -=
3599                                        ((STp->buffer)->buffer_bytes +
3600                                         STp->block_size - 1) / STp->block_size;
3601		}
3602
3603		mt_status.mt_gstat = 0;
3604		if (STp->drv_write_prot)
3605			mt_status.mt_gstat |= GMT_WR_PROT(0xffffffff);
3606		if (mt_status.mt_blkno == 0) {
3607			if (mt_status.mt_fileno == 0)
3608				mt_status.mt_gstat |= GMT_BOT(0xffffffff);
3609			else
3610				mt_status.mt_gstat |= GMT_EOF(0xffffffff);
3611		}
3612		mt_status.mt_erreg = (STp->recover_reg << MT_ST_SOFTERR_SHIFT);
3613		mt_status.mt_resid = STp->partition;
3614		if (STps->eof == ST_EOM_OK || STps->eof == ST_EOM_ERROR)
3615			mt_status.mt_gstat |= GMT_EOT(0xffffffff);
3616		else if (STps->eof >= ST_EOM_OK)
3617			mt_status.mt_gstat |= GMT_EOD(0xffffffff);
3618		if (STp->density == 1)
3619			mt_status.mt_gstat |= GMT_D_800(0xffffffff);
3620		else if (STp->density == 2)
3621			mt_status.mt_gstat |= GMT_D_1600(0xffffffff);
3622		else if (STp->density == 3)
3623			mt_status.mt_gstat |= GMT_D_6250(0xffffffff);
3624		if (STp->ready == ST_READY)
3625			mt_status.mt_gstat |= GMT_ONLINE(0xffffffff);
3626		if (STp->ready == ST_NO_TAPE)
3627			mt_status.mt_gstat |= GMT_DR_OPEN(0xffffffff);
3628		if (STps->at_sm)
3629			mt_status.mt_gstat |= GMT_SM(0xffffffff);
3630		if (STm->do_async_writes ||
3631                    (STm->do_buffer_writes && STp->block_size != 0) ||
3632		    STp->drv_buffer != 0)
3633			mt_status.mt_gstat |= GMT_IM_REP_EN(0xffffffff);
3634		if (STp->cleaning_req)
3635			mt_status.mt_gstat |= GMT_CLN(0xffffffff);
3636
3637		i = copy_to_user(p, &mt_status, sizeof(struct mtget));
3638		if (i) {
3639			retval = (-EFAULT);
3640			goto out;
3641		}
3642
3643		STp->recover_reg = 0;		/* Clear after read */
3644		retval = 0;
3645		goto out;
3646	}			/* End of MTIOCGET */
3647	if (cmd_type == _IOC_TYPE(MTIOCPOS) && cmd_nr == _IOC_NR(MTIOCPOS)) {
3648		struct mtpos mt_pos;
3649		if (_IOC_SIZE(cmd_in) != sizeof(struct mtpos)) {
3650			 retval = (-EINVAL);
3651			 goto out;
3652		}
3653		if ((i = get_location(STp, &blk, &bt, 0)) < 0) {
3654			retval = i;
3655			goto out;
3656		}
3657		mt_pos.mt_blkno = blk;
3658		i = copy_to_user(p, &mt_pos, sizeof(struct mtpos));
3659		if (i)
3660			retval = (-EFAULT);
3661		goto out;
3662	}
3663	mutex_unlock(&STp->lock);
3664	switch (cmd_in) {
3665		case SCSI_IOCTL_GET_IDLUN:
3666		case SCSI_IOCTL_GET_BUS_NUMBER:
3667			break;
3668		default:
3669			if ((cmd_in == SG_IO ||
3670			     cmd_in == SCSI_IOCTL_SEND_COMMAND ||
3671			     cmd_in == CDROM_SEND_PACKET) &&
3672			    !capable(CAP_SYS_RAWIO))
3673				i = -EPERM;
3674			else
3675				i = scsi_cmd_ioctl(STp->disk->queue, STp->disk,
3676						   file->f_mode, cmd_in, p);
3677			if (i != -ENOTTY)
3678				return i;
3679			break;
3680	}
3681	retval = scsi_ioctl(STp->device, cmd_in, p);
3682	if (!retval && cmd_in == SCSI_IOCTL_STOP_UNIT) { /* unload */
3683		STp->rew_at_close = 0;
3684		STp->ready = ST_NO_TAPE;
3685	}
3686	return retval;
3687
3688 out:
3689	mutex_unlock(&STp->lock);
3690	return retval;
3691}
3692
3693#ifdef CONFIG_COMPAT
3694static long st_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
3695{
3696	struct scsi_tape *STp = file->private_data;
3697	struct scsi_device *sdev = STp->device;
3698	int ret = -ENOIOCTLCMD;
3699	if (sdev->host->hostt->compat_ioctl) {
3700
3701		ret = sdev->host->hostt->compat_ioctl(sdev, cmd, (void __user *)arg);
3702
3703	}
3704	return ret;
3705}
3706#endif
3707
3708
3709
3710/* Try to allocate a new tape buffer. Calling function must not hold
3711   dev_arr_lock. */
3712static struct st_buffer *new_tape_buffer(int need_dma, int max_sg)
3713{
3714	struct st_buffer *tb;
3715
3716	tb = kzalloc(sizeof(struct st_buffer), GFP_ATOMIC);
3717	if (!tb) {
3718		printk(KERN_NOTICE "st: Can't allocate new tape buffer.\n");
3719		return NULL;
3720	}
3721	tb->frp_segs = 0;
3722	tb->use_sg = max_sg;
3723	tb->dma = need_dma;
3724	tb->buffer_size = 0;
3725
3726	tb->reserved_pages = kzalloc(max_sg * sizeof(struct page *),
3727				     GFP_ATOMIC);
3728	if (!tb->reserved_pages) {
3729		kfree(tb);
3730		return NULL;
3731	}
3732
3733	return tb;
3734}
3735
3736
3737/* Try to allocate enough space in the tape buffer */
3738#define ST_MAX_ORDER 6
3739
3740static int enlarge_buffer(struct st_buffer * STbuffer, int new_size, int need_dma)
3741{
3742	int segs, max_segs, b_size, order, got;
3743	gfp_t priority;
3744
3745	if (new_size <= STbuffer->buffer_size)
3746		return 1;
3747
3748	if (STbuffer->buffer_size <= PAGE_SIZE)
3749		normalize_buffer(STbuffer);  /* Avoid extra segment */
3750
3751	max_segs = STbuffer->use_sg;
3752
3753	priority = GFP_KERNEL | __GFP_NOWARN;
3754	if (need_dma)
3755		priority |= GFP_DMA;
3756
3757	if (STbuffer->cleared)
3758		priority |= __GFP_ZERO;
3759
3760	if (STbuffer->frp_segs) {
3761		order = STbuffer->reserved_page_order;
3762		b_size = PAGE_SIZE << order;
3763	} else {
3764		for (b_size = PAGE_SIZE, order = 0;
3765		     order < ST_MAX_ORDER &&
3766			     max_segs * (PAGE_SIZE << order) < new_size;
3767		     order++, b_size *= 2)
3768			;  /* empty */
3769		STbuffer->reserved_page_order = order;
3770	}
3771	if (max_segs * (PAGE_SIZE << order) < new_size) {
3772		if (order == ST_MAX_ORDER)
3773			return 0;
3774		normalize_buffer(STbuffer);
3775		return enlarge_buffer(STbuffer, new_size, need_dma);
3776	}
3777
3778	for (segs = STbuffer->frp_segs, got = STbuffer->buffer_size;
3779	     segs < max_segs && got < new_size;) {
3780		struct page *page;
3781
3782		page = alloc_pages(priority, order);
3783		if (!page) {
3784			DEB(STbuffer->buffer_size = got);
3785			normalize_buffer(STbuffer);
3786			return 0;
3787		}
3788
3789		STbuffer->frp_segs += 1;
3790		got += b_size;
3791		STbuffer->buffer_size = got;
3792		STbuffer->reserved_pages[segs] = page;
3793		segs++;
3794	}
3795	STbuffer->b_data = page_address(STbuffer->reserved_pages[0]);
3796
3797	return 1;
3798}
3799
3800
3801/* Make sure that no data from previous user is in the internal buffer */
3802static void clear_buffer(struct st_buffer * st_bp)
3803{
3804	int i;
3805
3806	for (i=0; i < st_bp->frp_segs; i++)
3807		memset(page_address(st_bp->reserved_pages[i]), 0,
3808		       PAGE_SIZE << st_bp->reserved_page_order);
3809	st_bp->cleared = 1;
3810}
3811
3812
3813/* Release the extra buffer */
3814static void normalize_buffer(struct st_buffer * STbuffer)
3815{
3816	int i, order = STbuffer->reserved_page_order;
3817
3818	for (i = 0; i < STbuffer->frp_segs; i++) {
3819		__free_pages(STbuffer->reserved_pages[i], order);
3820		STbuffer->buffer_size -= (PAGE_SIZE << order);
3821	}
3822	STbuffer->frp_segs = 0;
3823	STbuffer->sg_segs = 0;
3824	STbuffer->reserved_page_order = 0;
3825	STbuffer->map_data.offset = 0;
3826}
3827
3828
3829/* Move data from the user buffer to the tape buffer. Returns zero (success) or
3830   negative error code. */
3831static int append_to_buffer(const char __user *ubp, struct st_buffer * st_bp, int do_count)
3832{
3833	int i, cnt, res, offset;
3834	int length = PAGE_SIZE << st_bp->reserved_page_order;
3835
3836	for (i = 0, offset = st_bp->buffer_bytes;
3837	     i < st_bp->frp_segs && offset >= length; i++)
3838		offset -= length;
3839	if (i == st_bp->frp_segs) {	/* Should never happen */
3840		printk(KERN_WARNING "st: append_to_buffer offset overflow.\n");
3841		return (-EIO);
3842	}
3843	for (; i < st_bp->frp_segs && do_count > 0; i++) {
3844		struct page *page = st_bp->reserved_pages[i];
3845		cnt = length - offset < do_count ? length - offset : do_count;
3846		res = copy_from_user(page_address(page) + offset, ubp, cnt);
3847		if (res)
3848			return (-EFAULT);
3849		do_count -= cnt;
3850		st_bp->buffer_bytes += cnt;
3851		ubp += cnt;
3852		offset = 0;
3853	}
3854	if (do_count) /* Should never happen */
3855		return (-EIO);
3856
3857	return 0;
3858}
3859
3860
3861/* Move data from the tape buffer to the user buffer. Returns zero (success) or
3862   negative error code. */
3863static int from_buffer(struct st_buffer * st_bp, char __user *ubp, int do_count)
3864{
3865	int i, cnt, res, offset;
3866	int length = PAGE_SIZE << st_bp->reserved_page_order;
3867
3868	for (i = 0, offset = st_bp->read_pointer;
3869	     i < st_bp->frp_segs && offset >= length; i++)
3870		offset -= length;
3871	if (i == st_bp->frp_segs) {	/* Should never happen */
3872		printk(KERN_WARNING "st: from_buffer offset overflow.\n");
3873		return (-EIO);
3874	}
3875	for (; i < st_bp->frp_segs && do_count > 0; i++) {
3876		struct page *page = st_bp->reserved_pages[i];
3877		cnt = length - offset < do_count ? length - offset : do_count;
3878		res = copy_to_user(ubp, page_address(page) + offset, cnt);
3879		if (res)
3880			return (-EFAULT);
3881		do_count -= cnt;
3882		st_bp->buffer_bytes -= cnt;
3883		st_bp->read_pointer += cnt;
3884		ubp += cnt;
3885		offset = 0;
3886	}
3887	if (do_count) /* Should never happen */
3888		return (-EIO);
3889
3890	return 0;
3891}
3892
3893
3894/* Move data towards start of buffer */
3895static void move_buffer_data(struct st_buffer * st_bp, int offset)
3896{
3897	int src_seg, dst_seg, src_offset = 0, dst_offset;
3898	int count, total;
3899	int length = PAGE_SIZE << st_bp->reserved_page_order;
3900
3901	if (offset == 0)
3902		return;
3903
3904	total=st_bp->buffer_bytes - offset;
3905	for (src_seg=0; src_seg < st_bp->frp_segs; src_seg++) {
3906		src_offset = offset;
3907		if (src_offset < length)
3908			break;
3909		offset -= length;
3910	}
3911
3912	st_bp->buffer_bytes = st_bp->read_pointer = total;
3913	for (dst_seg=dst_offset=0; total > 0; ) {
3914		struct page *dpage = st_bp->reserved_pages[dst_seg];
3915		struct page *spage = st_bp->reserved_pages[src_seg];
3916
3917		count = min(length - dst_offset, length - src_offset);
3918		memmove(page_address(dpage) + dst_offset,
3919			page_address(spage) + src_offset, count);
3920		src_offset += count;
3921		if (src_offset >= length) {
3922			src_seg++;
3923			src_offset = 0;
3924		}
3925		dst_offset += count;
3926		if (dst_offset >= length) {
3927			dst_seg++;
3928			dst_offset = 0;
3929		}
3930		total -= count;
3931	}
3932}
3933
3934/* Validate the options from command line or module parameters */
3935static void validate_options(void)
3936{
3937	if (buffer_kbs > 0)
3938		st_fixed_buffer_size = buffer_kbs * ST_KILOBYTE;
3939	if (max_sg_segs >= ST_FIRST_SG)
3940		st_max_sg_segs = max_sg_segs;
3941}
3942
3943#ifndef MODULE
3944/* Set the boot options. Syntax is defined in Documenation/scsi/st.txt.
3945 */
3946static int __init st_setup(char *str)
3947{
3948	int i, len, ints[5];
3949	char *stp;
3950
3951	stp = get_options(str, ARRAY_SIZE(ints), ints);
3952
3953	if (ints[0] > 0) {
3954		for (i = 0; i < ints[0] && i < ARRAY_SIZE(parms); i++)
3955			if (parms[i].val)
3956				*parms[i].val = ints[i + 1];
3957	} else {
3958		while (stp != NULL) {
3959			for (i = 0; i < ARRAY_SIZE(parms); i++) {
3960				len = strlen(parms[i].name);
3961				if (!strncmp(stp, parms[i].name, len) &&
3962				    (*(stp + len) == ':' || *(stp + len) == '=')) {
3963					if (parms[i].val)
3964						*parms[i].val =
3965							simple_strtoul(stp + len + 1, NULL, 0);
3966					else
3967						printk(KERN_WARNING "st: Obsolete parameter %s\n",
3968						       parms[i].name);
3969					break;
3970				}
3971			}
3972			if (i >= ARRAY_SIZE(parms))
3973				 printk(KERN_WARNING "st: invalid parameter in '%s'\n",
3974					stp);
3975			stp = strchr(stp, ',');
3976			if (stp)
3977				stp++;
3978		}
3979	}
3980
3981	validate_options();
3982
3983	return 1;
3984}
3985
3986__setup("st=", st_setup);
3987
3988#endif
3989
3990static const struct file_operations st_fops =
3991{
3992	.owner =	THIS_MODULE,
3993	.read =		st_read,
3994	.write =	st_write,
3995	.unlocked_ioctl = st_ioctl,
3996#ifdef CONFIG_COMPAT
3997	.compat_ioctl = st_compat_ioctl,
3998#endif
3999	.open =		st_open,
4000	.flush =	st_flush,
4001	.release =	st_release,
4002	.llseek =	noop_llseek,
4003};
4004
4005static int create_one_cdev(struct scsi_tape *tape, int mode, int rew)
4006{
4007	int i, error;
4008	dev_t cdev_devno;
4009	struct cdev *cdev;
4010	struct device *dev;
4011	struct st_modedef *STm = &(tape->modes[mode]);
4012	char name[10];
4013	int dev_num = tape->index;
4014
4015	cdev_devno = MKDEV(SCSI_TAPE_MAJOR, TAPE_MINOR(dev_num, mode, rew));
4016
4017	cdev = cdev_alloc();
4018	if (!cdev) {
4019		pr_err("st%d: out of memory. Device not attached.\n", dev_num);
4020		error = -ENOMEM;
4021		goto out;
4022	}
4023	cdev->owner = THIS_MODULE;
4024	cdev->ops = &st_fops;
4025
4026	error = cdev_add(cdev, cdev_devno, 1);
4027	if (error) {
4028		pr_err("st%d: Can't add %s-rewind mode %d\n", dev_num,
4029		       rew ? "non" : "auto", mode);
4030		pr_err("st%d: Device not attached.\n", dev_num);
4031		goto out_free;
4032	}
4033	STm->cdevs[rew] = cdev;
4034
4035	i = mode << (4 - ST_NBR_MODE_BITS);
4036	snprintf(name, 10, "%s%s%s", rew ? "n" : "",
4037		 tape->disk->disk_name, st_formats[i]);
4038
4039	dev = device_create(&st_sysfs_class, &tape->device->sdev_gendev,
4040			    cdev_devno, &tape->modes[mode], "%s", name);
4041	if (IS_ERR(dev)) {
4042		pr_err("st%d: device_create failed\n", dev_num);
4043		error = PTR_ERR(dev);
4044		goto out_free;
4045	}
4046
4047	STm->devs[rew] = dev;
4048
4049	return 0;
4050out_free:
4051	cdev_del(STm->cdevs[rew]);
4052	STm->cdevs[rew] = NULL;
4053out:
4054	return error;
4055}
4056
4057static int create_cdevs(struct scsi_tape *tape)
4058{
4059	int mode, error;
4060	for (mode = 0; mode < ST_NBR_MODES; ++mode) {
4061		error = create_one_cdev(tape, mode, 0);
4062		if (error)
4063			return error;
4064		error = create_one_cdev(tape, mode, 1);
4065		if (error)
4066			return error;
4067	}
4068
4069	return sysfs_create_link(&tape->device->sdev_gendev.kobj,
4070				 &tape->modes[0].devs[0]->kobj, "tape");
4071}
4072
4073static void remove_cdevs(struct scsi_tape *tape)
4074{
4075	int mode, rew;
4076	sysfs_remove_link(&tape->device->sdev_gendev.kobj, "tape");
4077	for (mode = 0; mode < ST_NBR_MODES; mode++) {
4078		struct st_modedef *STm = &(tape->modes[mode]);
4079		for (rew = 0; rew < 2; rew++) {
4080			if (STm->cdevs[rew])
4081				cdev_del(STm->cdevs[rew]);
4082			if (STm->devs[rew])
4083				device_unregister(STm->devs[rew]);
4084		}
4085	}
4086}
4087
4088static int st_probe(struct device *dev)
4089{
4090	struct scsi_device *SDp = to_scsi_device(dev);
4091	struct gendisk *disk = NULL;
4092	struct scsi_tape *tpnt = NULL;
4093	struct st_modedef *STm;
4094	struct st_partstat *STps;
4095	struct st_buffer *buffer;
4096	int i, error;
4097	char *stp;
4098
4099	if (SDp->type != TYPE_TAPE)
4100		return -ENODEV;
4101	if ((stp = st_incompatible(SDp))) {
4102		sdev_printk(KERN_INFO, SDp, "Found incompatible tape\n");
4103		sdev_printk(KERN_INFO, SDp,
4104			    "st: The suggested driver is %s.\n", stp);
4105		return -ENODEV;
4106	}
4107
4108	scsi_autopm_get_device(SDp);
4109	i = queue_max_segments(SDp->request_queue);
4110	if (st_max_sg_segs < i)
4111		i = st_max_sg_segs;
4112	buffer = new_tape_buffer((SDp->host)->unchecked_isa_dma, i);
4113	if (buffer == NULL) {
4114		sdev_printk(KERN_ERR, SDp,
4115			    "st: Can't allocate new tape buffer. "
4116			    "Device not attached.\n");
4117		goto out;
4118	}
4119
4120	disk = alloc_disk(1);
4121	if (!disk) {
4122		sdev_printk(KERN_ERR, SDp,
4123			    "st: out of memory. Device not attached.\n");
4124		goto out_buffer_free;
4125	}
4126
4127	tpnt = kzalloc(sizeof(struct scsi_tape), GFP_ATOMIC);
4128	if (tpnt == NULL) {
4129		sdev_printk(KERN_ERR, SDp,
4130			    "st: Can't allocate device descriptor.\n");
4131		goto out_put_disk;
4132	}
4133	kref_init(&tpnt->kref);
4134	tpnt->disk = disk;
4135	disk->private_data = &tpnt->driver;
4136	disk->queue = SDp->request_queue;
4137	/* SCSI tape doesn't register this gendisk via add_disk().  Manually
4138	 * take queue reference that release_disk() expects. */
4139	if (!blk_get_queue(disk->queue))
4140		goto out_put_disk;
4141	tpnt->driver = &st_template;
4142
4143	tpnt->device = SDp;
4144	if (SDp->scsi_level <= 2)
4145		tpnt->tape_type = MT_ISSCSI1;
4146	else
4147		tpnt->tape_type = MT_ISSCSI2;
4148
4149	tpnt->buffer = buffer;
4150	tpnt->buffer->last_SRpnt = NULL;
4151
4152	tpnt->inited = 0;
4153	tpnt->dirty = 0;
4154	tpnt->in_use = 0;
4155	tpnt->drv_buffer = 1;	/* Try buffering if no mode sense */
4156	tpnt->restr_dma = (SDp->host)->unchecked_isa_dma;
4157	tpnt->use_pf = (SDp->scsi_level >= SCSI_2);
4158	tpnt->density = 0;
4159	tpnt->do_auto_lock = ST_AUTO_LOCK;
4160	tpnt->can_bsr = (SDp->scsi_level > 2 ? 1 : ST_IN_FILE_POS); /* BSR mandatory in SCSI3 */
4161	tpnt->can_partitions = 0;
4162	tpnt->two_fm = ST_TWO_FM;
4163	tpnt->fast_mteom = ST_FAST_MTEOM;
4164	tpnt->scsi2_logical = ST_SCSI2LOGICAL;
4165	tpnt->sili = ST_SILI;
4166	tpnt->immediate = ST_NOWAIT;
4167	tpnt->immediate_filemark = 0;
4168	tpnt->default_drvbuffer = 0xff;		/* No forced buffering */
4169	tpnt->partition = 0;
4170	tpnt->new_partition = 0;
4171	tpnt->nbr_partitions = 0;
4172	blk_queue_rq_timeout(tpnt->device->request_queue, ST_TIMEOUT);
4173	tpnt->long_timeout = ST_LONG_TIMEOUT;
4174	tpnt->try_dio = try_direct_io && !SDp->host->unchecked_isa_dma;
4175
4176	for (i = 0; i < ST_NBR_MODES; i++) {
4177		STm = &(tpnt->modes[i]);
4178		STm->defined = 0;
4179		STm->sysv = ST_SYSV;
4180		STm->defaults_for_writes = 0;
4181		STm->do_async_writes = ST_ASYNC_WRITES;
4182		STm->do_buffer_writes = ST_BUFFER_WRITES;
4183		STm->do_read_ahead = ST_READ_AHEAD;
4184		STm->default_compression = ST_DONT_TOUCH;
4185		STm->default_blksize = (-1);	/* No forced size */
4186		STm->default_density = (-1);	/* No forced density */
4187		STm->tape = tpnt;
4188	}
4189
4190	for (i = 0; i < ST_NBR_PARTITIONS; i++) {
4191		STps = &(tpnt->ps[i]);
4192		STps->rw = ST_IDLE;
4193		STps->eof = ST_NOEOF;
4194		STps->at_sm = 0;
4195		STps->last_block_valid = 0;
4196		STps->drv_block = (-1);
4197		STps->drv_file = (-1);
4198	}
4199
4200	tpnt->current_mode = 0;
4201	tpnt->modes[0].defined = 1;
4202
4203	tpnt->density_changed = tpnt->compression_changed =
4204	    tpnt->blksize_changed = 0;
4205	mutex_init(&tpnt->lock);
4206
4207	idr_preload(GFP_KERNEL);
4208	spin_lock(&st_index_lock);
4209	error = idr_alloc(&st_index_idr, tpnt, 0, ST_MAX_TAPES + 1, GFP_NOWAIT);
4210	spin_unlock(&st_index_lock);
4211	idr_preload_end();
4212	if (error < 0) {
4213		pr_warn("st: idr allocation failed: %d\n", error);
4214		goto out_put_queue;
4215	}
4216	tpnt->index = error;
4217	sprintf(disk->disk_name, "st%d", tpnt->index);
4218
4219	dev_set_drvdata(dev, tpnt);
4220
4221
4222	error = create_cdevs(tpnt);
4223	if (error)
4224		goto out_remove_devs;
4225	scsi_autopm_put_device(SDp);
4226
4227	sdev_printk(KERN_NOTICE, SDp,
4228		    "Attached scsi tape %s\n", tape_name(tpnt));
4229	sdev_printk(KERN_INFO, SDp, "%s: try direct i/o: %s (alignment %d B)\n",
4230		    tape_name(tpnt), tpnt->try_dio ? "yes" : "no",
4231		    queue_dma_alignment(SDp->request_queue) + 1);
4232
4233	return 0;
4234
4235out_remove_devs:
4236	remove_cdevs(tpnt);
4237	spin_lock(&st_index_lock);
4238	idr_remove(&st_index_idr, tpnt->index);
4239	spin_unlock(&st_index_lock);
4240out_put_queue:
4241	blk_put_queue(disk->queue);
4242out_put_disk:
4243	put_disk(disk);
4244	kfree(tpnt);
4245out_buffer_free:
4246	kfree(buffer);
4247out:
4248	scsi_autopm_put_device(SDp);
4249	return -ENODEV;
4250};
4251
4252
4253static int st_remove(struct device *dev)
4254{
4255	struct scsi_tape *tpnt = dev_get_drvdata(dev);
4256	int index = tpnt->index;
4257
4258	scsi_autopm_get_device(to_scsi_device(dev));
4259	remove_cdevs(tpnt);
4260
4261	mutex_lock(&st_ref_mutex);
4262	kref_put(&tpnt->kref, scsi_tape_release);
4263	mutex_unlock(&st_ref_mutex);
4264	spin_lock(&st_index_lock);
4265	idr_remove(&st_index_idr, index);
4266	spin_unlock(&st_index_lock);
4267	return 0;
4268}
4269
4270/**
4271 *      scsi_tape_release - Called to free the Scsi_Tape structure
4272 *      @kref: pointer to embedded kref
4273 *
4274 *      st_ref_mutex must be held entering this routine.  Because it is
4275 *      called on last put, you should always use the scsi_tape_get()
4276 *      scsi_tape_put() helpers which manipulate the semaphore directly
4277 *      and never do a direct kref_put().
4278 **/
4279static void scsi_tape_release(struct kref *kref)
4280{
4281	struct scsi_tape *tpnt = to_scsi_tape(kref);
4282	struct gendisk *disk = tpnt->disk;
4283
4284	tpnt->device = NULL;
4285
4286	if (tpnt->buffer) {
4287		normalize_buffer(tpnt->buffer);
4288		kfree(tpnt->buffer->reserved_pages);
4289		kfree(tpnt->buffer);
4290	}
4291
4292	disk->private_data = NULL;
4293	put_disk(disk);
4294	kfree(tpnt);
4295	return;
4296}
4297
4298static struct class st_sysfs_class = {
4299	.name = "scsi_tape",
4300	.dev_groups = st_dev_groups,
4301};
4302
4303static int __init init_st(void)
4304{
4305	int err;
4306
4307	validate_options();
4308
4309	printk(KERN_INFO "st: Version %s, fixed bufsize %d, s/g segs %d\n",
4310		verstr, st_fixed_buffer_size, st_max_sg_segs);
4311
4312	err = class_register(&st_sysfs_class);
4313	if (err) {
4314		pr_err("Unable register sysfs class for SCSI tapes\n");
4315		return err;
4316	}
4317
4318	err = register_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
4319				     ST_MAX_TAPE_ENTRIES, "st");
4320	if (err) {
4321		printk(KERN_ERR "Unable to get major %d for SCSI tapes\n",
4322		       SCSI_TAPE_MAJOR);
4323		goto err_class;
4324	}
4325
4326	err = scsi_register_driver(&st_template.gendrv);
4327	if (err)
4328		goto err_chrdev;
4329
4330	err = do_create_sysfs_files();
4331	if (err)
4332		goto err_scsidrv;
4333
4334	return 0;
4335
4336err_scsidrv:
4337	scsi_unregister_driver(&st_template.gendrv);
4338err_chrdev:
4339	unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
4340				 ST_MAX_TAPE_ENTRIES);
4341err_class:
4342	class_unregister(&st_sysfs_class);
4343	return err;
4344}
4345
4346static void __exit exit_st(void)
4347{
4348	do_remove_sysfs_files();
4349	scsi_unregister_driver(&st_template.gendrv);
4350	unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
4351				 ST_MAX_TAPE_ENTRIES);
4352	class_unregister(&st_sysfs_class);
4353	printk(KERN_INFO "st: Unloaded.\n");
4354}
4355
4356module_init(init_st);
4357module_exit(exit_st);
4358
4359
4360/* The sysfs driver interface. Read-only at the moment */
4361static ssize_t st_try_direct_io_show(struct device_driver *ddp, char *buf)
4362{
4363	return snprintf(buf, PAGE_SIZE, "%d\n", try_direct_io);
4364}
4365static DRIVER_ATTR(try_direct_io, S_IRUGO, st_try_direct_io_show, NULL);
4366
4367static ssize_t st_fixed_buffer_size_show(struct device_driver *ddp, char *buf)
4368{
4369	return snprintf(buf, PAGE_SIZE, "%d\n", st_fixed_buffer_size);
4370}
4371static DRIVER_ATTR(fixed_buffer_size, S_IRUGO, st_fixed_buffer_size_show, NULL);
4372
4373static ssize_t st_max_sg_segs_show(struct device_driver *ddp, char *buf)
4374{
4375	return snprintf(buf, PAGE_SIZE, "%d\n", st_max_sg_segs);
4376}
4377static DRIVER_ATTR(max_sg_segs, S_IRUGO, st_max_sg_segs_show, NULL);
4378
4379static ssize_t st_version_show(struct device_driver *ddd, char *buf)
4380{
4381	return snprintf(buf, PAGE_SIZE, "[%s]\n", verstr);
4382}
4383static DRIVER_ATTR(version, S_IRUGO, st_version_show, NULL);
4384
4385static int do_create_sysfs_files(void)
4386{
4387	struct device_driver *sysfs = &st_template.gendrv;
4388	int err;
4389
4390	err = driver_create_file(sysfs, &driver_attr_try_direct_io);
4391	if (err)
4392		return err;
4393	err = driver_create_file(sysfs, &driver_attr_fixed_buffer_size);
4394	if (err)
4395		goto err_try_direct_io;
4396	err = driver_create_file(sysfs, &driver_attr_max_sg_segs);
4397	if (err)
4398		goto err_attr_fixed_buf;
4399	err = driver_create_file(sysfs, &driver_attr_version);
4400	if (err)
4401		goto err_attr_max_sg;
4402
4403	return 0;
4404
4405err_attr_max_sg:
4406	driver_remove_file(sysfs, &driver_attr_max_sg_segs);
4407err_attr_fixed_buf:
4408	driver_remove_file(sysfs, &driver_attr_fixed_buffer_size);
4409err_try_direct_io:
4410	driver_remove_file(sysfs, &driver_attr_try_direct_io);
4411	return err;
4412}
4413
4414static void do_remove_sysfs_files(void)
4415{
4416	struct device_driver *sysfs = &st_template.gendrv;
4417
4418	driver_remove_file(sysfs, &driver_attr_version);
4419	driver_remove_file(sysfs, &driver_attr_max_sg_segs);
4420	driver_remove_file(sysfs, &driver_attr_fixed_buffer_size);
4421	driver_remove_file(sysfs, &driver_attr_try_direct_io);
4422}
4423
4424/* The sysfs simple class interface */
4425static ssize_t
4426defined_show(struct device *dev, struct device_attribute *attr, char *buf)
4427{
4428	struct st_modedef *STm = dev_get_drvdata(dev);
4429	ssize_t l = 0;
4430
4431	l = snprintf(buf, PAGE_SIZE, "%d\n", STm->defined);
4432	return l;
4433}
4434static DEVICE_ATTR_RO(defined);
4435
4436static ssize_t
4437default_blksize_show(struct device *dev, struct device_attribute *attr,
4438		     char *buf)
4439{
4440	struct st_modedef *STm = dev_get_drvdata(dev);
4441	ssize_t l = 0;
4442
4443	l = snprintf(buf, PAGE_SIZE, "%d\n", STm->default_blksize);
4444	return l;
4445}
4446static DEVICE_ATTR_RO(default_blksize);
4447
4448static ssize_t
4449default_density_show(struct device *dev, struct device_attribute *attr,
4450		     char *buf)
4451{
4452	struct st_modedef *STm = dev_get_drvdata(dev);
4453	ssize_t l = 0;
4454	char *fmt;
4455
4456	fmt = STm->default_density >= 0 ? "0x%02x\n" : "%d\n";
4457	l = snprintf(buf, PAGE_SIZE, fmt, STm->default_density);
4458	return l;
4459}
4460static DEVICE_ATTR_RO(default_density);
4461
4462static ssize_t
4463default_compression_show(struct device *dev, struct device_attribute *attr,
4464			 char *buf)
4465{
4466	struct st_modedef *STm = dev_get_drvdata(dev);
4467	ssize_t l = 0;
4468
4469	l = snprintf(buf, PAGE_SIZE, "%d\n", STm->default_compression - 1);
4470	return l;
4471}
4472static DEVICE_ATTR_RO(default_compression);
4473
4474static ssize_t
4475options_show(struct device *dev, struct device_attribute *attr, char *buf)
4476{
4477	struct st_modedef *STm = dev_get_drvdata(dev);
4478	struct scsi_tape *STp = STm->tape;
4479	int options;
4480	ssize_t l = 0;
4481
4482	options = STm->do_buffer_writes ? MT_ST_BUFFER_WRITES : 0;
4483	options |= STm->do_async_writes ? MT_ST_ASYNC_WRITES : 0;
4484	options |= STm->do_read_ahead ? MT_ST_READ_AHEAD : 0;
4485	DEB( options |= debugging ? MT_ST_DEBUGGING : 0 );
4486	options |= STp->two_fm ? MT_ST_TWO_FM : 0;
4487	options |= STp->fast_mteom ? MT_ST_FAST_MTEOM : 0;
4488	options |= STm->defaults_for_writes ? MT_ST_DEF_WRITES : 0;
4489	options |= STp->can_bsr ? MT_ST_CAN_BSR : 0;
4490	options |= STp->omit_blklims ? MT_ST_NO_BLKLIMS : 0;
4491	options |= STp->can_partitions ? MT_ST_CAN_PARTITIONS : 0;
4492	options |= STp->scsi2_logical ? MT_ST_SCSI2LOGICAL : 0;
4493	options |= STm->sysv ? MT_ST_SYSV : 0;
4494	options |= STp->immediate ? MT_ST_NOWAIT : 0;
4495	options |= STp->immediate_filemark ? MT_ST_NOWAIT_EOF : 0;
4496	options |= STp->sili ? MT_ST_SILI : 0;
4497
4498	l = snprintf(buf, PAGE_SIZE, "0x%08x\n", options);
4499	return l;
4500}
4501static DEVICE_ATTR_RO(options);
4502
4503static struct attribute *st_dev_attrs[] = {
4504	&dev_attr_defined.attr,
4505	&dev_attr_default_blksize.attr,
4506	&dev_attr_default_density.attr,
4507	&dev_attr_default_compression.attr,
4508	&dev_attr_options.attr,
4509	NULL,
4510};
4511ATTRIBUTE_GROUPS(st_dev);
4512
4513/* The following functions may be useful for a larger audience. */
4514static int sgl_map_user_pages(struct st_buffer *STbp,
4515			      const unsigned int max_pages, unsigned long uaddr,
4516			      size_t count, int rw)
4517{
4518	unsigned long end = (uaddr + count + PAGE_SIZE - 1) >> PAGE_SHIFT;
4519	unsigned long start = uaddr >> PAGE_SHIFT;
4520	const int nr_pages = end - start;
4521	int res, i, j;
4522	struct page **pages;
4523	struct rq_map_data *mdata = &STbp->map_data;
4524
4525	/* User attempted Overflow! */
4526	if ((uaddr + count) < uaddr)
4527		return -EINVAL;
4528
4529	/* Too big */
4530        if (nr_pages > max_pages)
4531		return -ENOMEM;
4532
4533	/* Hmm? */
4534	if (count == 0)
4535		return 0;
4536
4537	if ((pages = kmalloc(max_pages * sizeof(*pages), GFP_KERNEL)) == NULL)
4538		return -ENOMEM;
4539
4540        /* Try to fault in all of the necessary pages */
4541	down_read(&current->mm->mmap_sem);
4542        /* rw==READ means read from drive, write into memory area */
4543	res = get_user_pages(
4544		current,
4545		current->mm,
4546		uaddr,
4547		nr_pages,
4548		rw == READ,
4549		0, /* don't force */
4550		pages,
4551		NULL);
4552	up_read(&current->mm->mmap_sem);
4553
4554	/* Errors and no page mapped should return here */
4555	if (res < nr_pages)
4556		goto out_unmap;
4557
4558        for (i=0; i < nr_pages; i++) {
4559                /* FIXME: flush superflous for rw==READ,
4560                 * probably wrong function for rw==WRITE
4561                 */
4562		flush_dcache_page(pages[i]);
4563        }
4564
4565	mdata->offset = uaddr & ~PAGE_MASK;
4566	STbp->mapped_pages = pages;
4567
4568	return nr_pages;
4569 out_unmap:
4570	if (res > 0) {
4571		for (j=0; j < res; j++)
4572			page_cache_release(pages[j]);
4573		res = 0;
4574	}
4575	kfree(pages);
4576	return res;
4577}
4578
4579
4580/* And unmap them... */
4581static int sgl_unmap_user_pages(struct st_buffer *STbp,
4582				const unsigned int nr_pages, int dirtied)
4583{
4584	int i;
4585
4586	for (i=0; i < nr_pages; i++) {
4587		struct page *page = STbp->mapped_pages[i];
4588
4589		if (dirtied)
4590			SetPageDirty(page);
4591		/* FIXME: cache flush missing for rw==READ
4592		 * FIXME: call the correct reference counting function
4593		 */
4594		page_cache_release(page);
4595	}
4596	kfree(STbp->mapped_pages);
4597	STbp->mapped_pages = NULL;
4598
4599	return 0;
4600}
4601