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