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