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