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