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