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