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