cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

st.c (132055B)


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