linux/drivers/scsi/st.c
<<
>>
Prefs
   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}
4929