xref: /openbmc/linux/drivers/scsi/st.c (revision 2f0754f2)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3    SCSI Tape Driver for Linux version 1.1 and newer. See the accompanying
4    file Documentation/scsi/st.rst for more information.
5 
6    History:
7    Rewritten from Dwayne Forsyth's SCSI tape driver by Kai Makisara.
8    Contribution and ideas from several people including (in alphabetical
9    order) Klaus Ehrenfried, Eugene Exarevsky, Eric Lee Green, Wolfgang Denk,
10    Steve Hirsch, Andreas Koppenh"ofer, Michael Leodolter, Eyal Lebedinsky,
11    Michael Schaefer, J"org Weule, and Eric Youngdale.
12 
13    Copyright 1992 - 2016 Kai Makisara
14    email Kai.Makisara@kolumbus.fi
15 
16    Some small formal changes - aeb, 950809
17 
18    Last modified: 18-JAN-1998 Richard Gooch <rgooch@atnf.csiro.au> Devfs support
19  */
20 
21 static const char *verstr = "20160209";
22 
23 #include <linux/module.h>
24 
25 #include <linux/compat.h>
26 #include <linux/fs.h>
27 #include <linux/kernel.h>
28 #include <linux/sched/signal.h>
29 #include <linux/mm.h>
30 #include <linux/init.h>
31 #include <linux/string.h>
32 #include <linux/slab.h>
33 #include <linux/errno.h>
34 #include <linux/mtio.h>
35 #include <linux/major.h>
36 #include <linux/cdrom.h>
37 #include <linux/ioctl.h>
38 #include <linux/fcntl.h>
39 #include <linux/spinlock.h>
40 #include <linux/blkdev.h>
41 #include <linux/moduleparam.h>
42 #include <linux/cdev.h>
43 #include <linux/idr.h>
44 #include <linux/delay.h>
45 #include <linux/mutex.h>
46 
47 #include <linux/uaccess.h>
48 #include <asm/dma.h>
49 #include <asm/unaligned.h>
50 
51 #include <scsi/scsi.h>
52 #include <scsi/scsi_dbg.h>
53 #include <scsi/scsi_device.h>
54 #include <scsi/scsi_driver.h>
55 #include <scsi/scsi_eh.h>
56 #include <scsi/scsi_host.h>
57 #include <scsi/scsi_ioctl.h>
58 #include <scsi/sg.h>
59 
60 
61 /* The driver prints some debugging information on the console if DEBUG
62    is defined and non-zero. */
63 #define DEBUG 1
64 #define NO_DEBUG 0
65 
66 #define ST_DEB_MSG  KERN_NOTICE
67 #if DEBUG
68 /* The message level for the debug messages is currently set to KERN_NOTICE
69    so that people can easily see the messages. Later when the debugging messages
70    in the drivers are more widely classified, this may be changed to KERN_DEBUG. */
71 #define DEB(a) a
72 #define DEBC(a) if (debugging) { a ; }
73 #else
74 #define DEB(a)
75 #define DEBC(a)
76 #endif
77 
78 #define ST_KILOBYTE 1024
79 
80 #include "st_options.h"
81 #include "st.h"
82 
83 static int buffer_kbs;
84 static int max_sg_segs;
85 static int try_direct_io = TRY_DIRECT_IO;
86 static int try_rdio = 1;
87 static int try_wdio = 1;
88 static int debug_flag;
89 
90 static struct class st_sysfs_class;
91 static const struct attribute_group *st_dev_groups[];
92 static const struct attribute_group *st_drv_groups[];
93 
94 MODULE_AUTHOR("Kai Makisara");
95 MODULE_DESCRIPTION("SCSI tape (st) driver");
96 MODULE_LICENSE("GPL");
97 MODULE_ALIAS_CHARDEV_MAJOR(SCSI_TAPE_MAJOR);
98 MODULE_ALIAS_SCSI_DEVICE(TYPE_TAPE);
99 
100 /* Set 'perm' (4th argument) to 0 to disable module_param's definition
101  * of sysfs parameters (which module_param doesn't yet support).
102  * Sysfs parameters defined explicitly later.
103  */
104 module_param_named(buffer_kbs, buffer_kbs, int, 0);
105 MODULE_PARM_DESC(buffer_kbs, "Default driver buffer size for fixed block mode (KB; 32)");
106 module_param_named(max_sg_segs, max_sg_segs, int, 0);
107 MODULE_PARM_DESC(max_sg_segs, "Maximum number of scatter/gather segments to use (256)");
108 module_param_named(try_direct_io, try_direct_io, int, 0);
109 MODULE_PARM_DESC(try_direct_io, "Try direct I/O between user buffer and tape drive (1)");
110 module_param_named(debug_flag, debug_flag, int, 0);
111 MODULE_PARM_DESC(debug_flag, "Enable DEBUG, same as setting debugging=1");
112 
113 
114 /* Extra parameters for testing */
115 module_param_named(try_rdio, try_rdio, int, 0);
116 MODULE_PARM_DESC(try_rdio, "Try direct read i/o when possible");
117 module_param_named(try_wdio, try_wdio, int, 0);
118 MODULE_PARM_DESC(try_wdio, "Try direct write i/o when possible");
119 
120 #ifndef MODULE
121 static int write_threshold_kbs;  /* retained for compatibility */
122 static struct st_dev_parm {
123 	char *name;
124 	int *val;
125 } parms[] __initdata = {
126 	{
127 		"buffer_kbs", &buffer_kbs
128 	},
129 	{       /* Retained for compatibility with 2.4 */
130 		"write_threshold_kbs", &write_threshold_kbs
131 	},
132 	{
133 		"max_sg_segs", NULL
134 	},
135 	{
136 		"try_direct_io", &try_direct_io
137 	},
138 	{
139 		"debug_flag", &debug_flag
140 	}
141 };
142 #endif
143 
144 /* Restrict the number of modes so that names for all are assigned */
145 #if ST_NBR_MODES > 16
146 #error "Maximum number of modes is 16"
147 #endif
148 /* Bit reversed order to get same names for same minors with all
149    mode counts */
150 static const char *st_formats[] = {
151 	"",  "r", "k", "s", "l", "t", "o", "u",
152 	"m", "v", "p", "x", "a", "y", "q", "z"};
153 
154 /* The default definitions have been moved to st_options.h */
155 
156 #define ST_FIXED_BUFFER_SIZE (ST_FIXED_BUFFER_BLOCKS * ST_KILOBYTE)
157 
158 /* The buffer size should fit into the 24 bits for length in the
159    6-byte SCSI read and write commands. */
160 #if ST_FIXED_BUFFER_SIZE >= (2 << 24 - 1)
161 #error "Buffer size should not exceed (2 << 24 - 1) bytes!"
162 #endif
163 
164 static int debugging = DEBUG;
165 
166 #define MAX_RETRIES 0
167 #define MAX_WRITE_RETRIES 0
168 #define MAX_READY_RETRIES 0
169 #define NO_TAPE  NOT_READY
170 
171 #define ST_TIMEOUT (900 * HZ)
172 #define ST_LONG_TIMEOUT (14000 * HZ)
173 
174 /* Remove mode bits and auto-rewind bit (7) */
175 #define TAPE_NR(x) ( ((iminor(x) & ~255) >> (ST_NBR_MODE_BITS + 1)) | \
176 	(iminor(x) & ((1 << ST_MODE_SHIFT)-1)))
177 #define TAPE_MODE(x) ((iminor(x) & ST_MODE_MASK) >> ST_MODE_SHIFT)
178 
179 /* Construct the minor number from the device (d), mode (m), and non-rewind (n) data */
180 #define TAPE_MINOR(d, m, n) (((d & ~(255 >> (ST_NBR_MODE_BITS + 1))) << (ST_NBR_MODE_BITS + 1)) | \
181   (d & (255 >> (ST_NBR_MODE_BITS + 1))) | (m << ST_MODE_SHIFT) | ((n != 0) << 7) )
182 
183 /* Internal ioctl to set both density (uppermost 8 bits) and blocksize (lower
184    24 bits) */
185 #define SET_DENS_AND_BLK 0x10001
186 
187 static int st_fixed_buffer_size = ST_FIXED_BUFFER_SIZE;
188 static int st_max_sg_segs = ST_MAX_SG;
189 
190 static int modes_defined;
191 
192 static int enlarge_buffer(struct st_buffer *, int);
193 static void clear_buffer(struct st_buffer *);
194 static void normalize_buffer(struct st_buffer *);
195 static int append_to_buffer(const char __user *, struct st_buffer *, int);
196 static int from_buffer(struct st_buffer *, char __user *, int);
197 static void move_buffer_data(struct st_buffer *, int);
198 
199 static int sgl_map_user_pages(struct st_buffer *, const unsigned int,
200 			      unsigned long, size_t, int);
201 static int sgl_unmap_user_pages(struct st_buffer *, const unsigned int, int);
202 
203 static int st_probe(struct device *);
204 static int st_remove(struct device *);
205 
206 static struct scsi_driver st_template = {
207 	.gendrv = {
208 		.name		= "st",
209 		.owner		= THIS_MODULE,
210 		.probe		= st_probe,
211 		.remove		= st_remove,
212 		.groups		= st_drv_groups,
213 	},
214 };
215 
216 static int st_compression(struct scsi_tape *, int);
217 
218 static int find_partition(struct scsi_tape *);
219 static int switch_partition(struct scsi_tape *);
220 
221 static int st_int_ioctl(struct scsi_tape *, unsigned int, unsigned long);
222 
223 static void scsi_tape_release(struct kref *);
224 
225 #define to_scsi_tape(obj) container_of(obj, struct scsi_tape, kref)
226 
227 static DEFINE_MUTEX(st_ref_mutex);
228 static DEFINE_SPINLOCK(st_index_lock);
229 static DEFINE_SPINLOCK(st_use_lock);
230 static DEFINE_IDR(st_index_idr);
231 
232 
233 
234 #ifndef SIGS_FROM_OSST
235 #define SIGS_FROM_OSST \
236 	{"OnStream", "SC-", "", "osst"}, \
237 	{"OnStream", "DI-", "", "osst"}, \
238 	{"OnStream", "DP-", "", "osst"}, \
239 	{"OnStream", "USB", "", "osst"}, \
240 	{"OnStream", "FW-", "", "osst"}
241 #endif
242 
243 static struct scsi_tape *scsi_tape_get(int dev)
244 {
245 	struct scsi_tape *STp = NULL;
246 
247 	mutex_lock(&st_ref_mutex);
248 	spin_lock(&st_index_lock);
249 
250 	STp = idr_find(&st_index_idr, dev);
251 	if (!STp) goto out;
252 
253 	kref_get(&STp->kref);
254 
255 	if (!STp->device)
256 		goto out_put;
257 
258 	if (scsi_device_get(STp->device))
259 		goto out_put;
260 
261 	goto out;
262 
263 out_put:
264 	kref_put(&STp->kref, scsi_tape_release);
265 	STp = NULL;
266 out:
267 	spin_unlock(&st_index_lock);
268 	mutex_unlock(&st_ref_mutex);
269 	return STp;
270 }
271 
272 static void scsi_tape_put(struct scsi_tape *STp)
273 {
274 	struct scsi_device *sdev = STp->device;
275 
276 	mutex_lock(&st_ref_mutex);
277 	kref_put(&STp->kref, scsi_tape_release);
278 	scsi_device_put(sdev);
279 	mutex_unlock(&st_ref_mutex);
280 }
281 
282 struct st_reject_data {
283 	char *vendor;
284 	char *model;
285 	char *rev;
286 	char *driver_hint; /* Name of the correct driver, NULL if unknown */
287 };
288 
289 static struct st_reject_data reject_list[] = {
290 	/* {"XXX", "Yy-", "", NULL},  example */
291 	SIGS_FROM_OSST,
292 	{NULL, }};
293 
294 /* If the device signature is on the list of incompatible drives, the
295    function returns a pointer to the name of the correct driver (if known) */
296 static char * st_incompatible(struct scsi_device* SDp)
297 {
298 	struct st_reject_data *rp;
299 
300 	for (rp=&(reject_list[0]); rp->vendor != NULL; rp++)
301 		if (!strncmp(rp->vendor, SDp->vendor, strlen(rp->vendor)) &&
302 		    !strncmp(rp->model, SDp->model, strlen(rp->model)) &&
303 		    !strncmp(rp->rev, SDp->rev, strlen(rp->rev))) {
304 			if (rp->driver_hint)
305 				return rp->driver_hint;
306 			else
307 				return "unknown";
308 		}
309 	return NULL;
310 }
311 
312 
313 #define st_printk(prefix, t, fmt, a...) \
314 	sdev_prefix_printk(prefix, (t)->device, (t)->name, fmt, ##a)
315 #ifdef DEBUG
316 #define DEBC_printk(t, fmt, a...) \
317 	if (debugging) { st_printk(ST_DEB_MSG, t, fmt, ##a ); }
318 #else
319 #define DEBC_printk(t, fmt, a...)
320 #endif
321 
322 static void st_analyze_sense(struct st_request *SRpnt, struct st_cmdstatus *s)
323 {
324 	const u8 *ucp;
325 	const u8 *sense = SRpnt->sense;
326 
327 	s->have_sense = scsi_normalize_sense(SRpnt->sense,
328 				SCSI_SENSE_BUFFERSIZE, &s->sense_hdr);
329 	s->flags = 0;
330 
331 	if (s->have_sense) {
332 		s->deferred = 0;
333 		s->remainder_valid =
334 			scsi_get_sense_info_fld(sense, SCSI_SENSE_BUFFERSIZE, &s->uremainder64);
335 		switch (sense[0] & 0x7f) {
336 		case 0x71:
337 			s->deferred = 1;
338 			fallthrough;
339 		case 0x70:
340 			s->fixed_format = 1;
341 			s->flags = sense[2] & 0xe0;
342 			break;
343 		case 0x73:
344 			s->deferred = 1;
345 			fallthrough;
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 = STp->name;
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 0, host bt 0x%x).\n",
390 			       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 (scsi_req(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 (scsi_req(req)->result) {
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 (scsi_req(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 (scsi_req(req)->result) {
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, blk_status_t status)
515 {
516 	struct st_request *SRpnt = req->end_io_data;
517 	struct scsi_request *rq = scsi_req(req);
518 	struct scsi_tape *STp = SRpnt->stp;
519 	struct bio *tmp;
520 
521 	STp->buffer->cmdstat.midlevel_result = SRpnt->result = rq->result;
522 	STp->buffer->cmdstat.residual = rq->resid_len;
523 
524 	st_do_stats(STp, req);
525 
526 	tmp = SRpnt->bio;
527 	if (rq->sense_len)
528 		memcpy(SRpnt->sense, rq->sense, SCSI_SENSE_BUFFERSIZE);
529 	if (SRpnt->waiting)
530 		complete(SRpnt->waiting);
531 
532 	blk_rq_unmap_user(tmp);
533 	blk_mq_free_request(req);
534 }
535 
536 static int st_scsi_execute(struct st_request *SRpnt, const unsigned char *cmd,
537 			   int data_direction, void *buffer, unsigned bufflen,
538 			   int timeout, int retries)
539 {
540 	struct request *req;
541 	struct scsi_request *rq;
542 	struct rq_map_data *mdata = &SRpnt->stp->buffer->map_data;
543 	int err = 0;
544 	struct scsi_tape *STp = SRpnt->stp;
545 
546 	req = scsi_alloc_request(SRpnt->stp->device->request_queue,
547 			data_direction == DMA_TO_DEVICE ?
548 			REQ_OP_DRV_OUT : REQ_OP_DRV_IN, 0);
549 	if (IS_ERR(req))
550 		return PTR_ERR(req);
551 	rq = scsi_req(req);
552 	req->rq_flags |= RQF_QUIET;
553 
554 	mdata->null_mapped = 1;
555 
556 	if (bufflen) {
557 		err = blk_rq_map_user(req->q, req, mdata, NULL, bufflen,
558 				      GFP_KERNEL);
559 		if (err) {
560 			blk_mq_free_request(req);
561 			return err;
562 		}
563 	}
564 
565 	atomic64_inc(&STp->stats->in_flight);
566 	if (cmd[0] == WRITE_6) {
567 		atomic_set(&STp->stats->last_write_size, bufflen);
568 		STp->stats->write_time = ktime_get();
569 	} else if (cmd[0] == READ_6) {
570 		atomic_set(&STp->stats->last_read_size, bufflen);
571 		STp->stats->read_time = ktime_get();
572 	} else {
573 		STp->stats->other_time = ktime_get();
574 	}
575 
576 	SRpnt->bio = req->bio;
577 	rq->cmd_len = COMMAND_SIZE(cmd[0]);
578 	memset(rq->cmd, 0, BLK_MAX_CDB);
579 	memcpy(rq->cmd, cmd, rq->cmd_len);
580 	req->timeout = timeout;
581 	rq->retries = retries;
582 	req->end_io_data = SRpnt;
583 
584 	blk_execute_rq_nowait(req, true, st_scsi_execute_end);
585 	return 0;
586 }
587 
588 /* Do the scsi command. Waits until command performed if do_wait is true.
589    Otherwise write_behind_check() is used to check that the command
590    has finished. */
591 static struct st_request *
592 st_do_scsi(struct st_request * SRpnt, struct scsi_tape * STp, unsigned char *cmd,
593 	   int bytes, int direction, int timeout, int retries, int do_wait)
594 {
595 	struct completion *waiting;
596 	struct rq_map_data *mdata = &STp->buffer->map_data;
597 	int ret;
598 
599 	/* if async, make sure there's no command outstanding */
600 	if (!do_wait && ((STp->buffer)->last_SRpnt)) {
601 		st_printk(KERN_ERR, STp,
602 			  "Async command already active.\n");
603 		if (signal_pending(current))
604 			(STp->buffer)->syscall_result = (-EINTR);
605 		else
606 			(STp->buffer)->syscall_result = (-EBUSY);
607 		return NULL;
608 	}
609 
610 	if (!SRpnt) {
611 		SRpnt = st_allocate_request(STp);
612 		if (!SRpnt)
613 			return NULL;
614 	}
615 
616 	/* If async IO, set last_SRpnt. This ptr tells write_behind_check
617 	   which IO is outstanding. It's nulled out when the IO completes. */
618 	if (!do_wait)
619 		(STp->buffer)->last_SRpnt = SRpnt;
620 
621 	waiting = &STp->wait;
622 	init_completion(waiting);
623 	SRpnt->waiting = waiting;
624 
625 	if (STp->buffer->do_dio) {
626 		mdata->page_order = 0;
627 		mdata->nr_entries = STp->buffer->sg_segs;
628 		mdata->pages = STp->buffer->mapped_pages;
629 	} else {
630 		mdata->page_order = STp->buffer->reserved_page_order;
631 		mdata->nr_entries =
632 			DIV_ROUND_UP(bytes, PAGE_SIZE << mdata->page_order);
633 		mdata->pages = STp->buffer->reserved_pages;
634 		mdata->offset = 0;
635 	}
636 
637 	memcpy(SRpnt->cmd, cmd, sizeof(SRpnt->cmd));
638 	STp->buffer->cmdstat.have_sense = 0;
639 	STp->buffer->syscall_result = 0;
640 
641 	ret = st_scsi_execute(SRpnt, cmd, direction, NULL, bytes, timeout,
642 			      retries);
643 	if (ret) {
644 		/* could not allocate the buffer or request was too large */
645 		(STp->buffer)->syscall_result = (-EBUSY);
646 		(STp->buffer)->last_SRpnt = NULL;
647 	} else if (do_wait) {
648 		wait_for_completion(waiting);
649 		SRpnt->waiting = NULL;
650 		(STp->buffer)->syscall_result = st_chk_result(STp, SRpnt);
651 	}
652 
653 	return SRpnt;
654 }
655 
656 
657 /* Handle the write-behind checking (waits for completion). Returns -ENOSPC if
658    write has been correct but EOM early warning reached, -EIO if write ended in
659    error or zero if write successful. Asynchronous writes are used only in
660    variable block mode. */
661 static int write_behind_check(struct scsi_tape * STp)
662 {
663 	int retval = 0;
664 	struct st_buffer *STbuffer;
665 	struct st_partstat *STps;
666 	struct st_cmdstatus *cmdstatp;
667 	struct st_request *SRpnt;
668 
669 	STbuffer = STp->buffer;
670 	if (!STbuffer->writing)
671 		return 0;
672 
673 	DEB(
674 	if (STp->write_pending)
675 		STp->nbr_waits++;
676 	else
677 		STp->nbr_finished++;
678 	) /* end DEB */
679 
680 	wait_for_completion(&(STp->wait));
681 	SRpnt = STbuffer->last_SRpnt;
682 	STbuffer->last_SRpnt = NULL;
683 	SRpnt->waiting = NULL;
684 
685 	(STp->buffer)->syscall_result = st_chk_result(STp, SRpnt);
686 	st_release_request(SRpnt);
687 
688 	STbuffer->buffer_bytes -= STbuffer->writing;
689 	STps = &(STp->ps[STp->partition]);
690 	if (STps->drv_block >= 0) {
691 		if (STp->block_size == 0)
692 			STps->drv_block++;
693 		else
694 			STps->drv_block += STbuffer->writing / STp->block_size;
695 	}
696 
697 	cmdstatp = &STbuffer->cmdstat;
698 	if (STbuffer->syscall_result) {
699 		retval = -EIO;
700 		if (cmdstatp->have_sense && !cmdstatp->deferred &&
701 		    (cmdstatp->flags & SENSE_EOM) &&
702 		    (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
703 		     cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR)) {
704 			/* EOM at write-behind, has all data been written? */
705 			if (!cmdstatp->remainder_valid ||
706 			    cmdstatp->uremainder64 == 0)
707 				retval = -ENOSPC;
708 		}
709 		if (retval == -EIO)
710 			STps->drv_block = -1;
711 	}
712 	STbuffer->writing = 0;
713 
714 	DEB(if (debugging && retval)
715 		    st_printk(ST_DEB_MSG, STp,
716 				"Async write error %x, return value %d.\n",
717 				STbuffer->cmdstat.midlevel_result, retval);) /* end DEB */
718 
719 	return retval;
720 }
721 
722 
723 /* Step over EOF if it has been inadvertently crossed (ioctl not used because
724    it messes up the block number). */
725 static int cross_eof(struct scsi_tape * STp, int forward)
726 {
727 	struct st_request *SRpnt;
728 	unsigned char cmd[MAX_COMMAND_SIZE];
729 
730 	cmd[0] = SPACE;
731 	cmd[1] = 0x01;		/* Space FileMarks */
732 	if (forward) {
733 		cmd[2] = cmd[3] = 0;
734 		cmd[4] = 1;
735 	} else
736 		cmd[2] = cmd[3] = cmd[4] = 0xff;	/* -1 filemarks */
737 	cmd[5] = 0;
738 
739 	DEBC_printk(STp, "Stepping over filemark %s.\n",
740 		    forward ? "forward" : "backward");
741 
742 	SRpnt = st_do_scsi(NULL, STp, cmd, 0, DMA_NONE,
743 			   STp->device->request_queue->rq_timeout,
744 			   MAX_RETRIES, 1);
745 	if (!SRpnt)
746 		return (STp->buffer)->syscall_result;
747 
748 	st_release_request(SRpnt);
749 	SRpnt = NULL;
750 
751 	if ((STp->buffer)->cmdstat.midlevel_result != 0)
752 		st_printk(KERN_ERR, STp,
753 			  "Stepping over filemark %s failed.\n",
754 			  forward ? "forward" : "backward");
755 
756 	return (STp->buffer)->syscall_result;
757 }
758 
759 
760 /* Flush the write buffer (never need to write if variable blocksize). */
761 static int st_flush_write_buffer(struct scsi_tape * STp)
762 {
763 	int transfer, blks;
764 	int result;
765 	unsigned char cmd[MAX_COMMAND_SIZE];
766 	struct st_request *SRpnt;
767 	struct st_partstat *STps;
768 
769 	result = write_behind_check(STp);
770 	if (result)
771 		return result;
772 
773 	result = 0;
774 	if (STp->dirty == 1) {
775 
776 		transfer = STp->buffer->buffer_bytes;
777 		DEBC_printk(STp, "Flushing %d bytes.\n", transfer);
778 
779 		memset(cmd, 0, MAX_COMMAND_SIZE);
780 		cmd[0] = WRITE_6;
781 		cmd[1] = 1;
782 		blks = transfer / STp->block_size;
783 		cmd[2] = blks >> 16;
784 		cmd[3] = blks >> 8;
785 		cmd[4] = blks;
786 
787 		SRpnt = st_do_scsi(NULL, STp, cmd, transfer, DMA_TO_DEVICE,
788 				   STp->device->request_queue->rq_timeout,
789 				   MAX_WRITE_RETRIES, 1);
790 		if (!SRpnt)
791 			return (STp->buffer)->syscall_result;
792 
793 		STps = &(STp->ps[STp->partition]);
794 		if ((STp->buffer)->syscall_result != 0) {
795 			struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
796 
797 			if (cmdstatp->have_sense && !cmdstatp->deferred &&
798 			    (cmdstatp->flags & SENSE_EOM) &&
799 			    (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
800 			     cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) &&
801 			    (!cmdstatp->remainder_valid ||
802 			     cmdstatp->uremainder64 == 0)) { /* All written at EOM early warning */
803 				STp->dirty = 0;
804 				(STp->buffer)->buffer_bytes = 0;
805 				if (STps->drv_block >= 0)
806 					STps->drv_block += blks;
807 				result = (-ENOSPC);
808 			} else {
809 				st_printk(KERN_ERR, STp, "Error on flush.\n");
810 				STps->drv_block = (-1);
811 				result = (-EIO);
812 			}
813 		} else {
814 			if (STps->drv_block >= 0)
815 				STps->drv_block += blks;
816 			STp->dirty = 0;
817 			(STp->buffer)->buffer_bytes = 0;
818 		}
819 		st_release_request(SRpnt);
820 		SRpnt = NULL;
821 	}
822 	return result;
823 }
824 
825 
826 /* Flush the tape buffer. The tape will be positioned correctly unless
827    seek_next is true. */
828 static int flush_buffer(struct scsi_tape *STp, int seek_next)
829 {
830 	int backspace, result;
831 	struct st_partstat *STps;
832 
833 	/*
834 	 * If there was a bus reset, block further access
835 	 * to this device.
836 	 */
837 	if (STp->pos_unknown)
838 		return (-EIO);
839 
840 	if (STp->ready != ST_READY)
841 		return 0;
842 	STps = &(STp->ps[STp->partition]);
843 	if (STps->rw == ST_WRITING)	/* Writing */
844 		return st_flush_write_buffer(STp);
845 
846 	if (STp->block_size == 0)
847 		return 0;
848 
849 	backspace = ((STp->buffer)->buffer_bytes +
850 		     (STp->buffer)->read_pointer) / STp->block_size -
851 	    ((STp->buffer)->read_pointer + STp->block_size - 1) /
852 	    STp->block_size;
853 	(STp->buffer)->buffer_bytes = 0;
854 	(STp->buffer)->read_pointer = 0;
855 	result = 0;
856 	if (!seek_next) {
857 		if (STps->eof == ST_FM_HIT) {
858 			result = cross_eof(STp, 0);	/* Back over the EOF hit */
859 			if (!result)
860 				STps->eof = ST_NOEOF;
861 			else {
862 				if (STps->drv_file >= 0)
863 					STps->drv_file++;
864 				STps->drv_block = 0;
865 			}
866 		}
867 		if (!result && backspace > 0)
868 			result = st_int_ioctl(STp, MTBSR, backspace);
869 	} else if (STps->eof == ST_FM_HIT) {
870 		if (STps->drv_file >= 0)
871 			STps->drv_file++;
872 		STps->drv_block = 0;
873 		STps->eof = ST_NOEOF;
874 	}
875 	return result;
876 
877 }
878 
879 /* Set the mode parameters */
880 static int set_mode_densblk(struct scsi_tape * STp, struct st_modedef * STm)
881 {
882 	int set_it = 0;
883 	unsigned long arg;
884 
885 	if (!STp->density_changed &&
886 	    STm->default_density >= 0 &&
887 	    STm->default_density != STp->density) {
888 		arg = STm->default_density;
889 		set_it = 1;
890 	} else
891 		arg = STp->density;
892 	arg <<= MT_ST_DENSITY_SHIFT;
893 	if (!STp->blksize_changed &&
894 	    STm->default_blksize >= 0 &&
895 	    STm->default_blksize != STp->block_size) {
896 		arg |= STm->default_blksize;
897 		set_it = 1;
898 	} else
899 		arg |= STp->block_size;
900 	if (set_it &&
901 	    st_int_ioctl(STp, SET_DENS_AND_BLK, arg)) {
902 		st_printk(KERN_WARNING, STp,
903 			  "Can't set default block size to %d bytes "
904 			  "and density %x.\n",
905 			  STm->default_blksize, STm->default_density);
906 		if (modes_defined)
907 			return (-EINVAL);
908 	}
909 	return 0;
910 }
911 
912 
913 /* Lock or unlock the drive door. Don't use when st_request allocated. */
914 static int do_door_lock(struct scsi_tape * STp, int do_lock)
915 {
916 	int retval;
917 
918 	DEBC_printk(STp, "%socking drive door.\n", do_lock ? "L" : "Unl");
919 
920 	retval = scsi_set_medium_removal(STp->device,
921 			do_lock ? SCSI_REMOVAL_PREVENT : SCSI_REMOVAL_ALLOW);
922 	if (!retval)
923 		STp->door_locked = do_lock ? ST_LOCKED_EXPLICIT : ST_UNLOCKED;
924 	else
925 		STp->door_locked = ST_LOCK_FAILS;
926 	return retval;
927 }
928 
929 
930 /* Set the internal state after reset */
931 static void reset_state(struct scsi_tape *STp)
932 {
933 	int i;
934 	struct st_partstat *STps;
935 
936 	STp->pos_unknown = 0;
937 	for (i = 0; i < ST_NBR_PARTITIONS; i++) {
938 		STps = &(STp->ps[i]);
939 		STps->rw = ST_IDLE;
940 		STps->eof = ST_NOEOF;
941 		STps->at_sm = 0;
942 		STps->last_block_valid = 0;
943 		STps->drv_block = -1;
944 		STps->drv_file = -1;
945 	}
946 	if (STp->can_partitions) {
947 		STp->partition = find_partition(STp);
948 		if (STp->partition < 0)
949 			STp->partition = 0;
950 		STp->new_partition = STp->partition;
951 	}
952 }
953 
954 /* Test if the drive is ready. Returns either one of the codes below or a negative system
955    error code. */
956 #define CHKRES_READY       0
957 #define CHKRES_NEW_SESSION 1
958 #define CHKRES_NOT_READY   2
959 #define CHKRES_NO_TAPE     3
960 
961 #define MAX_ATTENTIONS    10
962 
963 static int test_ready(struct scsi_tape *STp, int do_wait)
964 {
965 	int attentions, waits, max_wait, scode;
966 	int retval = CHKRES_READY, new_session = 0;
967 	unsigned char cmd[MAX_COMMAND_SIZE];
968 	struct st_request *SRpnt = NULL;
969 	struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
970 
971 	max_wait = do_wait ? ST_BLOCK_SECONDS : 0;
972 
973 	for (attentions=waits=0; ; ) {
974 		memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE);
975 		cmd[0] = TEST_UNIT_READY;
976 		SRpnt = st_do_scsi(SRpnt, STp, cmd, 0, DMA_NONE,
977 				   STp->long_timeout, MAX_READY_RETRIES, 1);
978 
979 		if (!SRpnt) {
980 			retval = (STp->buffer)->syscall_result;
981 			break;
982 		}
983 
984 		if (cmdstatp->have_sense) {
985 
986 			scode = cmdstatp->sense_hdr.sense_key;
987 
988 			if (scode == UNIT_ATTENTION) { /* New media? */
989 				new_session = 1;
990 				if (attentions < MAX_ATTENTIONS) {
991 					attentions++;
992 					continue;
993 				}
994 				else {
995 					retval = (-EIO);
996 					break;
997 				}
998 			}
999 
1000 			if (scode == NOT_READY) {
1001 				if (waits < max_wait) {
1002 					if (msleep_interruptible(1000)) {
1003 						retval = (-EINTR);
1004 						break;
1005 					}
1006 					waits++;
1007 					continue;
1008 				}
1009 				else {
1010 					if ((STp->device)->scsi_level >= SCSI_2 &&
1011 					    cmdstatp->sense_hdr.asc == 0x3a)	/* Check ASC */
1012 						retval = CHKRES_NO_TAPE;
1013 					else
1014 						retval = CHKRES_NOT_READY;
1015 					break;
1016 				}
1017 			}
1018 		}
1019 
1020 		retval = (STp->buffer)->syscall_result;
1021 		if (!retval)
1022 			retval = new_session ? CHKRES_NEW_SESSION : CHKRES_READY;
1023 		break;
1024 	}
1025 
1026 	if (SRpnt != NULL)
1027 		st_release_request(SRpnt);
1028 	return retval;
1029 }
1030 
1031 
1032 /* See if the drive is ready and gather information about the tape. Return values:
1033    < 0   negative error code from errno.h
1034    0     drive ready
1035    1     drive not ready (possibly no tape)
1036 */
1037 static int check_tape(struct scsi_tape *STp, struct file *filp)
1038 {
1039 	int i, retval, new_session = 0, do_wait;
1040 	unsigned char cmd[MAX_COMMAND_SIZE], saved_cleaning;
1041 	unsigned short st_flags = filp->f_flags;
1042 	struct st_request *SRpnt = NULL;
1043 	struct st_modedef *STm;
1044 	struct st_partstat *STps;
1045 	struct inode *inode = file_inode(filp);
1046 	int mode = TAPE_MODE(inode);
1047 
1048 	STp->ready = ST_READY;
1049 
1050 	if (mode != STp->current_mode) {
1051 		DEBC_printk(STp, "Mode change from %d to %d.\n",
1052 			    STp->current_mode, mode);
1053 		new_session = 1;
1054 		STp->current_mode = mode;
1055 	}
1056 	STm = &(STp->modes[STp->current_mode]);
1057 
1058 	saved_cleaning = STp->cleaning_req;
1059 	STp->cleaning_req = 0;
1060 
1061 	do_wait = ((filp->f_flags & O_NONBLOCK) == 0);
1062 	retval = test_ready(STp, do_wait);
1063 
1064 	if (retval < 0)
1065 	    goto err_out;
1066 
1067 	if (retval == CHKRES_NEW_SESSION) {
1068 		STp->pos_unknown = 0;
1069 		STp->partition = STp->new_partition = 0;
1070 		if (STp->can_partitions)
1071 			STp->nbr_partitions = 1; /* This guess will be updated later
1072                                                     if necessary */
1073 		for (i = 0; i < ST_NBR_PARTITIONS; i++) {
1074 			STps = &(STp->ps[i]);
1075 			STps->rw = ST_IDLE;
1076 			STps->eof = ST_NOEOF;
1077 			STps->at_sm = 0;
1078 			STps->last_block_valid = 0;
1079 			STps->drv_block = 0;
1080 			STps->drv_file = 0;
1081 		}
1082 		new_session = 1;
1083 	}
1084 	else {
1085 		STp->cleaning_req |= saved_cleaning;
1086 
1087 		if (retval == CHKRES_NOT_READY || retval == CHKRES_NO_TAPE) {
1088 			if (retval == CHKRES_NO_TAPE)
1089 				STp->ready = ST_NO_TAPE;
1090 			else
1091 				STp->ready = ST_NOT_READY;
1092 
1093 			STp->density = 0;	/* Clear the erroneous "residue" */
1094 			STp->write_prot = 0;
1095 			STp->block_size = 0;
1096 			STp->ps[0].drv_file = STp->ps[0].drv_block = (-1);
1097 			STp->partition = STp->new_partition = 0;
1098 			STp->door_locked = ST_UNLOCKED;
1099 			return CHKRES_NOT_READY;
1100 		}
1101 	}
1102 
1103 	if (STp->omit_blklims)
1104 		STp->min_block = STp->max_block = (-1);
1105 	else {
1106 		memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE);
1107 		cmd[0] = READ_BLOCK_LIMITS;
1108 
1109 		SRpnt = st_do_scsi(SRpnt, STp, cmd, 6, DMA_FROM_DEVICE,
1110 				   STp->device->request_queue->rq_timeout,
1111 				   MAX_READY_RETRIES, 1);
1112 		if (!SRpnt) {
1113 			retval = (STp->buffer)->syscall_result;
1114 			goto err_out;
1115 		}
1116 
1117 		if (!SRpnt->result && !STp->buffer->cmdstat.have_sense) {
1118 			STp->max_block = ((STp->buffer)->b_data[1] << 16) |
1119 			    ((STp->buffer)->b_data[2] << 8) | (STp->buffer)->b_data[3];
1120 			STp->min_block = ((STp->buffer)->b_data[4] << 8) |
1121 			    (STp->buffer)->b_data[5];
1122 			if ( DEB( debugging || ) !STp->inited)
1123 				st_printk(KERN_INFO, STp,
1124 					  "Block limits %d - %d bytes.\n",
1125 					  STp->min_block, STp->max_block);
1126 		} else {
1127 			STp->min_block = STp->max_block = (-1);
1128 			DEBC_printk(STp, "Can't read block limits.\n");
1129 		}
1130 	}
1131 
1132 	memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE);
1133 	cmd[0] = MODE_SENSE;
1134 	cmd[4] = 12;
1135 
1136 	SRpnt = st_do_scsi(SRpnt, STp, cmd, 12, DMA_FROM_DEVICE,
1137 			   STp->device->request_queue->rq_timeout,
1138 			   MAX_READY_RETRIES, 1);
1139 	if (!SRpnt) {
1140 		retval = (STp->buffer)->syscall_result;
1141 		goto err_out;
1142 	}
1143 
1144 	if ((STp->buffer)->syscall_result != 0) {
1145 		DEBC_printk(STp, "No Mode Sense.\n");
1146 		STp->block_size = ST_DEFAULT_BLOCK;	/* Educated guess (?) */
1147 		(STp->buffer)->syscall_result = 0;	/* Prevent error propagation */
1148 		STp->drv_write_prot = 0;
1149 	} else {
1150 		DEBC_printk(STp,"Mode sense. Length %d, "
1151 			    "medium %x, WBS %x, BLL %d\n",
1152 			    (STp->buffer)->b_data[0],
1153 			    (STp->buffer)->b_data[1],
1154 			    (STp->buffer)->b_data[2],
1155 			    (STp->buffer)->b_data[3]);
1156 
1157 		if ((STp->buffer)->b_data[3] >= 8) {
1158 			STp->drv_buffer = ((STp->buffer)->b_data[2] >> 4) & 7;
1159 			STp->density = (STp->buffer)->b_data[4];
1160 			STp->block_size = (STp->buffer)->b_data[9] * 65536 +
1161 			    (STp->buffer)->b_data[10] * 256 + (STp->buffer)->b_data[11];
1162 			DEBC_printk(STp, "Density %x, tape length: %x, "
1163 				    "drv buffer: %d\n",
1164 				    STp->density,
1165 				    (STp->buffer)->b_data[5] * 65536 +
1166 				    (STp->buffer)->b_data[6] * 256 +
1167 				    (STp->buffer)->b_data[7],
1168 				    STp->drv_buffer);
1169 		}
1170 		STp->drv_write_prot = ((STp->buffer)->b_data[2] & 0x80) != 0;
1171 		if (!STp->drv_buffer && STp->immediate_filemark) {
1172 			st_printk(KERN_WARNING, STp,
1173 				  "non-buffered tape: disabling "
1174 				  "writing immediate filemarks\n");
1175 			STp->immediate_filemark = 0;
1176 		}
1177 	}
1178 	st_release_request(SRpnt);
1179 	SRpnt = NULL;
1180 	STp->inited = 1;
1181 
1182 	if (STp->block_size > 0)
1183 		(STp->buffer)->buffer_blocks =
1184 			(STp->buffer)->buffer_size / STp->block_size;
1185 	else
1186 		(STp->buffer)->buffer_blocks = 1;
1187 	(STp->buffer)->buffer_bytes = (STp->buffer)->read_pointer = 0;
1188 
1189 	DEBC_printk(STp, "Block size: %d, buffer size: %d (%d blocks).\n",
1190 		    STp->block_size, (STp->buffer)->buffer_size,
1191 		    (STp->buffer)->buffer_blocks);
1192 
1193 	if (STp->drv_write_prot) {
1194 		STp->write_prot = 1;
1195 
1196 		DEBC_printk(STp, "Write protected\n");
1197 
1198 		if (do_wait &&
1199 		    ((st_flags & O_ACCMODE) == O_WRONLY ||
1200 		     (st_flags & O_ACCMODE) == O_RDWR)) {
1201 			retval = (-EROFS);
1202 			goto err_out;
1203 		}
1204 	}
1205 
1206 	if (STp->can_partitions && STp->nbr_partitions < 1) {
1207 		/* This code is reached when the device is opened for the first time
1208 		   after the driver has been initialized with tape in the drive and the
1209 		   partition support has been enabled. */
1210 		DEBC_printk(STp, "Updating partition number in status.\n");
1211 		if ((STp->partition = find_partition(STp)) < 0) {
1212 			retval = STp->partition;
1213 			goto err_out;
1214 		}
1215 		STp->new_partition = STp->partition;
1216 		STp->nbr_partitions = 1; /* This guess will be updated when necessary */
1217 	}
1218 
1219 	if (new_session) {	/* Change the drive parameters for the new mode */
1220 		STp->density_changed = STp->blksize_changed = 0;
1221 		STp->compression_changed = 0;
1222 		if (!(STm->defaults_for_writes) &&
1223 		    (retval = set_mode_densblk(STp, STm)) < 0)
1224 		    goto err_out;
1225 
1226 		if (STp->default_drvbuffer != 0xff) {
1227 			if (st_int_ioctl(STp, MTSETDRVBUFFER, STp->default_drvbuffer))
1228 				st_printk(KERN_WARNING, STp,
1229 					  "Can't set default drive "
1230 					  "buffering to %d.\n",
1231 					  STp->default_drvbuffer);
1232 		}
1233 	}
1234 
1235 	return CHKRES_READY;
1236 
1237  err_out:
1238 	return retval;
1239 }
1240 
1241 
1242 /* Open the device. Needs to take the BKL only because of incrementing the SCSI host
1243    module count. */
1244 static int st_open(struct inode *inode, struct file *filp)
1245 {
1246 	int i, retval = (-EIO);
1247 	int resumed = 0;
1248 	struct scsi_tape *STp;
1249 	struct st_partstat *STps;
1250 	int dev = TAPE_NR(inode);
1251 
1252 	/*
1253 	 * We really want to do nonseekable_open(inode, filp); here, but some
1254 	 * versions of tar incorrectly call lseek on tapes and bail out if that
1255 	 * fails.  So we disallow pread() and pwrite(), but permit lseeks.
1256 	 */
1257 	filp->f_mode &= ~(FMODE_PREAD | FMODE_PWRITE);
1258 
1259 	if (!(STp = scsi_tape_get(dev))) {
1260 		return -ENXIO;
1261 	}
1262 
1263 	filp->private_data = STp;
1264 
1265 	spin_lock(&st_use_lock);
1266 	if (STp->in_use) {
1267 		spin_unlock(&st_use_lock);
1268 		DEBC_printk(STp, "Device already in use.\n");
1269 		scsi_tape_put(STp);
1270 		return (-EBUSY);
1271 	}
1272 
1273 	STp->in_use = 1;
1274 	spin_unlock(&st_use_lock);
1275 	STp->rew_at_close = STp->autorew_dev = (iminor(inode) & 0x80) == 0;
1276 
1277 	if (scsi_autopm_get_device(STp->device) < 0) {
1278 		retval = -EIO;
1279 		goto err_out;
1280 	}
1281 	resumed = 1;
1282 	if (!scsi_block_when_processing_errors(STp->device)) {
1283 		retval = (-ENXIO);
1284 		goto err_out;
1285 	}
1286 
1287 	/* See that we have at least a one page buffer available */
1288 	if (!enlarge_buffer(STp->buffer, PAGE_SIZE)) {
1289 		st_printk(KERN_WARNING, STp,
1290 			  "Can't allocate one page tape buffer.\n");
1291 		retval = (-EOVERFLOW);
1292 		goto err_out;
1293 	}
1294 
1295 	(STp->buffer)->cleared = 0;
1296 	(STp->buffer)->writing = 0;
1297 	(STp->buffer)->syscall_result = 0;
1298 
1299 	STp->write_prot = ((filp->f_flags & O_ACCMODE) == O_RDONLY);
1300 
1301 	STp->dirty = 0;
1302 	for (i = 0; i < ST_NBR_PARTITIONS; i++) {
1303 		STps = &(STp->ps[i]);
1304 		STps->rw = ST_IDLE;
1305 	}
1306 	STp->try_dio_now = STp->try_dio;
1307 	STp->recover_count = 0;
1308 	DEB( STp->nbr_waits = STp->nbr_finished = 0;
1309 	     STp->nbr_requests = STp->nbr_dio = STp->nbr_pages = 0; )
1310 
1311 	retval = check_tape(STp, filp);
1312 	if (retval < 0)
1313 		goto err_out;
1314 	if ((filp->f_flags & O_NONBLOCK) == 0 &&
1315 	    retval != CHKRES_READY) {
1316 		if (STp->ready == NO_TAPE)
1317 			retval = (-ENOMEDIUM);
1318 		else
1319 			retval = (-EIO);
1320 		goto err_out;
1321 	}
1322 	return 0;
1323 
1324  err_out:
1325 	normalize_buffer(STp->buffer);
1326 	spin_lock(&st_use_lock);
1327 	STp->in_use = 0;
1328 	spin_unlock(&st_use_lock);
1329 	if (resumed)
1330 		scsi_autopm_put_device(STp->device);
1331 	scsi_tape_put(STp);
1332 	return retval;
1333 
1334 }
1335 
1336 
1337 /* Flush the tape buffer before close */
1338 static int st_flush(struct file *filp, fl_owner_t id)
1339 {
1340 	int result = 0, result2;
1341 	unsigned char cmd[MAX_COMMAND_SIZE];
1342 	struct st_request *SRpnt;
1343 	struct scsi_tape *STp = filp->private_data;
1344 	struct st_modedef *STm = &(STp->modes[STp->current_mode]);
1345 	struct st_partstat *STps = &(STp->ps[STp->partition]);
1346 
1347 	if (file_count(filp) > 1)
1348 		return 0;
1349 
1350 	if (STps->rw == ST_WRITING && !STp->pos_unknown) {
1351 		result = st_flush_write_buffer(STp);
1352 		if (result != 0 && result != (-ENOSPC))
1353 			goto out;
1354 	}
1355 
1356 	if (STp->can_partitions &&
1357 	    (result2 = switch_partition(STp)) < 0) {
1358 		DEBC_printk(STp, "switch_partition at close failed.\n");
1359 		if (result == 0)
1360 			result = result2;
1361 		goto out;
1362 	}
1363 
1364 	DEBC( if (STp->nbr_requests)
1365 		st_printk(KERN_DEBUG, STp,
1366 			  "Number of r/w requests %d, dio used in %d, "
1367 			  "pages %d.\n", STp->nbr_requests, STp->nbr_dio,
1368 			  STp->nbr_pages));
1369 
1370 	if (STps->rw == ST_WRITING && !STp->pos_unknown) {
1371 		struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
1372 
1373 #if DEBUG
1374 		DEBC_printk(STp, "Async write waits %d, finished %d.\n",
1375 			    STp->nbr_waits, STp->nbr_finished);
1376 #endif
1377 		memset(cmd, 0, MAX_COMMAND_SIZE);
1378 		cmd[0] = WRITE_FILEMARKS;
1379 		if (STp->immediate_filemark)
1380 			cmd[1] = 1;
1381 		cmd[4] = 1 + STp->two_fm;
1382 
1383 		SRpnt = st_do_scsi(NULL, STp, cmd, 0, DMA_NONE,
1384 				   STp->device->request_queue->rq_timeout,
1385 				   MAX_WRITE_RETRIES, 1);
1386 		if (!SRpnt) {
1387 			result = (STp->buffer)->syscall_result;
1388 			goto out;
1389 		}
1390 
1391 		if (STp->buffer->syscall_result == 0 ||
1392 		    (cmdstatp->have_sense && !cmdstatp->deferred &&
1393 		     (cmdstatp->flags & SENSE_EOM) &&
1394 		     (cmdstatp->sense_hdr.sense_key == NO_SENSE ||
1395 		      cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) &&
1396 		     (!cmdstatp->remainder_valid || cmdstatp->uremainder64 == 0))) {
1397 			/* Write successful at EOM */
1398 			st_release_request(SRpnt);
1399 			SRpnt = NULL;
1400 			if (STps->drv_file >= 0)
1401 				STps->drv_file++;
1402 			STps->drv_block = 0;
1403 			if (STp->two_fm)
1404 				cross_eof(STp, 0);
1405 			STps->eof = ST_FM;
1406 		}
1407 		else { /* Write error */
1408 			st_release_request(SRpnt);
1409 			SRpnt = NULL;
1410 			st_printk(KERN_ERR, STp,
1411 				  "Error on write filemark.\n");
1412 			if (result == 0)
1413 				result = (-EIO);
1414 		}
1415 
1416 		DEBC_printk(STp, "Buffer flushed, %d EOF(s) written\n", cmd[4]);
1417 	} else if (!STp->rew_at_close) {
1418 		STps = &(STp->ps[STp->partition]);
1419 		if (!STm->sysv || STps->rw != ST_READING) {
1420 			if (STp->can_bsr)
1421 				result = flush_buffer(STp, 0);
1422 			else if (STps->eof == ST_FM_HIT) {
1423 				result = cross_eof(STp, 0);
1424 				if (result) {
1425 					if (STps->drv_file >= 0)
1426 						STps->drv_file++;
1427 					STps->drv_block = 0;
1428 					STps->eof = ST_FM;
1429 				} else
1430 					STps->eof = ST_NOEOF;
1431 			}
1432 		} else if ((STps->eof == ST_NOEOF &&
1433 			    !(result = cross_eof(STp, 1))) ||
1434 			   STps->eof == ST_FM_HIT) {
1435 			if (STps->drv_file >= 0)
1436 				STps->drv_file++;
1437 			STps->drv_block = 0;
1438 			STps->eof = ST_FM;
1439 		}
1440 	}
1441 
1442       out:
1443 	if (STp->rew_at_close) {
1444 		result2 = st_int_ioctl(STp, MTREW, 1);
1445 		if (result == 0)
1446 			result = result2;
1447 	}
1448 	return result;
1449 }
1450 
1451 
1452 /* Close the device and release it. BKL is not needed: this is the only thread
1453    accessing this tape. */
1454 static int st_release(struct inode *inode, struct file *filp)
1455 {
1456 	struct scsi_tape *STp = filp->private_data;
1457 
1458 	if (STp->door_locked == ST_LOCKED_AUTO)
1459 		do_door_lock(STp, 0);
1460 
1461 	normalize_buffer(STp->buffer);
1462 	spin_lock(&st_use_lock);
1463 	STp->in_use = 0;
1464 	spin_unlock(&st_use_lock);
1465 	scsi_autopm_put_device(STp->device);
1466 	scsi_tape_put(STp);
1467 
1468 	return 0;
1469 }
1470 
1471 /* The checks common to both reading and writing */
1472 static ssize_t rw_checks(struct scsi_tape *STp, struct file *filp, size_t count)
1473 {
1474 	ssize_t retval = 0;
1475 
1476 	/*
1477 	 * If we are in the middle of error recovery, don't let anyone
1478 	 * else try and use this device.  Also, if error recovery fails, it
1479 	 * may try and take the device offline, in which case all further
1480 	 * access to the device is prohibited.
1481 	 */
1482 	if (!scsi_block_when_processing_errors(STp->device)) {
1483 		retval = (-ENXIO);
1484 		goto out;
1485 	}
1486 
1487 	if (STp->ready != ST_READY) {
1488 		if (STp->ready == ST_NO_TAPE)
1489 			retval = (-ENOMEDIUM);
1490 		else
1491 			retval = (-EIO);
1492 		goto out;
1493 	}
1494 
1495 	if (! STp->modes[STp->current_mode].defined) {
1496 		retval = (-ENXIO);
1497 		goto out;
1498 	}
1499 
1500 
1501 	/*
1502 	 * If there was a bus reset, block further access
1503 	 * to this device.
1504 	 */
1505 	if (STp->pos_unknown) {
1506 		retval = (-EIO);
1507 		goto out;
1508 	}
1509 
1510 	if (count == 0)
1511 		goto out;
1512 
1513 	DEB(
1514 	if (!STp->in_use) {
1515 		st_printk(ST_DEB_MSG, STp,
1516 			  "Incorrect device.\n");
1517 		retval = (-EIO);
1518 		goto out;
1519 	} ) /* end DEB */
1520 
1521 	if (STp->can_partitions &&
1522 	    (retval = switch_partition(STp)) < 0)
1523 		goto out;
1524 
1525 	if (STp->block_size == 0 && STp->max_block > 0 &&
1526 	    (count < STp->min_block || count > STp->max_block)) {
1527 		retval = (-EINVAL);
1528 		goto out;
1529 	}
1530 
1531 	if (STp->do_auto_lock && STp->door_locked == ST_UNLOCKED &&
1532 	    !do_door_lock(STp, 1))
1533 		STp->door_locked = ST_LOCKED_AUTO;
1534 
1535  out:
1536 	return retval;
1537 }
1538 
1539 
1540 static int setup_buffering(struct scsi_tape *STp, const char __user *buf,
1541 			   size_t count, int is_read)
1542 {
1543 	int i, bufsize, retval = 0;
1544 	struct st_buffer *STbp = STp->buffer;
1545 
1546 	if (is_read)
1547 		i = STp->try_dio_now && try_rdio;
1548 	else
1549 		i = STp->try_dio_now && try_wdio;
1550 
1551 	if (i && ((unsigned long)buf & queue_dma_alignment(
1552 					STp->device->request_queue)) == 0) {
1553 		i = sgl_map_user_pages(STbp, STbp->use_sg, (unsigned long)buf,
1554 				       count, (is_read ? READ : WRITE));
1555 		if (i > 0) {
1556 			STbp->do_dio = i;
1557 			STbp->buffer_bytes = 0;   /* can be used as transfer counter */
1558 		}
1559 		else
1560 			STbp->do_dio = 0;  /* fall back to buffering with any error */
1561 		STbp->sg_segs = STbp->do_dio;
1562 		DEB(
1563 		     if (STbp->do_dio) {
1564 			STp->nbr_dio++;
1565 			STp->nbr_pages += STbp->do_dio;
1566 		     }
1567 		)
1568 	} else
1569 		STbp->do_dio = 0;
1570 	DEB( STp->nbr_requests++; )
1571 
1572 	if (!STbp->do_dio) {
1573 		if (STp->block_size)
1574 			bufsize = STp->block_size > st_fixed_buffer_size ?
1575 				STp->block_size : st_fixed_buffer_size;
1576 		else {
1577 			bufsize = count;
1578 			/* Make sure that data from previous user is not leaked even if
1579 			   HBA does not return correct residual */
1580 			if (is_read && STp->sili && !STbp->cleared)
1581 				clear_buffer(STbp);
1582 		}
1583 
1584 		if (bufsize > STbp->buffer_size &&
1585 		    !enlarge_buffer(STbp, bufsize)) {
1586 			st_printk(KERN_WARNING, STp,
1587 				  "Can't allocate %d byte tape buffer.\n",
1588 				  bufsize);
1589 			retval = (-EOVERFLOW);
1590 			goto out;
1591 		}
1592 		if (STp->block_size)
1593 			STbp->buffer_blocks = bufsize / STp->block_size;
1594 	}
1595 
1596  out:
1597 	return retval;
1598 }
1599 
1600 
1601 /* Can be called more than once after each setup_buffer() */
1602 static void release_buffering(struct scsi_tape *STp, int is_read)
1603 {
1604 	struct st_buffer *STbp;
1605 
1606 	STbp = STp->buffer;
1607 	if (STbp->do_dio) {
1608 		sgl_unmap_user_pages(STbp, STbp->do_dio, is_read);
1609 		STbp->do_dio = 0;
1610 		STbp->sg_segs = 0;
1611 	}
1612 }
1613 
1614 
1615 /* Write command */
1616 static ssize_t
1617 st_write(struct file *filp, const char __user *buf, size_t count, loff_t * ppos)
1618 {
1619 	ssize_t total;
1620 	ssize_t i, do_count, blks, transfer;
1621 	ssize_t retval;
1622 	int undone, retry_eot = 0, scode;
1623 	int async_write;
1624 	unsigned char cmd[MAX_COMMAND_SIZE];
1625 	const char __user *b_point;
1626 	struct st_request *SRpnt = NULL;
1627 	struct scsi_tape *STp = filp->private_data;
1628 	struct st_modedef *STm;
1629 	struct st_partstat *STps;
1630 	struct st_buffer *STbp;
1631 
1632 	if (mutex_lock_interruptible(&STp->lock))
1633 		return -ERESTARTSYS;
1634 
1635 	retval = rw_checks(STp, filp, count);
1636 	if (retval || count == 0)
1637 		goto out;
1638 
1639 	/* Write must be integral number of blocks */
1640 	if (STp->block_size != 0 && (count % STp->block_size) != 0) {
1641 		st_printk(KERN_WARNING, STp,
1642 			  "Write not multiple of tape block size.\n");
1643 		retval = (-EINVAL);
1644 		goto out;
1645 	}
1646 
1647 	STm = &(STp->modes[STp->current_mode]);
1648 	STps = &(STp->ps[STp->partition]);
1649 
1650 	if (STp->write_prot) {
1651 		retval = (-EACCES);
1652 		goto out;
1653 	}
1654 
1655 
1656 	if (STps->rw == ST_READING) {
1657 		retval = flush_buffer(STp, 0);
1658 		if (retval)
1659 			goto out;
1660 		STps->rw = ST_WRITING;
1661 	} else if (STps->rw != ST_WRITING &&
1662 		   STps->drv_file == 0 && STps->drv_block == 0) {
1663 		if ((retval = set_mode_densblk(STp, STm)) < 0)
1664 			goto out;
1665 		if (STm->default_compression != ST_DONT_TOUCH &&
1666 		    !(STp->compression_changed)) {
1667 			if (st_compression(STp, (STm->default_compression == ST_YES))) {
1668 				st_printk(KERN_WARNING, STp,
1669 					  "Can't set default compression.\n");
1670 				if (modes_defined) {
1671 					retval = (-EINVAL);
1672 					goto out;
1673 				}
1674 			}
1675 		}
1676 	}
1677 
1678 	STbp = STp->buffer;
1679 	i = write_behind_check(STp);
1680 	if (i) {
1681 		if (i == -ENOSPC)
1682 			STps->eof = ST_EOM_OK;
1683 		else
1684 			STps->eof = ST_EOM_ERROR;
1685 	}
1686 
1687 	if (STps->eof == ST_EOM_OK) {
1688 		STps->eof = ST_EOD_1;  /* allow next write */
1689 		retval = (-ENOSPC);
1690 		goto out;
1691 	}
1692 	else if (STps->eof == ST_EOM_ERROR) {
1693 		retval = (-EIO);
1694 		goto out;
1695 	}
1696 
1697 	/* Check the buffer readability in cases where copy_user might catch
1698 	   the problems after some tape movement. */
1699 	if (STp->block_size != 0 &&
1700 	    !STbp->do_dio &&
1701 	    (copy_from_user(&i, buf, 1) != 0 ||
1702 	     copy_from_user(&i, buf + count - 1, 1) != 0)) {
1703 		retval = (-EFAULT);
1704 		goto out;
1705 	}
1706 
1707 	retval = setup_buffering(STp, buf, count, 0);
1708 	if (retval)
1709 		goto out;
1710 
1711 	total = count;
1712 
1713 	memset(cmd, 0, MAX_COMMAND_SIZE);
1714 	cmd[0] = WRITE_6;
1715 	cmd[1] = (STp->block_size != 0);
1716 
1717 	STps->rw = ST_WRITING;
1718 
1719 	b_point = buf;
1720 	while (count > 0 && !retry_eot) {
1721 
1722 		if (STbp->do_dio) {
1723 			do_count = count;
1724 		}
1725 		else {
1726 			if (STp->block_size == 0)
1727 				do_count = count;
1728 			else {
1729 				do_count = STbp->buffer_blocks * STp->block_size -
1730 					STbp->buffer_bytes;
1731 				if (do_count > count)
1732 					do_count = count;
1733 			}
1734 
1735 			i = append_to_buffer(b_point, STbp, do_count);
1736 			if (i) {
1737 				retval = i;
1738 				goto out;
1739 			}
1740 		}
1741 		count -= do_count;
1742 		b_point += do_count;
1743 
1744 		async_write = STp->block_size == 0 && !STbp->do_dio &&
1745 			STm->do_async_writes && STps->eof < ST_EOM_OK;
1746 
1747 		if (STp->block_size != 0 && STm->do_buffer_writes &&
1748 		    !(STp->try_dio_now && try_wdio) && STps->eof < ST_EOM_OK &&
1749 		    STbp->buffer_bytes < STbp->buffer_size) {
1750 			STp->dirty = 1;
1751 			/* Don't write a buffer that is not full enough. */
1752 			if (!async_write && count == 0)
1753 				break;
1754 		}
1755 
1756 	retry_write:
1757 		if (STp->block_size == 0)
1758 			blks = transfer = do_count;
1759 		else {
1760 			if (!STbp->do_dio)
1761 				blks = STbp->buffer_bytes;
1762 			else
1763 				blks = do_count;
1764 			blks /= STp->block_size;
1765 			transfer = blks * STp->block_size;
1766 		}
1767 		cmd[2] = blks >> 16;
1768 		cmd[3] = blks >> 8;
1769 		cmd[4] = blks;
1770 
1771 		SRpnt = st_do_scsi(SRpnt, STp, cmd, transfer, DMA_TO_DEVICE,
1772 				   STp->device->request_queue->rq_timeout,
1773 				   MAX_WRITE_RETRIES, !async_write);
1774 		if (!SRpnt) {
1775 			retval = STbp->syscall_result;
1776 			goto out;
1777 		}
1778 		if (async_write && !STbp->syscall_result) {
1779 			STbp->writing = transfer;
1780 			STp->dirty = !(STbp->writing ==
1781 				       STbp->buffer_bytes);
1782 			SRpnt = NULL;  /* Prevent releasing this request! */
1783 			DEB( STp->write_pending = 1; )
1784 			break;
1785 		}
1786 
1787 		if (STbp->syscall_result != 0) {
1788 			struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
1789 
1790 			DEBC_printk(STp, "Error on write:\n");
1791 			if (cmdstatp->have_sense && (cmdstatp->flags & SENSE_EOM)) {
1792 				scode = cmdstatp->sense_hdr.sense_key;
1793 				if (cmdstatp->remainder_valid)
1794 					undone = (int)cmdstatp->uremainder64;
1795 				else if (STp->block_size == 0 &&
1796 					 scode == VOLUME_OVERFLOW)
1797 					undone = transfer;
1798 				else
1799 					undone = 0;
1800 				if (STp->block_size != 0)
1801 					undone *= STp->block_size;
1802 				if (undone <= do_count) {
1803 					/* Only data from this write is not written */
1804 					count += undone;
1805 					b_point -= undone;
1806 					do_count -= undone;
1807 					if (STp->block_size)
1808 						blks = (transfer - undone) / STp->block_size;
1809 					STps->eof = ST_EOM_OK;
1810 					/* Continue in fixed block mode if all written
1811 					   in this request but still something left to write
1812 					   (retval left to zero)
1813 					*/
1814 					if (STp->block_size == 0 ||
1815 					    undone > 0 || count == 0)
1816 						retval = (-ENOSPC); /* EOM within current request */
1817 					DEBC_printk(STp, "EOM with %d "
1818 						    "bytes unwritten.\n",
1819 						    (int)count);
1820 				} else {
1821 					/* EOT within data buffered earlier (possible only
1822 					   in fixed block mode without direct i/o) */
1823 					if (!retry_eot && !cmdstatp->deferred &&
1824 					    (scode == NO_SENSE || scode == RECOVERED_ERROR)) {
1825 						move_buffer_data(STp->buffer, transfer - undone);
1826 						retry_eot = 1;
1827 						if (STps->drv_block >= 0) {
1828 							STps->drv_block += (transfer - undone) /
1829 								STp->block_size;
1830 						}
1831 						STps->eof = ST_EOM_OK;
1832 						DEBC_printk(STp, "Retry "
1833 							    "write of %d "
1834 							    "bytes at EOM.\n",
1835 							    STp->buffer->buffer_bytes);
1836 						goto retry_write;
1837 					}
1838 					else {
1839 						/* Either error within data buffered by driver or
1840 						   failed retry */
1841 						count -= do_count;
1842 						blks = do_count = 0;
1843 						STps->eof = ST_EOM_ERROR;
1844 						STps->drv_block = (-1); /* Too cautious? */
1845 						retval = (-EIO);	/* EOM for old data */
1846 						DEBC_printk(STp, "EOM with "
1847 							    "lost data.\n");
1848 					}
1849 				}
1850 			} else {
1851 				count += do_count;
1852 				STps->drv_block = (-1);		/* Too cautious? */
1853 				retval = STbp->syscall_result;
1854 			}
1855 
1856 		}
1857 
1858 		if (STps->drv_block >= 0) {
1859 			if (STp->block_size == 0)
1860 				STps->drv_block += (do_count > 0);
1861 			else
1862 				STps->drv_block += blks;
1863 		}
1864 
1865 		STbp->buffer_bytes = 0;
1866 		STp->dirty = 0;
1867 
1868 		if (retval || retry_eot) {
1869 			if (count < total)
1870 				retval = total - count;
1871 			goto out;
1872 		}
1873 	}
1874 
1875 	if (STps->eof == ST_EOD_1)
1876 		STps->eof = ST_EOM_OK;
1877 	else if (STps->eof != ST_EOM_OK)
1878 		STps->eof = ST_NOEOF;
1879 	retval = total - count;
1880 
1881  out:
1882 	if (SRpnt != NULL)
1883 		st_release_request(SRpnt);
1884 	release_buffering(STp, 0);
1885 	mutex_unlock(&STp->lock);
1886 
1887 	return retval;
1888 }
1889 
1890 /* Read data from the tape. Returns zero in the normal case, one if the
1891    eof status has changed, and the negative error code in case of a
1892    fatal error. Otherwise updates the buffer and the eof state.
1893 
1894    Does release user buffer mapping if it is set.
1895 */
1896 static long read_tape(struct scsi_tape *STp, long count,
1897 		      struct st_request ** aSRpnt)
1898 {
1899 	int transfer, blks, bytes;
1900 	unsigned char cmd[MAX_COMMAND_SIZE];
1901 	struct st_request *SRpnt;
1902 	struct st_modedef *STm;
1903 	struct st_partstat *STps;
1904 	struct st_buffer *STbp;
1905 	int retval = 0;
1906 
1907 	if (count == 0)
1908 		return 0;
1909 
1910 	STm = &(STp->modes[STp->current_mode]);
1911 	STps = &(STp->ps[STp->partition]);
1912 	if (STps->eof == ST_FM_HIT)
1913 		return 1;
1914 	STbp = STp->buffer;
1915 
1916 	if (STp->block_size == 0)
1917 		blks = bytes = count;
1918 	else {
1919 		if (!(STp->try_dio_now && try_rdio) && STm->do_read_ahead) {
1920 			blks = (STp->buffer)->buffer_blocks;
1921 			bytes = blks * STp->block_size;
1922 		} else {
1923 			bytes = count;
1924 			if (!STbp->do_dio && bytes > (STp->buffer)->buffer_size)
1925 				bytes = (STp->buffer)->buffer_size;
1926 			blks = bytes / STp->block_size;
1927 			bytes = blks * STp->block_size;
1928 		}
1929 	}
1930 
1931 	memset(cmd, 0, MAX_COMMAND_SIZE);
1932 	cmd[0] = READ_6;
1933 	cmd[1] = (STp->block_size != 0);
1934 	if (!cmd[1] && STp->sili)
1935 		cmd[1] |= 2;
1936 	cmd[2] = blks >> 16;
1937 	cmd[3] = blks >> 8;
1938 	cmd[4] = blks;
1939 
1940 	SRpnt = *aSRpnt;
1941 	SRpnt = st_do_scsi(SRpnt, STp, cmd, bytes, DMA_FROM_DEVICE,
1942 			   STp->device->request_queue->rq_timeout,
1943 			   MAX_RETRIES, 1);
1944 	release_buffering(STp, 1);
1945 	*aSRpnt = SRpnt;
1946 	if (!SRpnt)
1947 		return STbp->syscall_result;
1948 
1949 	STbp->read_pointer = 0;
1950 	STps->at_sm = 0;
1951 
1952 	/* Something to check */
1953 	if (STbp->syscall_result) {
1954 		struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
1955 
1956 		retval = 1;
1957 		DEBC_printk(STp,
1958 			    "Sense: %2x %2x %2x %2x %2x %2x %2x %2x\n",
1959 			    SRpnt->sense[0], SRpnt->sense[1],
1960 			    SRpnt->sense[2], SRpnt->sense[3],
1961 			    SRpnt->sense[4], SRpnt->sense[5],
1962 			    SRpnt->sense[6], SRpnt->sense[7]);
1963 		if (cmdstatp->have_sense) {
1964 
1965 			if (cmdstatp->sense_hdr.sense_key == BLANK_CHECK)
1966 				cmdstatp->flags &= 0xcf;	/* No need for EOM in this case */
1967 
1968 			if (cmdstatp->flags != 0) { /* EOF, EOM, or ILI */
1969 				/* Compute the residual count */
1970 				if (cmdstatp->remainder_valid)
1971 					transfer = (int)cmdstatp->uremainder64;
1972 				else
1973 					transfer = 0;
1974 				if (cmdstatp->sense_hdr.sense_key == MEDIUM_ERROR) {
1975 					if (STp->block_size == 0)
1976 						transfer = bytes;
1977 					/* Some drives set ILI with MEDIUM ERROR */
1978 					cmdstatp->flags &= ~SENSE_ILI;
1979 				}
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 = sign_extend32(get_unaligned_be24(&cmd[2]), 23);
2680 	if (direction)
2681 		sc = -sc;
2682 	st_printk(ST_DEB_MSG, STp, "Spacing tape %s over %d %s.\n",
2683 		  direction ? "backward" : "forward", sc, units);
2684 }
2685 #else
2686 #define ST_DEB_FORWARD  0
2687 #define ST_DEB_BACKWARD 1
2688 static void deb_space_print(struct scsi_tape *STp, int direction, char *units, unsigned char *cmd) {}
2689 #endif
2690 
2691 
2692 /* Internal ioctl function */
2693 static int st_int_ioctl(struct scsi_tape *STp, unsigned int cmd_in, unsigned long arg)
2694 {
2695 	int timeout;
2696 	long ltmp;
2697 	int ioctl_result;
2698 	int chg_eof = 1;
2699 	unsigned char cmd[MAX_COMMAND_SIZE];
2700 	struct st_request *SRpnt;
2701 	struct st_partstat *STps;
2702 	int fileno, blkno, at_sm, undone;
2703 	int datalen = 0, direction = DMA_NONE;
2704 
2705 	WARN_ON(STp->buffer->do_dio != 0);
2706 	if (STp->ready != ST_READY) {
2707 		if (STp->ready == ST_NO_TAPE)
2708 			return (-ENOMEDIUM);
2709 		else
2710 			return (-EIO);
2711 	}
2712 	timeout = STp->long_timeout;
2713 	STps = &(STp->ps[STp->partition]);
2714 	fileno = STps->drv_file;
2715 	blkno = STps->drv_block;
2716 	at_sm = STps->at_sm;
2717 
2718 	memset(cmd, 0, MAX_COMMAND_SIZE);
2719 	switch (cmd_in) {
2720 	case MTFSFM:
2721 		chg_eof = 0;	/* Changed from the FSF after this */
2722 		fallthrough;
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 		fallthrough;
2738 	case MTBSF:
2739 		cmd[0] = SPACE;
2740 		cmd[1] = 0x01;	/* Space FileMarks */
2741 		ltmp = (-arg);
2742 		cmd[2] = (ltmp >> 16);
2743 		cmd[3] = (ltmp >> 8);
2744 		cmd[4] = ltmp;
2745 		deb_space_print(STp, ST_DEB_BACKWARD, "filemarks", cmd);
2746 		if (fileno >= 0)
2747 			fileno -= arg;
2748 		blkno = (-1);	/* We can't know the block number */
2749 		at_sm &= (arg == 0);
2750 		break;
2751 	case MTFSR:
2752 		cmd[0] = SPACE;
2753 		cmd[1] = 0x00;	/* Space Blocks */
2754 		cmd[2] = (arg >> 16);
2755 		cmd[3] = (arg >> 8);
2756 		cmd[4] = arg;
2757 		deb_space_print(STp, ST_DEB_FORWARD, "blocks", cmd);
2758 		if (blkno >= 0)
2759 			blkno += arg;
2760 		at_sm &= (arg == 0);
2761 		break;
2762 	case MTBSR:
2763 		cmd[0] = SPACE;
2764 		cmd[1] = 0x00;	/* Space Blocks */
2765 		ltmp = (-arg);
2766 		cmd[2] = (ltmp >> 16);
2767 		cmd[3] = (ltmp >> 8);
2768 		cmd[4] = ltmp;
2769 		deb_space_print(STp, ST_DEB_BACKWARD, "blocks", cmd);
2770 		if (blkno >= 0)
2771 			blkno -= arg;
2772 		at_sm &= (arg == 0);
2773 		break;
2774 	case MTFSS:
2775 		cmd[0] = SPACE;
2776 		cmd[1] = 0x04;	/* Space Setmarks */
2777 		cmd[2] = (arg >> 16);
2778 		cmd[3] = (arg >> 8);
2779 		cmd[4] = arg;
2780 		deb_space_print(STp, ST_DEB_FORWARD, "setmarks", cmd);
2781 		if (arg != 0) {
2782 			blkno = fileno = (-1);
2783 			at_sm = 1;
2784 		}
2785 		break;
2786 	case MTBSS:
2787 		cmd[0] = SPACE;
2788 		cmd[1] = 0x04;	/* Space Setmarks */
2789 		ltmp = (-arg);
2790 		cmd[2] = (ltmp >> 16);
2791 		cmd[3] = (ltmp >> 8);
2792 		cmd[4] = ltmp;
2793 		deb_space_print(STp, ST_DEB_BACKWARD, "setmarks", cmd);
2794 		if (arg != 0) {
2795 			blkno = fileno = (-1);
2796 			at_sm = 1;
2797 		}
2798 		break;
2799 	case MTWEOF:
2800 	case MTWEOFI:
2801 	case MTWSM:
2802 		if (STp->write_prot)
2803 			return (-EACCES);
2804 		cmd[0] = WRITE_FILEMARKS;
2805 		if (cmd_in == MTWSM)
2806 			cmd[1] = 2;
2807 		if (cmd_in == MTWEOFI ||
2808 		    (cmd_in == MTWEOF && STp->immediate_filemark))
2809 			cmd[1] |= 1;
2810 		cmd[2] = (arg >> 16);
2811 		cmd[3] = (arg >> 8);
2812 		cmd[4] = arg;
2813 		timeout = STp->device->request_queue->rq_timeout;
2814 		DEBC(
2815 			if (cmd_in != MTWSM)
2816 				st_printk(ST_DEB_MSG, STp,
2817 					  "Writing %d filemarks.\n",
2818 					  cmd[2] * 65536 +
2819 					  cmd[3] * 256 +
2820 					  cmd[4]);
2821 			else
2822 				st_printk(ST_DEB_MSG, STp,
2823 					  "Writing %d setmarks.\n",
2824 					  cmd[2] * 65536 +
2825 					  cmd[3] * 256 +
2826 					  cmd[4]);
2827 		)
2828 		if (fileno >= 0)
2829 			fileno += arg;
2830 		blkno = 0;
2831 		at_sm = (cmd_in == MTWSM);
2832 		break;
2833 	case MTREW:
2834 		cmd[0] = REZERO_UNIT;
2835 		if (STp->immediate) {
2836 			cmd[1] = 1;	/* Don't wait for completion */
2837 			timeout = STp->device->request_queue->rq_timeout;
2838 		}
2839 		DEBC_printk(STp, "Rewinding tape.\n");
2840 		fileno = blkno = at_sm = 0;
2841 		break;
2842 	case MTNOP:
2843 		DEBC_printk(STp, "No op on tape.\n");
2844 		return 0;	/* Should do something ? */
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 	void __user *p = (void __user *)arg;
3501 	int i, cmd_nr, cmd_type, bt;
3502 	int retval = 0;
3503 	unsigned int blk;
3504 	struct scsi_tape *STp = file->private_data;
3505 	struct st_modedef *STm;
3506 	struct st_partstat *STps;
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 		retval = put_user_mtget(p, &mt_status);
3799 		if (retval)
3800 			goto out;
3801 
3802 		STp->recover_reg = 0;		/* Clear after read */
3803 		goto out;
3804 	}			/* End of MTIOCGET */
3805 	if (cmd_type == _IOC_TYPE(MTIOCPOS) && cmd_nr == _IOC_NR(MTIOCPOS)) {
3806 		struct mtpos mt_pos;
3807 		if (_IOC_SIZE(cmd_in) != sizeof(struct mtpos)) {
3808 			 retval = (-EINVAL);
3809 			 goto out;
3810 		}
3811 		if ((i = get_location(STp, &blk, &bt, 0)) < 0) {
3812 			retval = i;
3813 			goto out;
3814 		}
3815 		mt_pos.mt_blkno = blk;
3816 		retval = put_user_mtpos(p, &mt_pos);
3817 		goto out;
3818 	}
3819 	mutex_unlock(&STp->lock);
3820 
3821 	switch (cmd_in) {
3822 	case SG_IO:
3823 	case SCSI_IOCTL_SEND_COMMAND:
3824 	case CDROM_SEND_PACKET:
3825 		if (!capable(CAP_SYS_RAWIO))
3826 			return -EPERM;
3827 		break;
3828 	default:
3829 		break;
3830 	}
3831 
3832 	retval = scsi_ioctl(STp->device, file->f_mode, cmd_in, p);
3833 	if (!retval && cmd_in == SCSI_IOCTL_STOP_UNIT) {
3834 		/* unload */
3835 		STp->rew_at_close = 0;
3836 		STp->ready = ST_NO_TAPE;
3837 	}
3838 	return retval;
3839 
3840  out:
3841 	mutex_unlock(&STp->lock);
3842 	return retval;
3843 }
3844 
3845 #ifdef CONFIG_COMPAT
3846 static long st_compat_ioctl(struct file *file, unsigned int cmd_in, unsigned long arg)
3847 {
3848 	/* argument conversion is handled using put_user_mtpos/put_user_mtget */
3849 	switch (cmd_in) {
3850 	case MTIOCPOS32:
3851 		cmd_in = MTIOCPOS;
3852 		break;
3853 	case MTIOCGET32:
3854 		cmd_in = MTIOCGET;
3855 		break;
3856 	}
3857 
3858 	return st_ioctl(file, cmd_in, arg);
3859 }
3860 #endif
3861 
3862 
3863 
3864 /* Try to allocate a new tape buffer. Calling function must not hold
3865    dev_arr_lock. */
3866 static struct st_buffer *new_tape_buffer(int max_sg)
3867 {
3868 	struct st_buffer *tb;
3869 
3870 	tb = kzalloc(sizeof(struct st_buffer), GFP_KERNEL);
3871 	if (!tb) {
3872 		printk(KERN_NOTICE "st: Can't allocate new tape buffer.\n");
3873 		return NULL;
3874 	}
3875 	tb->frp_segs = 0;
3876 	tb->use_sg = max_sg;
3877 	tb->buffer_size = 0;
3878 
3879 	tb->reserved_pages = kcalloc(max_sg, sizeof(struct page *),
3880 				     GFP_KERNEL);
3881 	if (!tb->reserved_pages) {
3882 		kfree(tb);
3883 		return NULL;
3884 	}
3885 
3886 	return tb;
3887 }
3888 
3889 
3890 /* Try to allocate enough space in the tape buffer */
3891 #define ST_MAX_ORDER 6
3892 
3893 static int enlarge_buffer(struct st_buffer * STbuffer, int new_size)
3894 {
3895 	int segs, max_segs, b_size, order, got;
3896 	gfp_t priority;
3897 
3898 	if (new_size <= STbuffer->buffer_size)
3899 		return 1;
3900 
3901 	if (STbuffer->buffer_size <= PAGE_SIZE)
3902 		normalize_buffer(STbuffer);  /* Avoid extra segment */
3903 
3904 	max_segs = STbuffer->use_sg;
3905 
3906 	priority = GFP_KERNEL | __GFP_NOWARN;
3907 
3908 	if (STbuffer->cleared)
3909 		priority |= __GFP_ZERO;
3910 
3911 	if (STbuffer->frp_segs) {
3912 		order = STbuffer->reserved_page_order;
3913 		b_size = PAGE_SIZE << order;
3914 	} else {
3915 		for (b_size = PAGE_SIZE, order = 0;
3916 		     order < ST_MAX_ORDER &&
3917 			     max_segs * (PAGE_SIZE << order) < new_size;
3918 		     order++, b_size *= 2)
3919 			;  /* empty */
3920 		STbuffer->reserved_page_order = order;
3921 	}
3922 	if (max_segs * (PAGE_SIZE << order) < new_size) {
3923 		if (order == ST_MAX_ORDER)
3924 			return 0;
3925 		normalize_buffer(STbuffer);
3926 		return enlarge_buffer(STbuffer, new_size);
3927 	}
3928 
3929 	for (segs = STbuffer->frp_segs, got = STbuffer->buffer_size;
3930 	     segs < max_segs && got < new_size;) {
3931 		struct page *page;
3932 
3933 		page = alloc_pages(priority, order);
3934 		if (!page) {
3935 			DEB(STbuffer->buffer_size = got);
3936 			normalize_buffer(STbuffer);
3937 			return 0;
3938 		}
3939 
3940 		STbuffer->frp_segs += 1;
3941 		got += b_size;
3942 		STbuffer->buffer_size = got;
3943 		STbuffer->reserved_pages[segs] = page;
3944 		segs++;
3945 	}
3946 	STbuffer->b_data = page_address(STbuffer->reserved_pages[0]);
3947 
3948 	return 1;
3949 }
3950 
3951 
3952 /* Make sure that no data from previous user is in the internal buffer */
3953 static void clear_buffer(struct st_buffer * st_bp)
3954 {
3955 	int i;
3956 
3957 	for (i=0; i < st_bp->frp_segs; i++)
3958 		memset(page_address(st_bp->reserved_pages[i]), 0,
3959 		       PAGE_SIZE << st_bp->reserved_page_order);
3960 	st_bp->cleared = 1;
3961 }
3962 
3963 
3964 /* Release the extra buffer */
3965 static void normalize_buffer(struct st_buffer * STbuffer)
3966 {
3967 	int i, order = STbuffer->reserved_page_order;
3968 
3969 	for (i = 0; i < STbuffer->frp_segs; i++) {
3970 		__free_pages(STbuffer->reserved_pages[i], order);
3971 		STbuffer->buffer_size -= (PAGE_SIZE << order);
3972 	}
3973 	STbuffer->frp_segs = 0;
3974 	STbuffer->sg_segs = 0;
3975 	STbuffer->reserved_page_order = 0;
3976 	STbuffer->map_data.offset = 0;
3977 }
3978 
3979 
3980 /* Move data from the user buffer to the tape buffer. Returns zero (success) or
3981    negative error code. */
3982 static int append_to_buffer(const char __user *ubp, struct st_buffer * st_bp, int do_count)
3983 {
3984 	int i, cnt, res, offset;
3985 	int length = PAGE_SIZE << st_bp->reserved_page_order;
3986 
3987 	for (i = 0, offset = st_bp->buffer_bytes;
3988 	     i < st_bp->frp_segs && offset >= length; i++)
3989 		offset -= length;
3990 	if (i == st_bp->frp_segs) {	/* Should never happen */
3991 		printk(KERN_WARNING "st: append_to_buffer offset overflow.\n");
3992 		return (-EIO);
3993 	}
3994 	for (; i < st_bp->frp_segs && do_count > 0; i++) {
3995 		struct page *page = st_bp->reserved_pages[i];
3996 		cnt = length - offset < do_count ? length - offset : do_count;
3997 		res = copy_from_user(page_address(page) + offset, ubp, cnt);
3998 		if (res)
3999 			return (-EFAULT);
4000 		do_count -= cnt;
4001 		st_bp->buffer_bytes += cnt;
4002 		ubp += cnt;
4003 		offset = 0;
4004 	}
4005 	if (do_count) /* Should never happen */
4006 		return (-EIO);
4007 
4008 	return 0;
4009 }
4010 
4011 
4012 /* Move data from the tape buffer to the user buffer. Returns zero (success) or
4013    negative error code. */
4014 static int from_buffer(struct st_buffer * st_bp, char __user *ubp, int do_count)
4015 {
4016 	int i, cnt, res, offset;
4017 	int length = PAGE_SIZE << st_bp->reserved_page_order;
4018 
4019 	for (i = 0, offset = st_bp->read_pointer;
4020 	     i < st_bp->frp_segs && offset >= length; i++)
4021 		offset -= length;
4022 	if (i == st_bp->frp_segs) {	/* Should never happen */
4023 		printk(KERN_WARNING "st: from_buffer offset overflow.\n");
4024 		return (-EIO);
4025 	}
4026 	for (; i < st_bp->frp_segs && do_count > 0; i++) {
4027 		struct page *page = st_bp->reserved_pages[i];
4028 		cnt = length - offset < do_count ? length - offset : do_count;
4029 		res = copy_to_user(ubp, page_address(page) + offset, cnt);
4030 		if (res)
4031 			return (-EFAULT);
4032 		do_count -= cnt;
4033 		st_bp->buffer_bytes -= cnt;
4034 		st_bp->read_pointer += cnt;
4035 		ubp += cnt;
4036 		offset = 0;
4037 	}
4038 	if (do_count) /* Should never happen */
4039 		return (-EIO);
4040 
4041 	return 0;
4042 }
4043 
4044 
4045 /* Move data towards start of buffer */
4046 static void move_buffer_data(struct st_buffer * st_bp, int offset)
4047 {
4048 	int src_seg, dst_seg, src_offset = 0, dst_offset;
4049 	int count, total;
4050 	int length = PAGE_SIZE << st_bp->reserved_page_order;
4051 
4052 	if (offset == 0)
4053 		return;
4054 
4055 	total=st_bp->buffer_bytes - offset;
4056 	for (src_seg=0; src_seg < st_bp->frp_segs; src_seg++) {
4057 		src_offset = offset;
4058 		if (src_offset < length)
4059 			break;
4060 		offset -= length;
4061 	}
4062 
4063 	st_bp->buffer_bytes = st_bp->read_pointer = total;
4064 	for (dst_seg=dst_offset=0; total > 0; ) {
4065 		struct page *dpage = st_bp->reserved_pages[dst_seg];
4066 		struct page *spage = st_bp->reserved_pages[src_seg];
4067 
4068 		count = min(length - dst_offset, length - src_offset);
4069 		memmove(page_address(dpage) + dst_offset,
4070 			page_address(spage) + src_offset, count);
4071 		src_offset += count;
4072 		if (src_offset >= length) {
4073 			src_seg++;
4074 			src_offset = 0;
4075 		}
4076 		dst_offset += count;
4077 		if (dst_offset >= length) {
4078 			dst_seg++;
4079 			dst_offset = 0;
4080 		}
4081 		total -= count;
4082 	}
4083 }
4084 
4085 /* Validate the options from command line or module parameters */
4086 static void validate_options(void)
4087 {
4088 	if (buffer_kbs > 0)
4089 		st_fixed_buffer_size = buffer_kbs * ST_KILOBYTE;
4090 	if (max_sg_segs >= ST_FIRST_SG)
4091 		st_max_sg_segs = max_sg_segs;
4092 }
4093 
4094 #ifndef MODULE
4095 /* Set the boot options. Syntax is defined in Documenation/scsi/st.txt.
4096  */
4097 static int __init st_setup(char *str)
4098 {
4099 	int i, len, ints[5];
4100 	char *stp;
4101 
4102 	stp = get_options(str, ARRAY_SIZE(ints), ints);
4103 
4104 	if (ints[0] > 0) {
4105 		for (i = 0; i < ints[0] && i < ARRAY_SIZE(parms); i++)
4106 			if (parms[i].val)
4107 				*parms[i].val = ints[i + 1];
4108 	} else {
4109 		while (stp != NULL) {
4110 			for (i = 0; i < ARRAY_SIZE(parms); i++) {
4111 				len = strlen(parms[i].name);
4112 				if (!strncmp(stp, parms[i].name, len) &&
4113 				    (*(stp + len) == ':' || *(stp + len) == '=')) {
4114 					if (parms[i].val)
4115 						*parms[i].val =
4116 							simple_strtoul(stp + len + 1, NULL, 0);
4117 					else
4118 						printk(KERN_WARNING "st: Obsolete parameter %s\n",
4119 						       parms[i].name);
4120 					break;
4121 				}
4122 			}
4123 			if (i >= ARRAY_SIZE(parms))
4124 				 printk(KERN_WARNING "st: invalid parameter in '%s'\n",
4125 					stp);
4126 			stp = strchr(stp, ',');
4127 			if (stp)
4128 				stp++;
4129 		}
4130 	}
4131 
4132 	validate_options();
4133 
4134 	return 1;
4135 }
4136 
4137 __setup("st=", st_setup);
4138 
4139 #endif
4140 
4141 static const struct file_operations st_fops =
4142 {
4143 	.owner =	THIS_MODULE,
4144 	.read =		st_read,
4145 	.write =	st_write,
4146 	.unlocked_ioctl = st_ioctl,
4147 #ifdef CONFIG_COMPAT
4148 	.compat_ioctl = st_compat_ioctl,
4149 #endif
4150 	.open =		st_open,
4151 	.flush =	st_flush,
4152 	.release =	st_release,
4153 	.llseek =	noop_llseek,
4154 };
4155 
4156 static int create_one_cdev(struct scsi_tape *tape, int mode, int rew)
4157 {
4158 	int i, error;
4159 	dev_t cdev_devno;
4160 	struct cdev *cdev;
4161 	struct device *dev;
4162 	struct st_modedef *STm = &(tape->modes[mode]);
4163 	char name[10];
4164 	int dev_num = tape->index;
4165 
4166 	cdev_devno = MKDEV(SCSI_TAPE_MAJOR, TAPE_MINOR(dev_num, mode, rew));
4167 
4168 	cdev = cdev_alloc();
4169 	if (!cdev) {
4170 		pr_err("st%d: out of memory. Device not attached.\n", dev_num);
4171 		error = -ENOMEM;
4172 		goto out;
4173 	}
4174 	cdev->owner = THIS_MODULE;
4175 	cdev->ops = &st_fops;
4176 	STm->cdevs[rew] = cdev;
4177 
4178 	error = cdev_add(cdev, cdev_devno, 1);
4179 	if (error) {
4180 		pr_err("st%d: Can't add %s-rewind mode %d\n", dev_num,
4181 		       rew ? "non" : "auto", mode);
4182 		pr_err("st%d: Device not attached.\n", dev_num);
4183 		goto out_free;
4184 	}
4185 
4186 	i = mode << (4 - ST_NBR_MODE_BITS);
4187 	snprintf(name, 10, "%s%s%s", rew ? "n" : "",
4188 		 tape->name, st_formats[i]);
4189 
4190 	dev = device_create(&st_sysfs_class, &tape->device->sdev_gendev,
4191 			    cdev_devno, &tape->modes[mode], "%s", name);
4192 	if (IS_ERR(dev)) {
4193 		pr_err("st%d: device_create failed\n", dev_num);
4194 		error = PTR_ERR(dev);
4195 		goto out_free;
4196 	}
4197 
4198 	STm->devs[rew] = dev;
4199 
4200 	return 0;
4201 out_free:
4202 	cdev_del(STm->cdevs[rew]);
4203 out:
4204 	STm->cdevs[rew] = NULL;
4205 	STm->devs[rew] = NULL;
4206 	return error;
4207 }
4208 
4209 static int create_cdevs(struct scsi_tape *tape)
4210 {
4211 	int mode, error;
4212 	for (mode = 0; mode < ST_NBR_MODES; ++mode) {
4213 		error = create_one_cdev(tape, mode, 0);
4214 		if (error)
4215 			return error;
4216 		error = create_one_cdev(tape, mode, 1);
4217 		if (error)
4218 			return error;
4219 	}
4220 
4221 	return sysfs_create_link(&tape->device->sdev_gendev.kobj,
4222 				 &tape->modes[0].devs[0]->kobj, "tape");
4223 }
4224 
4225 static void remove_cdevs(struct scsi_tape *tape)
4226 {
4227 	int mode, rew;
4228 	sysfs_remove_link(&tape->device->sdev_gendev.kobj, "tape");
4229 	for (mode = 0; mode < ST_NBR_MODES; mode++) {
4230 		struct st_modedef *STm = &(tape->modes[mode]);
4231 		for (rew = 0; rew < 2; rew++) {
4232 			if (STm->cdevs[rew])
4233 				cdev_del(STm->cdevs[rew]);
4234 			if (STm->devs[rew])
4235 				device_unregister(STm->devs[rew]);
4236 		}
4237 	}
4238 }
4239 
4240 static int st_probe(struct device *dev)
4241 {
4242 	struct scsi_device *SDp = to_scsi_device(dev);
4243 	struct scsi_tape *tpnt = NULL;
4244 	struct st_modedef *STm;
4245 	struct st_partstat *STps;
4246 	struct st_buffer *buffer;
4247 	int i, error;
4248 	char *stp;
4249 
4250 	if (SDp->type != TYPE_TAPE)
4251 		return -ENODEV;
4252 	if ((stp = st_incompatible(SDp))) {
4253 		sdev_printk(KERN_INFO, SDp,
4254 			    "OnStream tapes are no longer supported;\n");
4255 		sdev_printk(KERN_INFO, SDp,
4256 			    "please mail to linux-scsi@vger.kernel.org.\n");
4257 		return -ENODEV;
4258 	}
4259 
4260 	scsi_autopm_get_device(SDp);
4261 	i = queue_max_segments(SDp->request_queue);
4262 	if (st_max_sg_segs < i)
4263 		i = st_max_sg_segs;
4264 	buffer = new_tape_buffer(i);
4265 	if (buffer == NULL) {
4266 		sdev_printk(KERN_ERR, SDp,
4267 			    "st: Can't allocate new tape buffer. "
4268 			    "Device not attached.\n");
4269 		goto out;
4270 	}
4271 
4272 	tpnt = kzalloc(sizeof(struct scsi_tape), GFP_KERNEL);
4273 	if (tpnt == NULL) {
4274 		sdev_printk(KERN_ERR, SDp,
4275 			    "st: Can't allocate device descriptor.\n");
4276 		goto out_buffer_free;
4277 	}
4278 	kref_init(&tpnt->kref);
4279 	tpnt->driver = &st_template;
4280 
4281 	tpnt->device = SDp;
4282 	if (SDp->scsi_level <= 2)
4283 		tpnt->tape_type = MT_ISSCSI1;
4284 	else
4285 		tpnt->tape_type = MT_ISSCSI2;
4286 
4287 	tpnt->buffer = buffer;
4288 	tpnt->buffer->last_SRpnt = NULL;
4289 
4290 	tpnt->inited = 0;
4291 	tpnt->dirty = 0;
4292 	tpnt->in_use = 0;
4293 	tpnt->drv_buffer = 1;	/* Try buffering if no mode sense */
4294 	tpnt->use_pf = (SDp->scsi_level >= SCSI_2);
4295 	tpnt->density = 0;
4296 	tpnt->do_auto_lock = ST_AUTO_LOCK;
4297 	tpnt->can_bsr = (SDp->scsi_level > 2 ? 1 : ST_IN_FILE_POS); /* BSR mandatory in SCSI3 */
4298 	tpnt->can_partitions = 0;
4299 	tpnt->two_fm = ST_TWO_FM;
4300 	tpnt->fast_mteom = ST_FAST_MTEOM;
4301 	tpnt->scsi2_logical = ST_SCSI2LOGICAL;
4302 	tpnt->sili = ST_SILI;
4303 	tpnt->immediate = ST_NOWAIT;
4304 	tpnt->immediate_filemark = 0;
4305 	tpnt->default_drvbuffer = 0xff;		/* No forced buffering */
4306 	tpnt->partition = 0;
4307 	tpnt->new_partition = 0;
4308 	tpnt->nbr_partitions = 0;
4309 	blk_queue_rq_timeout(tpnt->device->request_queue, ST_TIMEOUT);
4310 	tpnt->long_timeout = ST_LONG_TIMEOUT;
4311 	tpnt->try_dio = try_direct_io;
4312 
4313 	for (i = 0; i < ST_NBR_MODES; i++) {
4314 		STm = &(tpnt->modes[i]);
4315 		STm->defined = 0;
4316 		STm->sysv = ST_SYSV;
4317 		STm->defaults_for_writes = 0;
4318 		STm->do_async_writes = ST_ASYNC_WRITES;
4319 		STm->do_buffer_writes = ST_BUFFER_WRITES;
4320 		STm->do_read_ahead = ST_READ_AHEAD;
4321 		STm->default_compression = ST_DONT_TOUCH;
4322 		STm->default_blksize = (-1);	/* No forced size */
4323 		STm->default_density = (-1);	/* No forced density */
4324 		STm->tape = tpnt;
4325 	}
4326 
4327 	for (i = 0; i < ST_NBR_PARTITIONS; i++) {
4328 		STps = &(tpnt->ps[i]);
4329 		STps->rw = ST_IDLE;
4330 		STps->eof = ST_NOEOF;
4331 		STps->at_sm = 0;
4332 		STps->last_block_valid = 0;
4333 		STps->drv_block = (-1);
4334 		STps->drv_file = (-1);
4335 	}
4336 
4337 	tpnt->current_mode = 0;
4338 	tpnt->modes[0].defined = 1;
4339 
4340 	tpnt->density_changed = tpnt->compression_changed =
4341 	    tpnt->blksize_changed = 0;
4342 	mutex_init(&tpnt->lock);
4343 
4344 	idr_preload(GFP_KERNEL);
4345 	spin_lock(&st_index_lock);
4346 	error = idr_alloc(&st_index_idr, tpnt, 0, ST_MAX_TAPES + 1, GFP_NOWAIT);
4347 	spin_unlock(&st_index_lock);
4348 	idr_preload_end();
4349 	if (error < 0) {
4350 		pr_warn("st: idr allocation failed: %d\n", error);
4351 		goto out_free_tape;
4352 	}
4353 	tpnt->index = error;
4354 	sprintf(tpnt->name, "st%d", tpnt->index);
4355 	tpnt->stats = kzalloc(sizeof(struct scsi_tape_stats), GFP_KERNEL);
4356 	if (tpnt->stats == NULL) {
4357 		sdev_printk(KERN_ERR, SDp,
4358 			    "st: Can't allocate statistics.\n");
4359 		goto out_idr_remove;
4360 	}
4361 
4362 	dev_set_drvdata(dev, tpnt);
4363 
4364 
4365 	error = create_cdevs(tpnt);
4366 	if (error)
4367 		goto out_remove_devs;
4368 	scsi_autopm_put_device(SDp);
4369 
4370 	sdev_printk(KERN_NOTICE, SDp,
4371 		    "Attached scsi tape %s\n", tpnt->name);
4372 	sdev_printk(KERN_INFO, SDp, "%s: try direct i/o: %s (alignment %d B)\n",
4373 		    tpnt->name, tpnt->try_dio ? "yes" : "no",
4374 		    queue_dma_alignment(SDp->request_queue) + 1);
4375 
4376 	return 0;
4377 
4378 out_remove_devs:
4379 	remove_cdevs(tpnt);
4380 	kfree(tpnt->stats);
4381 out_idr_remove:
4382 	spin_lock(&st_index_lock);
4383 	idr_remove(&st_index_idr, tpnt->index);
4384 	spin_unlock(&st_index_lock);
4385 out_free_tape:
4386 	kfree(tpnt);
4387 out_buffer_free:
4388 	kfree(buffer);
4389 out:
4390 	scsi_autopm_put_device(SDp);
4391 	return -ENODEV;
4392 };
4393 
4394 
4395 static int st_remove(struct device *dev)
4396 {
4397 	struct scsi_tape *tpnt = dev_get_drvdata(dev);
4398 	int index = tpnt->index;
4399 
4400 	scsi_autopm_get_device(to_scsi_device(dev));
4401 	remove_cdevs(tpnt);
4402 
4403 	mutex_lock(&st_ref_mutex);
4404 	kref_put(&tpnt->kref, scsi_tape_release);
4405 	mutex_unlock(&st_ref_mutex);
4406 	spin_lock(&st_index_lock);
4407 	idr_remove(&st_index_idr, index);
4408 	spin_unlock(&st_index_lock);
4409 	return 0;
4410 }
4411 
4412 /**
4413  *      scsi_tape_release - Called to free the Scsi_Tape structure
4414  *      @kref: pointer to embedded kref
4415  *
4416  *      st_ref_mutex must be held entering this routine.  Because it is
4417  *      called on last put, you should always use the scsi_tape_get()
4418  *      scsi_tape_put() helpers which manipulate the semaphore directly
4419  *      and never do a direct kref_put().
4420  **/
4421 static void scsi_tape_release(struct kref *kref)
4422 {
4423 	struct scsi_tape *tpnt = to_scsi_tape(kref);
4424 
4425 	tpnt->device = NULL;
4426 
4427 	if (tpnt->buffer) {
4428 		normalize_buffer(tpnt->buffer);
4429 		kfree(tpnt->buffer->reserved_pages);
4430 		kfree(tpnt->buffer);
4431 	}
4432 
4433 	kfree(tpnt->stats);
4434 	kfree(tpnt);
4435 	return;
4436 }
4437 
4438 static struct class st_sysfs_class = {
4439 	.name = "scsi_tape",
4440 	.dev_groups = st_dev_groups,
4441 };
4442 
4443 static int __init init_st(void)
4444 {
4445 	int err;
4446 
4447 	validate_options();
4448 
4449 	printk(KERN_INFO "st: Version %s, fixed bufsize %d, s/g segs %d\n",
4450 		verstr, st_fixed_buffer_size, st_max_sg_segs);
4451 
4452 	debugging = (debug_flag > 0) ? debug_flag : NO_DEBUG;
4453 	if (debugging) {
4454 		printk(KERN_INFO "st: Debugging enabled debug_flag = %d\n",
4455 			debugging);
4456 	}
4457 
4458 	err = class_register(&st_sysfs_class);
4459 	if (err) {
4460 		pr_err("Unable register sysfs class for SCSI tapes\n");
4461 		return err;
4462 	}
4463 
4464 	err = register_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
4465 				     ST_MAX_TAPE_ENTRIES, "st");
4466 	if (err) {
4467 		printk(KERN_ERR "Unable to get major %d for SCSI tapes\n",
4468 		       SCSI_TAPE_MAJOR);
4469 		goto err_class;
4470 	}
4471 
4472 	err = scsi_register_driver(&st_template.gendrv);
4473 	if (err)
4474 		goto err_chrdev;
4475 
4476 	return 0;
4477 
4478 err_chrdev:
4479 	unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
4480 				 ST_MAX_TAPE_ENTRIES);
4481 err_class:
4482 	class_unregister(&st_sysfs_class);
4483 	return err;
4484 }
4485 
4486 static void __exit exit_st(void)
4487 {
4488 	scsi_unregister_driver(&st_template.gendrv);
4489 	unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
4490 				 ST_MAX_TAPE_ENTRIES);
4491 	class_unregister(&st_sysfs_class);
4492 	idr_destroy(&st_index_idr);
4493 	printk(KERN_INFO "st: Unloaded.\n");
4494 }
4495 
4496 module_init(init_st);
4497 module_exit(exit_st);
4498 
4499 
4500 /* The sysfs driver interface. Read-only at the moment */
4501 static ssize_t try_direct_io_show(struct device_driver *ddp, char *buf)
4502 {
4503 	return scnprintf(buf, PAGE_SIZE, "%d\n", try_direct_io);
4504 }
4505 static DRIVER_ATTR_RO(try_direct_io);
4506 
4507 static ssize_t fixed_buffer_size_show(struct device_driver *ddp, char *buf)
4508 {
4509 	return scnprintf(buf, PAGE_SIZE, "%d\n", st_fixed_buffer_size);
4510 }
4511 static DRIVER_ATTR_RO(fixed_buffer_size);
4512 
4513 static ssize_t max_sg_segs_show(struct device_driver *ddp, char *buf)
4514 {
4515 	return scnprintf(buf, PAGE_SIZE, "%d\n", st_max_sg_segs);
4516 }
4517 static DRIVER_ATTR_RO(max_sg_segs);
4518 
4519 static ssize_t version_show(struct device_driver *ddd, char *buf)
4520 {
4521 	return scnprintf(buf, PAGE_SIZE, "[%s]\n", verstr);
4522 }
4523 static DRIVER_ATTR_RO(version);
4524 
4525 #if DEBUG
4526 static ssize_t debug_flag_store(struct device_driver *ddp,
4527 	const char *buf, size_t count)
4528 {
4529 /* We only care what the first byte of the data is the rest is unused.
4530  * if it's a '1' we turn on debug and if it's a '0' we disable it. All
4531  * other values have -EINVAL returned if they are passed in.
4532  */
4533 	if (count > 0) {
4534 		if (buf[0] == '0') {
4535 			debugging = NO_DEBUG;
4536 			return count;
4537 		} else if (buf[0] == '1') {
4538 			debugging = 1;
4539 			return count;
4540 		}
4541 	}
4542 	return -EINVAL;
4543 }
4544 
4545 static ssize_t debug_flag_show(struct device_driver *ddp, char *buf)
4546 {
4547 	return scnprintf(buf, PAGE_SIZE, "%d\n", debugging);
4548 }
4549 static DRIVER_ATTR_RW(debug_flag);
4550 #endif
4551 
4552 static struct attribute *st_drv_attrs[] = {
4553 	&driver_attr_try_direct_io.attr,
4554 	&driver_attr_fixed_buffer_size.attr,
4555 	&driver_attr_max_sg_segs.attr,
4556 	&driver_attr_version.attr,
4557 #if DEBUG
4558 	&driver_attr_debug_flag.attr,
4559 #endif
4560 	NULL,
4561 };
4562 ATTRIBUTE_GROUPS(st_drv);
4563 
4564 /* The sysfs simple class interface */
4565 static ssize_t
4566 defined_show(struct device *dev, struct device_attribute *attr, char *buf)
4567 {
4568 	struct st_modedef *STm = dev_get_drvdata(dev);
4569 	ssize_t l = 0;
4570 
4571 	l = snprintf(buf, PAGE_SIZE, "%d\n", STm->defined);
4572 	return l;
4573 }
4574 static DEVICE_ATTR_RO(defined);
4575 
4576 static ssize_t
4577 default_blksize_show(struct device *dev, struct device_attribute *attr,
4578 		     char *buf)
4579 {
4580 	struct st_modedef *STm = dev_get_drvdata(dev);
4581 	ssize_t l = 0;
4582 
4583 	l = snprintf(buf, PAGE_SIZE, "%d\n", STm->default_blksize);
4584 	return l;
4585 }
4586 static DEVICE_ATTR_RO(default_blksize);
4587 
4588 static ssize_t
4589 default_density_show(struct device *dev, struct device_attribute *attr,
4590 		     char *buf)
4591 {
4592 	struct st_modedef *STm = dev_get_drvdata(dev);
4593 	ssize_t l = 0;
4594 	char *fmt;
4595 
4596 	fmt = STm->default_density >= 0 ? "0x%02x\n" : "%d\n";
4597 	l = snprintf(buf, PAGE_SIZE, fmt, STm->default_density);
4598 	return l;
4599 }
4600 static DEVICE_ATTR_RO(default_density);
4601 
4602 static ssize_t
4603 default_compression_show(struct device *dev, struct device_attribute *attr,
4604 			 char *buf)
4605 {
4606 	struct st_modedef *STm = dev_get_drvdata(dev);
4607 	ssize_t l = 0;
4608 
4609 	l = snprintf(buf, PAGE_SIZE, "%d\n", STm->default_compression - 1);
4610 	return l;
4611 }
4612 static DEVICE_ATTR_RO(default_compression);
4613 
4614 static ssize_t
4615 options_show(struct device *dev, struct device_attribute *attr, char *buf)
4616 {
4617 	struct st_modedef *STm = dev_get_drvdata(dev);
4618 	struct scsi_tape *STp = STm->tape;
4619 	int options;
4620 	ssize_t l = 0;
4621 
4622 	options = STm->do_buffer_writes ? MT_ST_BUFFER_WRITES : 0;
4623 	options |= STm->do_async_writes ? MT_ST_ASYNC_WRITES : 0;
4624 	options |= STm->do_read_ahead ? MT_ST_READ_AHEAD : 0;
4625 	DEB( options |= debugging ? MT_ST_DEBUGGING : 0 );
4626 	options |= STp->two_fm ? MT_ST_TWO_FM : 0;
4627 	options |= STp->fast_mteom ? MT_ST_FAST_MTEOM : 0;
4628 	options |= STm->defaults_for_writes ? MT_ST_DEF_WRITES : 0;
4629 	options |= STp->can_bsr ? MT_ST_CAN_BSR : 0;
4630 	options |= STp->omit_blklims ? MT_ST_NO_BLKLIMS : 0;
4631 	options |= STp->can_partitions ? MT_ST_CAN_PARTITIONS : 0;
4632 	options |= STp->scsi2_logical ? MT_ST_SCSI2LOGICAL : 0;
4633 	options |= STm->sysv ? MT_ST_SYSV : 0;
4634 	options |= STp->immediate ? MT_ST_NOWAIT : 0;
4635 	options |= STp->immediate_filemark ? MT_ST_NOWAIT_EOF : 0;
4636 	options |= STp->sili ? MT_ST_SILI : 0;
4637 
4638 	l = snprintf(buf, PAGE_SIZE, "0x%08x\n", options);
4639 	return l;
4640 }
4641 static DEVICE_ATTR_RO(options);
4642 
4643 /* Support for tape stats */
4644 
4645 /**
4646  * read_cnt_show - return read count - count of reads made from tape drive
4647  * @dev: struct device
4648  * @attr: attribute structure
4649  * @buf: buffer to return formatted data in
4650  */
4651 static ssize_t read_cnt_show(struct device *dev,
4652 	struct device_attribute *attr, char *buf)
4653 {
4654 	struct st_modedef *STm = dev_get_drvdata(dev);
4655 
4656 	return sprintf(buf, "%lld",
4657 		       (long long)atomic64_read(&STm->tape->stats->read_cnt));
4658 }
4659 static DEVICE_ATTR_RO(read_cnt);
4660 
4661 /**
4662  * read_byte_cnt_show - return read byte count - tape drives
4663  * may use blocks less than 512 bytes this gives the raw byte count of
4664  * of data read from the tape drive.
4665  * @dev: struct device
4666  * @attr: attribute structure
4667  * @buf: buffer to return formatted data in
4668  */
4669 static ssize_t read_byte_cnt_show(struct device *dev,
4670 	struct device_attribute *attr, char *buf)
4671 {
4672 	struct st_modedef *STm = dev_get_drvdata(dev);
4673 
4674 	return sprintf(buf, "%lld",
4675 		       (long long)atomic64_read(&STm->tape->stats->read_byte_cnt));
4676 }
4677 static DEVICE_ATTR_RO(read_byte_cnt);
4678 
4679 /**
4680  * read_ns_show - return read ns - overall time spent waiting on reads in ns.
4681  * @dev: struct device
4682  * @attr: attribute structure
4683  * @buf: buffer to return formatted data in
4684  */
4685 static ssize_t read_ns_show(struct device *dev,
4686 	struct device_attribute *attr, char *buf)
4687 {
4688 	struct st_modedef *STm = dev_get_drvdata(dev);
4689 
4690 	return sprintf(buf, "%lld",
4691 		       (long long)atomic64_read(&STm->tape->stats->tot_read_time));
4692 }
4693 static DEVICE_ATTR_RO(read_ns);
4694 
4695 /**
4696  * write_cnt_show - write count - number of user calls
4697  * to write(2) that have written data to tape.
4698  * @dev: struct device
4699  * @attr: attribute structure
4700  * @buf: buffer to return formatted data in
4701  */
4702 static ssize_t write_cnt_show(struct device *dev,
4703 	struct device_attribute *attr, char *buf)
4704 {
4705 	struct st_modedef *STm = dev_get_drvdata(dev);
4706 
4707 	return sprintf(buf, "%lld",
4708 		       (long long)atomic64_read(&STm->tape->stats->write_cnt));
4709 }
4710 static DEVICE_ATTR_RO(write_cnt);
4711 
4712 /**
4713  * write_byte_cnt_show - write byte count - raw count of
4714  * bytes written to tape.
4715  * @dev: struct device
4716  * @attr: attribute structure
4717  * @buf: buffer to return formatted data in
4718  */
4719 static ssize_t write_byte_cnt_show(struct device *dev,
4720 	struct device_attribute *attr, char *buf)
4721 {
4722 	struct st_modedef *STm = dev_get_drvdata(dev);
4723 
4724 	return sprintf(buf, "%lld",
4725 		       (long long)atomic64_read(&STm->tape->stats->write_byte_cnt));
4726 }
4727 static DEVICE_ATTR_RO(write_byte_cnt);
4728 
4729 /**
4730  * write_ns_show - write ns - number of nanoseconds waiting on write
4731  * requests to complete.
4732  * @dev: struct device
4733  * @attr: attribute structure
4734  * @buf: buffer to return formatted data in
4735  */
4736 static ssize_t write_ns_show(struct device *dev,
4737 	struct device_attribute *attr, char *buf)
4738 {
4739 	struct st_modedef *STm = dev_get_drvdata(dev);
4740 
4741 	return sprintf(buf, "%lld",
4742 		       (long long)atomic64_read(&STm->tape->stats->tot_write_time));
4743 }
4744 static DEVICE_ATTR_RO(write_ns);
4745 
4746 /**
4747  * in_flight_show - number of I/Os currently in flight -
4748  * in most cases this will be either 0 or 1. It may be higher if someone
4749  * has also issued other SCSI commands such as via an ioctl.
4750  * @dev: struct device
4751  * @attr: attribute structure
4752  * @buf: buffer to return formatted data in
4753  */
4754 static ssize_t in_flight_show(struct device *dev,
4755 	struct device_attribute *attr, char *buf)
4756 {
4757 	struct st_modedef *STm = dev_get_drvdata(dev);
4758 
4759 	return sprintf(buf, "%lld",
4760 		       (long long)atomic64_read(&STm->tape->stats->in_flight));
4761 }
4762 static DEVICE_ATTR_RO(in_flight);
4763 
4764 /**
4765  * io_ns_show - io wait ns - this is the number of ns spent
4766  * waiting on all I/O to complete. This includes tape movement commands
4767  * such as rewinding, seeking to end of file or tape, it also includes
4768  * read and write. To determine the time spent on tape movement
4769  * subtract the read and write ns from this value.
4770  * @dev: struct device
4771  * @attr: attribute structure
4772  * @buf: buffer to return formatted data in
4773  */
4774 static ssize_t io_ns_show(struct device *dev,
4775 	struct device_attribute *attr, char *buf)
4776 {
4777 	struct st_modedef *STm = dev_get_drvdata(dev);
4778 
4779 	return sprintf(buf, "%lld",
4780 		       (long long)atomic64_read(&STm->tape->stats->tot_io_time));
4781 }
4782 static DEVICE_ATTR_RO(io_ns);
4783 
4784 /**
4785  * other_cnt_show - other io count - this is the number of
4786  * I/O requests other than read and write requests.
4787  * Typically these are tape movement requests but will include driver
4788  * tape movement. This includes only requests issued by the st driver.
4789  * @dev: struct device
4790  * @attr: attribute structure
4791  * @buf: buffer to return formatted data in
4792  */
4793 static ssize_t other_cnt_show(struct device *dev,
4794 	struct device_attribute *attr, char *buf)
4795 {
4796 	struct st_modedef *STm = dev_get_drvdata(dev);
4797 
4798 	return sprintf(buf, "%lld",
4799 		       (long long)atomic64_read(&STm->tape->stats->other_cnt));
4800 }
4801 static DEVICE_ATTR_RO(other_cnt);
4802 
4803 /**
4804  * resid_cnt_show - A count of the number of times we get a residual
4805  * count - this should indicate someone issuing reads larger than the
4806  * block size on tape.
4807  * @dev: struct device
4808  * @attr: attribute structure
4809  * @buf: buffer to return formatted data in
4810  */
4811 static ssize_t resid_cnt_show(struct device *dev,
4812 	struct device_attribute *attr, char *buf)
4813 {
4814 	struct st_modedef *STm = dev_get_drvdata(dev);
4815 
4816 	return sprintf(buf, "%lld",
4817 		       (long long)atomic64_read(&STm->tape->stats->resid_cnt));
4818 }
4819 static DEVICE_ATTR_RO(resid_cnt);
4820 
4821 static struct attribute *st_dev_attrs[] = {
4822 	&dev_attr_defined.attr,
4823 	&dev_attr_default_blksize.attr,
4824 	&dev_attr_default_density.attr,
4825 	&dev_attr_default_compression.attr,
4826 	&dev_attr_options.attr,
4827 	NULL,
4828 };
4829 
4830 static struct attribute *st_stats_attrs[] = {
4831 	&dev_attr_read_cnt.attr,
4832 	&dev_attr_read_byte_cnt.attr,
4833 	&dev_attr_read_ns.attr,
4834 	&dev_attr_write_cnt.attr,
4835 	&dev_attr_write_byte_cnt.attr,
4836 	&dev_attr_write_ns.attr,
4837 	&dev_attr_in_flight.attr,
4838 	&dev_attr_io_ns.attr,
4839 	&dev_attr_other_cnt.attr,
4840 	&dev_attr_resid_cnt.attr,
4841 	NULL,
4842 };
4843 
4844 static struct attribute_group stats_group = {
4845 	.name = "stats",
4846 	.attrs = st_stats_attrs,
4847 };
4848 
4849 static struct attribute_group st_group = {
4850 	.attrs = st_dev_attrs,
4851 };
4852 
4853 static const struct attribute_group *st_dev_groups[] = {
4854 	&st_group,
4855 	&stats_group,
4856 	NULL,
4857 };
4858 
4859 /* The following functions may be useful for a larger audience. */
4860 static int sgl_map_user_pages(struct st_buffer *STbp,
4861 			      const unsigned int max_pages, unsigned long uaddr,
4862 			      size_t count, int rw)
4863 {
4864 	unsigned long end = (uaddr + count + PAGE_SIZE - 1) >> PAGE_SHIFT;
4865 	unsigned long start = uaddr >> PAGE_SHIFT;
4866 	const int nr_pages = end - start;
4867 	int res, i;
4868 	struct page **pages;
4869 	struct rq_map_data *mdata = &STbp->map_data;
4870 
4871 	/* User attempted Overflow! */
4872 	if ((uaddr + count) < uaddr)
4873 		return -EINVAL;
4874 
4875 	/* Too big */
4876         if (nr_pages > max_pages)
4877 		return -ENOMEM;
4878 
4879 	/* Hmm? */
4880 	if (count == 0)
4881 		return 0;
4882 
4883 	pages = kmalloc_array(max_pages, sizeof(*pages), GFP_KERNEL);
4884 	if (pages == NULL)
4885 		return -ENOMEM;
4886 
4887         /* Try to fault in all of the necessary pages */
4888         /* rw==READ means read from drive, write into memory area */
4889 	res = pin_user_pages_fast(uaddr, nr_pages, rw == READ ? FOLL_WRITE : 0,
4890 				  pages);
4891 
4892 	/* Errors and no page mapped should return here */
4893 	if (res < nr_pages)
4894 		goto out_unmap;
4895 
4896         for (i=0; i < nr_pages; i++) {
4897                 /* FIXME: flush superflous for rw==READ,
4898                  * probably wrong function for rw==WRITE
4899                  */
4900 		flush_dcache_page(pages[i]);
4901         }
4902 
4903 	mdata->offset = uaddr & ~PAGE_MASK;
4904 	STbp->mapped_pages = pages;
4905 
4906 	return nr_pages;
4907  out_unmap:
4908 	if (res > 0) {
4909 		unpin_user_pages(pages, res);
4910 		res = 0;
4911 	}
4912 	kfree(pages);
4913 	return res;
4914 }
4915 
4916 
4917 /* And unmap them... */
4918 static int sgl_unmap_user_pages(struct st_buffer *STbp,
4919 				const unsigned int nr_pages, int dirtied)
4920 {
4921 	/* FIXME: cache flush missing for rw==READ */
4922 	unpin_user_pages_dirty_lock(STbp->mapped_pages, nr_pages, dirtied);
4923 
4924 	kfree(STbp->mapped_pages);
4925 	STbp->mapped_pages = NULL;
4926 
4927 	return 0;
4928 }
4929