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