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