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