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