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