patch-2.3.40 linux/drivers/block/ide-tape.c

Next file: linux/drivers/block/ide.c
Previous file: linux/drivers/block/ide-probe.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.3.39/linux/drivers/block/ide-tape.c linux/drivers/block/ide-tape.c
@@ -1,5 +1,5 @@
 /*
- * linux/drivers/block/ide-tape.c	Version 1.16e		Oct   3, 1999
+ * linux/drivers/block/ide-tape.c	Version 1.16f		Dec  15, 1999
  *
  * Copyright (C) 1995 - 1999 Gadi Oxman <gadio@netvision.net.il>
  *
@@ -224,6 +224,57 @@
  *                        case the tape block size is larger than PAGE_SIZE.
  *                       Decrease the default disconnection time to tn.
  * Ver 1.16e Oct  3 99   Minor fixes.
+ * Ver 1.16e1 Oct 13 99  Patches by Arnold Niessen,
+ *                          niessen@iae.nl / arnold.niessen@philips.com
+ *                   GO-1)  Undefined code in idetape_read_position
+ *				according to Gadi's email
+ *                   AJN-1) Minor fix asc == 11 should be asc == 0x11
+ *                               in idetape_issue_packet_command (did effect
+ *                               debugging output only)
+ *                   AJN-2) Added more debugging output, and
+ *                              added ide-tape: where missing. I would also
+ *				like to add tape->name where possible
+ *                   AJN-3) Added different debug_level's 
+ *                              via /proc/ide/hdc/settings
+ * 				"debug_level" determines amount of debugging output;
+ * 				can be changed using /proc/ide/hdx/settings
+ * 				0 : almost no debugging output
+ * 				1 : 0+output errors only
+ * 				2 : 1+output all sensekey/asc
+ * 				3 : 2+follow all chrdev related procedures
+ * 				4 : 3+follow all procedures
+ * 				5 : 4+include pc_stack rq_stack info
+ * 				6 : 5+USE_COUNT updates
+ *                   AJN-4) Fixed timeout for retension in idetape_queue_pc_tail
+ *				from 5 to 10 minutes
+ *                   AJN-5) Changed maximum number of blocks to skip when
+ *                              reading tapes with multiple consecutive write
+ *                              errors from 100 to 1000 in idetape_get_logical_blk
+ *                   Proposed changes to code:
+ *                   1) output "logical_blk_num" via /proc
+ *                   2) output "current_operation" via /proc
+ *                   3) Either solve or document the fact that `mt rewind' is
+ *                      required after reading from /dev/nhtx to be
+ *			able to rmmod the idetape module;
+ *			Also, sometimes an application finishes but the
+ *			device remains `busy' for some time. Same cause ?
+ *                   Proposed changes to release-notes:
+ *		     4) write a simple `quickstart' section in the
+ *                      release notes; I volunteer if you don't want to
+ * 		     5) include a pointer to video4linux in the doc
+ *                      to stimulate video applications
+ *                   6) release notes lines 331 and 362: explain what happens
+ *			if the application data rate is higher than 1100 KB/s; 
+ *			similar approach to lower-than-500 kB/s ?
+ *		     7) 6.6 Comparison; wouldn't it be better to allow different 
+ *			strategies for read and write ?
+ *			Wouldn't it be better to control the tape buffer
+ *			contents instead of the bandwidth ?
+ *		     8) line 536: replace will by would (if I understand
+ *			this section correctly, a hypothetical and unwanted situation
+ *			 is being described)
+ * Ver 1.16f Dec 15 99   Change place of the secondary OnStream header frames.
+ *
  *
  * Here are some words from the first releases of hd.c, which are quoted
  * in ide.c and apply here as well:
@@ -361,7 +412,7 @@
 /*
  *	OnStream support
  */
-#define ONSTREAM_DEBUG		(0)
+#define ONSTREAM_DEBUG		(1)
 #define OS_CONFIG_PARTITION	(0xff)
 #define OS_DATA_PARTITION	(0)
 #define OS_PARTITION_VERSION	(1)
@@ -502,7 +553,7 @@
  *	is verified to be stable enough. This will make it much more
  *	esthetic.
  */
-#define IDETAPE_DEBUG_LOG		0
+#define IDETAPE_DEBUG_LOG		1
 #define IDETAPE_DEBUG_BUGS		1
 
 /*
@@ -755,7 +806,7 @@
 	 *	NULL if we do not need to retry any packet command. This is
 	 *	required since an additional packet command is needed before the
 	 *	retry, to get detailed information on what went wrong.
-      	 */
+	 */
 	idetape_pc_t *pc;			/* Current packet command */
 	idetape_pc_t *failed_pc; 		/* Last failed packet command */
 	idetape_pc_t pc_stack[IDETAPE_PC_STACK];/* Packet command stack */
@@ -941,6 +992,19 @@
 	int controlled_previous_pipeline_head, uncontrolled_previous_pipeline_head;
 	unsigned long controlled_previous_head_time, uncontrolled_previous_head_time;
 	int restart_speed_control_req;
+
+        /*
+         * Debug_level determines amount of debugging output;
+         * can be changed using /proc/ide/hdx/settings
+         * 0 : almost no debugging output
+         * 1 : 0+output errors only
+         * 2 : 1+output all sensekey/asc
+         * 3 : 2+follow all chrdev related procedures
+         * 4 : 3+follow all procedures
+         * 5 : 4+include pc_stack rq_stack info
+         * 6 : 5+USE_COUNT updates
+         */
+         int debug_level; 
 } idetape_tape_t;
 
 /*
@@ -1386,7 +1450,8 @@
 	idetape_tape_t *tape = drive->driver_data;
 
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "ide-tape: pc_stack_index=%d\n",tape->pc_stack_index);
+	if (tape->debug_level >= 5)
+		printk (KERN_INFO "ide-tape: pc_stack_index=%d\n",tape->pc_stack_index);
 #endif /* IDETAPE_DEBUG_LOG */
 	if (tape->pc_stack_index==IDETAPE_PC_STACK)
 		tape->pc_stack_index=0;
@@ -1411,7 +1476,8 @@
 	idetape_tape_t *tape = drive->driver_data;
 
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "ide-tape: rq_stack_index=%d\n",tape->rq_stack_index);
+	if (tape->debug_level >= 5)
+		printk (KERN_INFO "ide-tape: rq_stack_index=%d\n",tape->rq_stack_index);
 #endif /* IDETAPE_DEBUG_LOG */
 	if (tape->rq_stack_index==IDETAPE_PC_STACK)
 		tape->rq_stack_index=0;
@@ -1450,7 +1516,8 @@
 	 *	Without debugging, we only log an error if we decided to
 	 *	give up retrying.
 	 */
-	printk (KERN_INFO "ide-tape: pc = %x, sense key = %x, asc = %x, ascq = %x\n",pc->c[0],result->sense_key,result->asc,result->ascq);
+	if (tape->debug_level >= 1)
+		printk (KERN_INFO "ide-tape: pc = %x, sense key = %x, asc = %x, ascq = %x\n",pc->c[0],result->sense_key,result->asc,result->ascq);
 #endif /* IDETAPE_DEBUG_LOG */
 
 	if (tape->onstream && result->sense_key == 2 && result->asc == 0x53 && result->ascq == 2) {
@@ -1494,7 +1561,8 @@
 	idetape_stage_t *stage = tape->next_stage;
 
 #if IDETAPE_DEBUG_LOG
-	printk(KERN_INFO "ide-tape: %s: idetape_abort_pipeline called\n", tape->name);
+	if (tape->debug_level >= 4)
+		printk(KERN_INFO "ide-tape: %s: idetape_abort_pipeline called\n", tape->name);
 #endif
 	while (stage) {
 		if (stage->rq.cmd == IDETAPE_WRITE_RQ)
@@ -1515,7 +1583,8 @@
 	struct request *rq = &stage->rq;
 
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "Reached idetape_active_next_stage\n");
+	if (tape->debug_level >= 4)
+		printk (KERN_INFO "ide-tape: Reached idetape_active_next_stage\n");
 #endif /* IDETAPE_DEBUG_LOG */
 #if IDETAPE_DEBUG_BUGS
 	if (stage == NULL) {
@@ -1544,7 +1613,8 @@
 	int increase = (tape->max_pipeline - tape->min_pipeline) / 10;
 	
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "Reached idetape_increase_max_pipeline_stages\n");
+	if (tape->debug_level >= 4)
+		printk (KERN_INFO "ide-tape: Reached idetape_increase_max_pipeline_stages\n");
 #endif /* IDETAPE_DEBUG_LOG */
 
 	tape->max_stages += increase;
@@ -1592,7 +1662,8 @@
 	idetape_stage_t *stage;
 	
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "Reached idetape_remove_stage_head\n");
+	if (tape->debug_level >= 4)
+		printk (KERN_INFO "ide-tape: Reached idetape_remove_stage_head\n");
 #endif /* IDETAPE_DEBUG_LOG */
 #if IDETAPE_DEBUG_BUGS
 	if (tape->first_stage == NULL) {
@@ -1638,7 +1709,8 @@
 #endif
 
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "Reached idetape_end_request\n");
+        if (tape->debug_level >= 4)
+	printk (KERN_INFO "ide-tape: Reached idetape_end_request\n");
 #endif /* IDETAPE_DEBUG_LOG */
 
 	switch (uptodate) {
@@ -1657,17 +1729,20 @@
 		tape->nr_pending_stages--;
 		if (rq->cmd == IDETAPE_WRITE_RQ) {
 #if ONSTREAM_DEBUG
-			if (tape->onstream) {
-				stage = tape->first_stage;
-				aux = stage->aux;
-				p = stage->bh->b_data;
-				if (ntohl(aux->logical_blk_num) < 11300 && ntohl(aux->logical_blk_num) > 11100)
-					printk(KERN_INFO "finished writing logical blk %lu (data %x %x %x %x)\n", ntohl(aux->logical_blk_num), *p++, *p++, *p++, *p++);
+			if (tape->debug_level >= 2) {
+				if (tape->onstream) {
+					stage = tape->first_stage;
+					aux = stage->aux;
+					p = stage->bh->b_data;
+					if (ntohl(aux->logical_blk_num) < 11300 && ntohl(aux->logical_blk_num) > 11100)
+						printk(KERN_INFO "ide-tape: finished writing logical blk %lu (data %x %x %x %x)\n", ntohl(aux->logical_blk_num), *p++, *p++, *p++, *p++);
+				}
 			}
 #endif
 			if (tape->onstream && !tape->raw) {
 				if (tape->first_frame_position == 0xba4) {
 #if ONSTREAM_DEBUG
+				if (tape->debug_level >= 2)
 					printk("ide-tape: %s: skipping over config parition..\n", tape->name);
 #endif
 					tape->onstream_write_error = 2;
@@ -1723,13 +1798,14 @@
 	idetape_tape_t *tape = drive->driver_data;
 
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "ide-tape: Reached idetape_request_sense_callback\n");
+	if (tape->debug_level >= 4)
+		printk (KERN_INFO "ide-tape: Reached idetape_request_sense_callback\n");
 #endif /* IDETAPE_DEBUG_LOG */
 	if (!tape->pc->error) {
 		idetape_analyze_error (drive,(idetape_request_sense_result_t *) tape->pc->buffer);
 		idetape_end_request (1,HWGROUP (drive));
 	} else {
-		printk (KERN_ERR "Error in REQUEST SENSE itself - Aborting request!\n");
+		printk (KERN_ERR "ide-tape: Error in REQUEST SENSE itself - Aborting request!\n");
 		idetape_end_request (0,HWGROUP (drive));
 	}
 	return ide_stopped;
@@ -1802,7 +1878,8 @@
 	idetape_tape_t *tape = drive->driver_data;
 
 #if IDETAPE_DEBUG_LOG
-	printk(KERN_INFO "idetape_postpone_request\n");
+	if (tape->debug_level >= 4)
+		printk(KERN_INFO "ide-tape: idetape_postpone_request\n");
 #endif
 	tape->postponed_rq = HWGROUP(drive)->rq;
 	ide_stall_queue(drive, tape->dsc_polling_frequency);
@@ -1831,7 +1908,8 @@
 #endif
 
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "ide-tape: Reached idetape_pc_intr interrupt handler\n");
+	if (tape->debug_level >= 4)
+		printk (KERN_INFO "ide-tape: Reached idetape_pc_intr interrupt handler\n");
 #endif /* IDETAPE_DEBUG_LOG */	
 
 	status.all = GET_STAT();					/* Clear the interrupt */
@@ -1856,7 +1934,8 @@
 			idetape_update_buffers (pc);
 		}
 #if IDETAPE_DEBUG_LOG
-		printk (KERN_INFO "ide-tape: DMA finished\n");
+		if (tape->debug_level >= 4)
+			printk (KERN_INFO "ide-tape: DMA finished\n");
 #endif /* IDETAPE_DEBUG_LOG */
 	}
 #endif /* CONFIG_BLK_DEV_IDEDMA */
@@ -1865,7 +1944,8 @@
 		cmd_time = (jiffies - tape->cmd_start_time) * 1000 / HZ;
 		tape->max_cmd_time = IDE_MAX(cmd_time, tape->max_cmd_time);
 #if IDETAPE_DEBUG_LOG
-		printk (KERN_INFO "Packet command completed, %d bytes transferred\n", pc->actually_transferred);
+		if (tape->debug_level >= 2)
+			printk (KERN_INFO "ide-tape: Packet command completed, %d bytes transferred\n", pc->actually_transferred);
 #endif /* IDETAPE_DEBUG_LOG */
 		clear_bit (PC_DMA_IN_PROGRESS, &pc->flags);
 
@@ -1881,14 +1961,16 @@
 			status.b.check = 0;
 		if (status.b.check || test_bit (PC_DMA_ERROR, &pc->flags)) {	/* Error detected */
 #if IDETAPE_DEBUG_LOG
-			printk (KERN_INFO "ide-tape: %s: I/O error, ",tape->name);
+			if (tape->debug_level >= 1)
+				printk (KERN_INFO "ide-tape: %s: I/O error, ",tape->name);
 #endif /* IDETAPE_DEBUG_LOG */
 			if (pc->c[0] == IDETAPE_REQUEST_SENSE_CMD) {
 				printk (KERN_ERR "ide-tape: I/O error in request sense command\n");
 				return ide_do_reset (drive);
 			}
 #if IDETAPE_DEBUG_LOG
-			printk(KERN_INFO "[cmd %x]: check condition\n", pc->c[0]);
+			if (tape->debug_level >= 1)
+				printk(KERN_INFO "ide-tape: [cmd %x]: check condition\n", pc->c[0]);
 #endif
 			return idetape_retry_pc (drive);				/* Retry operation */
 		}
@@ -1922,7 +2004,7 @@
 	}
 	if (ireason.b.io == test_bit (PC_WRITING, &pc->flags)) {	/* Hopefully, we will never get here */
 		printk (KERN_ERR "ide-tape: We wanted to %s, ", ireason.b.io ? "Write":"Read");
-		printk (KERN_ERR "but the tape wants us to %s !\n",ireason.b.io ? "Read":"Write");
+		printk (KERN_ERR "ide-tape: but the tape wants us to %s !\n",ireason.b.io ? "Read":"Write");
 		return ide_do_reset (drive);
 	}
 	if (!test_bit (PC_WRITING, &pc->flags)) {			/* Reading - Check that we have enough space */
@@ -1935,7 +2017,8 @@
 				return ide_started;
 			}
 #if IDETAPE_DEBUG_LOG
-			printk (KERN_NOTICE "ide-tape: The tape wants to send us more data than expected - allowing transfer\n");
+			if (tape->debug_level >= 2)
+				printk (KERN_NOTICE "ide-tape: The tape wants to send us more data than expected - allowing transfer\n");
 #endif /* IDETAPE_DEBUG_LOG */
 		}
 	}
@@ -1953,7 +2036,8 @@
 	pc->actually_transferred+=bcount.all;					/* Update the current position */
 	pc->current_position+=bcount.all;
 #if IDETAPE_DEBUG_LOG
-	printk(KERN_INFO "[cmd %x] transferred %d bytes on that interrupt\n", pc->c[0], bcount.all);
+	if (tape->debug_level >= 2)
+		printk(KERN_INFO "ide-tape: [cmd %x] transferred %d bytes on that interrupt\n", pc->c[0], bcount.all);
 #endif
 	ide_set_handler (drive,&idetape_pc_intr,IDETAPE_WAIT_CMD,NULL);		/* And set the interrupt handler again */
 	return ide_started;
@@ -2061,7 +2145,7 @@
 			if (!(pc->c[0] == 0 && tape->sense_key == 2 && tape->asc == 4 && (tape->ascq == 1 || tape->ascq == 8))) {
 				printk (KERN_ERR "ide-tape: %s: I/O error, pc = %2x, key = %2x, asc = %2x, ascq = %2x\n",
 					tape->name, pc->c[0], tape->sense_key, tape->asc, tape->ascq);
-				if (tape->onstream && pc->c[0] == 8 && tape->sense_key == 3 && tape->asc == 11)
+				if (tape->onstream && pc->c[0] == 8 && tape->sense_key == 3 && tape->asc == 0x11)  /* AJN-1: 11 should be 0x11 */
 					printk(KERN_ERR "ide-tape: %s: enabling read error recovery\n", tape->name);
 			}
 			pc->error = IDETAPE_ERROR_GENERAL;		/* Giving up */
@@ -2070,7 +2154,8 @@
 		return pc->callback(drive);
 	}
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "Retry number - %d\n",pc->retries);
+	if (tape->debug_level >= 2)
+		printk (KERN_INFO "ide-tape: Retry number - %d\n",pc->retries);
 #endif /* IDETAPE_DEBUG_LOG */
 
 	pc->retries++;
@@ -2117,7 +2202,8 @@
 	idetape_tape_t *tape = drive->driver_data;
 	
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "ide-tape: Reached idetape_pc_callback\n");
+	if (tape->debug_level >= 4)
+		printk (KERN_INFO "ide-tape: Reached idetape_pc_callback\n");
 #endif /* IDETAPE_DEBUG_LOG */
 
 	idetape_end_request (tape->pc->error ? 0:1, HWGROUP(drive));
@@ -2163,7 +2249,8 @@
 	IO_trace(IO_IDETAPE_FIFO, tape->pipeline_head, tape->buffer_head, tape->tape_head, tape->minor);
 #endif
 #if IDETAPE_DEBUG_LOG
-	printk(KERN_INFO "buffer fill callback, %d/%d\n", tape->cur_frames, tape->max_frames);
+	if (tape->debug_level >= 1)
+		printk(KERN_INFO "ide-tape: buffer fill callback, %d/%d\n", tape->cur_frames, tape->max_frames);
 #endif
 	idetape_end_request (tape->pc->error ? 0:1, HWGROUP(drive));
 	return ide_stopped;
@@ -2277,7 +2364,8 @@
 	}
 
 #if IDETAPE_DEBUG_LOG	
-	printk (KERN_INFO "ide-tape: Reached idetape_rw_callback\n");
+	if (tape->debug_level >= 4)
+		printk (KERN_INFO "ide-tape: Reached idetape_rw_callback\n");
 #endif /* IDETAPE_DEBUG_LOG */
 
 	tape->first_frame_position += blocks;
@@ -2384,8 +2472,10 @@
 	idetape_status_reg_t status;
 
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "rq_status: %d, rq_dev: %u, cmd: %d, errors: %d\n",rq->rq_status,(unsigned int) rq->rq_dev,rq->cmd,rq->errors);
-	printk (KERN_INFO "sector: %ld, nr_sectors: %ld, current_nr_sectors: %ld\n",rq->sector,rq->nr_sectors,rq->current_nr_sectors);
+	if (tape->debug_level >= 5)
+		printk (KERN_INFO "ide-tape: rq_status: %d, rq_dev: %u, cmd: %d, errors: %d\n",rq->rq_status,(unsigned int) rq->rq_dev,rq->cmd,rq->errors);
+	if (tape->debug_level >= 2)
+		printk (KERN_INFO "ide-tape: sector: %ld, nr_sectors: %ld, current_nr_sectors: %ld\n",rq->sector,rq->nr_sectors,rq->current_nr_sectors);
 #endif /* IDETAPE_DEBUG_LOG */
 
 	if (!IDETAPE_RQ_CMD (rq->cmd)) {
@@ -2456,15 +2546,17 @@
 	   ((rq->cmd == IDETAPE_WRITE_RQ && (tape->cur_frames == tape->max_frames || (tape->speed_control && tape->cur_frames > 5 && (tape->insert_speed > tape->max_insert_speed || (0 /* tape->cur_frames > 30 && tape->tape_still_time > 200 */))))) ||
 	    (rq->cmd == IDETAPE_READ_RQ && (tape->cur_frames == 0 || (tape->speed_control && (tape->cur_frames < tape->max_frames - 5) && tape->insert_speed > tape->max_insert_speed)) && rq->nr_sectors))) {
 #if IDETAPE_DEBUG_LOG
-		printk(KERN_INFO "postponing request, cmd %d, cur %d, max %d\n",
-			rq->cmd, tape->cur_frames, tape->max_frames);
+		if (tape->debug_level >= 4)
+			printk(KERN_INFO "ide-tape: postponing request, cmd %d, cur %d, max %d\n",
+				rq->cmd, tape->cur_frames, tape->max_frames);
 #endif
 		if (tape->postpone_cnt++ < 500) {
 			status.b.dsc = 0;
 			tape->req_buffer_fill = 1;
 		}
 #if ONSTREAM_DEBUG
-		else printk(KERN_INFO "ide-tape: %s: postpone_cnt %d\n", tape->name, tape->postpone_cnt);
+		else if (tape->debug_level >= 4) 
+			printk(KERN_INFO "ide-tape: %s: postpone_cnt %d\n", tape->name, tape->postpone_cnt);
 #endif
 	}
 	if (!test_and_clear_bit (IDETAPE_IGNORE_DSC, &tape->flags) && !status.b.dsc) {
@@ -2530,7 +2622,8 @@
 			return ide_stopped;
 		case IDETAPE_ABORTED_READ_RQ:
 #if IDETAPE_DEBUG_LOG
-			printk(KERN_INFO "ide-tape: %s: detected aborted read rq\n", tape->name);
+			if (tape->debug_level >= 2)
+				printk(KERN_INFO "ide-tape: %s: detected aborted read rq\n", tape->name);
 #endif
 			rq->cmd = IDETAPE_READ_RQ;
 			idetape_end_request (IDETAPE_ERROR_EOD, HWGROUP(drive));
@@ -2643,7 +2736,8 @@
 	idetape_stage_t *cache_stage = tape->cache_stage;
 
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "Reached idetape_kmalloc_stage\n");
+	if (tape->debug_level >= 4)
+		printk (KERN_INFO "ide-tape: Reached idetape_kmalloc_stage\n");
 #endif /* IDETAPE_DEBUG_LOG */
 
 	if (tape->nr_stages >= tape->max_stages)
@@ -2737,7 +2831,8 @@
 	unsigned long flags;
 	
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "Reached idetape_add_stage_tail\n");
+	if (tape->debug_level >= 4)
+		printk (KERN_INFO "ide-tape: Reached idetape_add_stage_tail\n");
 #endif /* IDETAPE_DEBUG_LOG */
 	spin_lock_irqsave(&tape->spinlock, flags);
 	stage->next=NULL;
@@ -2851,14 +2946,17 @@
 	idetape_read_position_result_t *result;
 	
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "ide-tape: Reached idetape_read_position_callback\n");
+	if (tape->debug_level >= 4)
+		printk (KERN_INFO "ide-tape: Reached idetape_read_position_callback\n");
 #endif /* IDETAPE_DEBUG_LOG */
 
 	if (!tape->pc->error) {
 		result = (idetape_read_position_result_t *) tape->pc->buffer;
 #if IDETAPE_DEBUG_LOG
-		printk (KERN_INFO "BOP - %s\n",result->bop ? "Yes":"No");
-		printk (KERN_INFO "EOP - %s\n",result->eop ? "Yes":"No");
+		if (tape->debug_level >= 2)
+			printk (KERN_INFO "ide-tape: BOP - %s\n",result->bop ? "Yes":"No");
+		if (tape->debug_level >= 2)
+			printk (KERN_INFO "ide-tape: EOP - %s\n",result->eop ? "Yes":"No");
 #endif /* IDETAPE_DEBUG_LOG */
 		if (result->bpu) {
 			printk (KERN_INFO "ide-tape: Block location is unknown to the tape\n");
@@ -2866,7 +2964,8 @@
 			idetape_end_request (0,HWGROUP (drive));
 		} else {
 #if IDETAPE_DEBUG_LOG
-			printk (KERN_INFO "Block Location - %lu\n", ntohl (result->first_block));
+			if (tape->debug_level >= 2)
+				printk (KERN_INFO "ide-tape: Block Location - %lu\n", ntohl (result->first_block));
 #endif /* IDETAPE_DEBUG_LOG */
 			tape->partition = result->partition;
 			tape->first_frame_position = ntohl (result->first_block);
@@ -2952,7 +3051,7 @@
 	pc->callback = &idetape_pc_callback;
 }
 
-static int idetape_wait_ready(ide_drive_t *drive, unsigned long long timeout)
+static int idetape_wait_ready (ide_drive_t *drive, unsigned long long timeout)
 {
 	idetape_tape_t *tape = drive->driver_data;
 	idetape_pc_t pc;
@@ -2975,7 +3074,7 @@
 		if (!(tape->sense_key == 2 && tape->asc == 4 && (tape->ascq == 1 || tape->ascq == 8)))
 			break;
 		current->state = TASK_INTERRUPTIBLE;
-		schedule_timeout(HZ / 10);
+  		schedule_timeout(HZ / 10);
 	}
 	return -EIO;
 }
@@ -2988,7 +3087,8 @@
 	rc = __idetape_queue_pc_tail(drive, pc);
 	if (rc)	return rc;
 	if (tape->onstream && test_bit(PC_WAIT_FOR_DSC, &pc->flags))
-		rc = idetape_wait_ready(drive, 60 * 5 * HZ);
+		rc = idetape_wait_ready(drive, 60 * 10 * HZ);   /* AJN-4: Changed from 5 to 10 minutes;
+                          because retension takes approx. 8:20 with Onstream 30GB tape */
 	return rc;
 }
 
@@ -3012,17 +3112,20 @@
 	pc->callback = &idetape_read_position_callback;
 }
 
-static int idetape_read_position(ide_drive_t *drive)
+static int idetape_read_position (ide_drive_t *drive)
 {
 	idetape_tape_t *tape = drive->driver_data;
 	idetape_pc_t pc;
 	int position;
 
+#ifdef NO_LONGER_REQUIRED
 	idetape_flush_tape_buffers(drive);
+#endif
 	idetape_create_read_position_cmd(&pc);
 	if (idetape_queue_pc_tail (drive,&pc))
 		return -1;
 	position = tape->first_frame_position;
+#ifdef NO_LONGER_REQUIRED
 	if (tape->onstream) {
 		if ((position != tape->last_frame_position - tape->blocks_in_buffer) &&
 		    (position != tape->last_frame_position + tape->blocks_in_buffer)) {
@@ -3033,6 +3136,7 @@
 			}
 		}
 	}
+#endif
 	return position;
 }
 
@@ -3054,7 +3158,7 @@
 	pc->callback = &idetape_pc_callback;
 }
 
-static void idetape_create_prevent_cmd(ide_drive_t *drive, idetape_pc_t *pc, int prevent)
+static void idetape_create_prevent_cmd (ide_drive_t *drive, idetape_pc_t *pc, int prevent)
 {
 	idetape_init_pc(pc);
 	pc->c[0] = IDETAPE_PREVENT_CMD;
@@ -3130,7 +3234,8 @@
 	if (restore_position) {
 		position = idetape_read_position(drive);
 #if ONSTREAM_DEBUG
-		printk(KERN_INFO "ide-tape: address %u, nr_stages %d\n", position, cnt);
+		if (tape->debug_level >= 2)
+			printk(KERN_INFO "ide-tape: address %u, nr_stages %d\n", position, cnt);
 #endif
 		seek = position > cnt ? position - cnt : 0;
 		if (idetape_position_tape(drive, seek, 0, 0)) {
@@ -3140,7 +3245,7 @@
 	}
 }
 
-static void idetape_update_stats(ide_drive_t *drive)
+static void idetape_update_stats (ide_drive_t *drive)
 {
 	idetape_pc_t pc;
 
@@ -3159,7 +3264,8 @@
 	struct request rq;
 
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "idetape_queue_rw_tail: cmd=%d\n",cmd);
+	if (tape->debug_level >= 2)
+		printk (KERN_INFO "ide-tape: idetape_queue_rw_tail: cmd=%d\n",cmd);
 #endif /* IDETAPE_DEBUG_LOG */
 #if IDETAPE_DEBUG_BUGS
 	if (idetape_pipeline_active (tape)) {
@@ -3192,7 +3298,7 @@
  * of the write error recovery mechanism for old OnStream
  * firmware revisions.
  */
-static void idetape_onstream_read_back_buffer(ide_drive_t *drive)
+static void idetape_onstream_read_back_buffer (ide_drive_t *drive)
 {
 	idetape_tape_t *tape = drive->driver_data;
 	int frames, i, logical_blk_num;
@@ -3214,7 +3320,8 @@
 		p = stage->bh->b_data;
 		idetape_queue_rw_tail(drive, IDETAPE_READ_BUFFER_RQ, tape->capabilities.ctl, stage->bh);
 #if ONSTREAM_DEBUG
-		printk(KERN_INFO "ide-tape: %s: read back logical block %d, data %x %x %x %x\n", tape->name, logical_blk_num, *p++, *p++, *p++, *p++);
+		if (tape->debug_level >= 2)
+			printk(KERN_INFO "ide-tape: %s: read back logical block %d, data %x %x %x %x\n", tape->name, logical_blk_num, *p++, *p++, *p++, *p++);
 #endif
 		rq = &stage->rq;
 		ide_init_drive_cmd (rq);
@@ -3237,14 +3344,15 @@
 	}
 	idetape_update_stats(drive);
 #if ONSTREAM_DEBUG
-	printk(KERN_INFO "ide-tape: %s: frames left in buffer: %d\n", tape->name, tape->cur_frames);
+	if (tape->debug_level >= 2)
+		printk(KERN_INFO "ide-tape: %s: frames left in buffer: %d\n", tape->name, tape->cur_frames);
 #endif
 }
 
 /*
  * Error recovery algorithm for the OnStream tape.
  */
-static void idetape_onstream_write_error_recovery(ide_drive_t *drive)
+static void idetape_onstream_write_error_recovery (ide_drive_t *drive)
 {
 	idetape_tape_t *tape = drive->driver_data;
 	unsigned int block;
@@ -3263,11 +3371,13 @@
 		}
 		idetape_read_position(drive);
 #if ONSTREAM_DEBUG
-		printk(KERN_ERR "ide-tape: %s: positioning complete, cur_frames %d, pos %d, tape pos %d\n", tape->name, tape->cur_frames, tape->first_frame_position, tape->last_frame_position);
+		if (tape->debug_level >= 1)
+			printk(KERN_ERR "ide-tape: %s: positioning complete, cur_frames %d, pos %d, tape pos %d\n", tape->name, tape->cur_frames, tape->first_frame_position, tape->last_frame_position);
 #endif
 	} else if (tape->onstream_write_error == 2) {
 #if ONSTREAM_DEBUG
-		printk(KERN_INFO "ide-tape: %s: skipping over config partition\n", tape->name);
+		if (tape->debug_level >= 1)
+			printk(KERN_INFO "ide-tape: %s: skipping over config partition\n", tape->name);
 #endif
 		idetape_flush_tape_buffers(drive);
 		block = idetape_read_position(drive);
@@ -3297,7 +3407,7 @@
 	}
 }
 
-static void idetape_create_inquiry_cmd(idetape_pc_t *pc)
+static void idetape_create_inquiry_cmd (idetape_pc_t *pc)
 {
 	idetape_init_pc(pc);
 	pc->c[0] = IDETAPE_INQUIRY_CMD;
@@ -3350,7 +3460,7 @@
 /*
  * Verify that we have the correct tape frame
  */
-static int idetape_verify_stage(ide_drive_t *drive, idetape_stage_t *stage, int logical_blk_num, int quiet)
+static int idetape_verify_stage (ide_drive_t *drive, idetape_stage_t *stage, int logical_blk_num, int quiet)
 {
 	idetape_tape_t *tape = drive->driver_data;
 	os_aux_t *aux = stage->aux;
@@ -3404,7 +3514,7 @@
 		return 0;
 	}
 	if (ntohs(par->wrt_pass_cntr) != tape->wrt_pass_cntr) {
-		printk(KERN_INFO "ide-tape: %s: skipping frame, wrt_pass_cntr %d (expected %d)\n", tape->name, ntohs(par->wrt_pass_cntr), tape->wrt_pass_cntr);
+		printk(KERN_INFO "ide-tape: %s: skipping frame, wrt_pass_cntr %d (expected %d)(logical_blk_num %lu)\n", tape->name, ntohs(par->wrt_pass_cntr), tape->wrt_pass_cntr, ntohl(aux->logical_blk_num));
 		return 0;
 	}
 	if (aux->frame_seq_num != aux->logical_blk_num) {
@@ -3423,7 +3533,7 @@
 	return 1;
 }
 
-static void idetape_wait_first_stage(ide_drive_t *drive)
+static void idetape_wait_first_stage (ide_drive_t *drive)
 {
 	idetape_tape_t *tape = drive->driver_data;
 	unsigned long flags;
@@ -3455,7 +3565,8 @@
 	struct request *rq;
 
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "Reached idetape_add_chrdev_write_request\n");
+	if (tape->debug_level >= 3)
+		printk (KERN_INFO "ide-tape: Reached idetape_add_chrdev_write_request\n");
 #endif /* IDETAPE_DEBUG_LOG */
 
      	/*
@@ -3577,7 +3688,7 @@
 			bh = tape->bh;
 			while (i) {
 				if (bh == NULL) {
-					printk(KERN_INFO "bug, bh NULL\n");
+					printk(KERN_INFO "ide-tape: bug, bh NULL\n");
 					break;
 				}
 				min = IDE_MIN(i, bh->b_size - atomic_read(&bh->b_count));
@@ -3614,7 +3725,7 @@
 #endif /* IDETAPE_DEBUG_BUGS */
 }
 
-static void idetape_restart_speed_control(ide_drive_t *drive)
+static void idetape_restart_speed_control (ide_drive_t *drive)
 {
 	idetape_tape_t *tape = drive->driver_data;
 
@@ -3629,7 +3740,7 @@
 	tape->controlled_previous_head_time = tape->uncontrolled_previous_head_time = jiffies;
 }
 
-static int idetape_initiate_read(ide_drive_t *drive, int max_stages)
+static int idetape_initiate_read (ide_drive_t *drive, int max_stages)
 {
 	idetape_tape_t *tape = drive->driver_data;
 	idetape_stage_t *new_stage;
@@ -3698,7 +3809,7 @@
 	return 0;
 }
 
-static int idetape_get_logical_blk(ide_drive_t *drive, int logical_blk_num, int max_stages, int quiet)
+static int idetape_get_logical_blk (ide_drive_t *drive, int logical_blk_num, int max_stages, int quiet)
 {
 	idetape_tape_t *tape = drive->driver_data;
 	unsigned long flags;
@@ -3708,7 +3819,7 @@
 	 * Search and wait for the next logical tape block
 	 */
 	while (1) {
-		if (cnt++ > 100) {
+		if (cnt++ > 1000) {   /* AJN: was 100 */
 			printk(KERN_INFO "ide-tape: %s: couldn't find logical block %d, aborting\n", tape->name, logical_blk_num);
 			return 0;
 		}
@@ -3716,7 +3827,8 @@
 		if (tape->first_stage == NULL) {
 			if (tape->onstream) {
 #if ONSTREAM_DEBUG
-				printk(KERN_INFO "ide-tape: %s: first_stage == NULL, pipeline error %d\n", tape->name, test_bit(IDETAPE_PIPELINE_ERROR, &tape->flags));
+				if (tape->debug_level >= 1)
+					printk(KERN_INFO "ide-tape: %s: first_stage == NULL, pipeline error %d\n", tape->name, test_bit(IDETAPE_PIPELINE_ERROR, &tape->flags));
 #endif
 				clear_bit(IDETAPE_PIPELINE_ERROR, &tape->flags);
 				position = idetape_read_position(drive);
@@ -3761,7 +3873,8 @@
 	int bytes_read;
 
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "Reached idetape_add_chrdev_read_request, %d blocks\n", blocks);
+	if (tape->debug_level >= 4)
+		printk (KERN_INFO "ide-tape: Reached idetape_add_chrdev_read_request, %d blocks\n", blocks);
 #endif /* IDETAPE_DEBUG_LOG */
 
 	/*
@@ -3784,7 +3897,8 @@
 
 	if (tape->onstream && !tape->raw && tape->first_stage->aux->frame_type == OS_FRAME_TYPE_EOD) {
 #if ONSTREAM_DEBUG
-		printk(KERN_INFO "ide-tape: %s: EOD reached\n", tape->name);
+		if (tape->debug_level >= 2)
+			printk(KERN_INFO "ide-tape: %s: EOD reached\n", tape->name);
 #endif
 		return 0;
 	}
@@ -3796,7 +3910,8 @@
 		idetape_switch_buffers (tape, tape->first_stage);
 		if (rq_ptr->errors == IDETAPE_ERROR_GENERAL) {
 #if ONSTREAM_DEBUG
-			printk(KERN_INFO "error detected, bytes_read %d\n", bytes_read);
+			if (tape->debug_level >= 1)
+				printk(KERN_INFO "ide-tape: error detected, bytes_read %d\n", bytes_read);
 #endif
 		}
 		clear_bit (IDETAPE_FILEMARK, &tape->flags);
@@ -3871,7 +3986,8 @@
 	idetape_pc_t pc;
 	idetape_tape_t *tape = drive->driver_data;
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "Reached idetape_rewind_tape\n");
+	if (tape->debug_level >= 2)
+		printk (KERN_INFO "ide-tape: Reached idetape_rewind_tape\n");
 #endif /* IDETAPE_DEBUG_LOG */	
 	
 	idetape_create_rewind_cmd (drive, &pc);
@@ -3899,7 +4015,8 @@
 	idetape_config_t config;
 
 #if IDETAPE_DEBUG_LOG	
-	printk (KERN_INFO "ide-tape: Reached idetape_blkdev_ioctl\n");
+	if (tape->debug_level >= 4)
+		printk (KERN_INFO "ide-tape: Reached idetape_blkdev_ioctl\n");
 #endif /* IDETAPE_DEBUG_LOG */
 	switch (cmd) {
 		case 0x0340:
@@ -3928,12 +4045,18 @@
 static int idetape_blkdev_open (struct inode *inode, struct file *filp, ide_drive_t *drive)
 {
 	MOD_INC_USE_COUNT;
+#if ONSTREAM_DEBUG
+        printk(KERN_INFO "ide-tape: MOD_INC_USE_COUNT in idetape_blkdev_open\n");
+#endif
 	return 0;
 }
 
 static void idetape_blkdev_release (struct inode *inode, struct file *filp, ide_drive_t *drive)
 {
 	MOD_DEC_USE_COUNT;
+#if ONSTREAM_DEBUG
+        printk(KERN_INFO "ide-tape: MOD_DEC_USE_COUNT in idetape_blkdev_release\n");
+#endif
 }
 
 /*
@@ -3974,7 +4097,8 @@
 		if (last_mark_addr == -1)
 			return -EIO;
 #if ONSTREAM_DEBUG
-		printk(KERN_INFO "ide-tape: positioning to last mark at %d\n", last_mark_addr);
+		if (tape->debug_level >= 2)
+			printk(KERN_INFO "ide-tape: positioning to last mark at %d\n", last_mark_addr);
 #endif
 		idetape_position_tape(drive, last_mark_addr, 0, 0);
 		cnt++;
@@ -4001,7 +4125,7 @@
  *
  * Just scans for the filemark sequentially.
  */
-static int idetape_onstream_space_over_filemarks_forward_slow(ide_drive_t *drive,short mt_op,int mt_count)
+static int idetape_onstream_space_over_filemarks_forward_slow (ide_drive_t *drive,short mt_op,int mt_count)
 {
 	idetape_tape_t *tape = drive->driver_data;
 	int cnt = 0;
@@ -4020,7 +4144,8 @@
 			cnt++;
 		if (tape->first_stage->aux->frame_type == OS_FRAME_TYPE_EOD) {
 #if ONSTREAM_DEBUG
-			printk(KERN_INFO "ide-tape: %s: space_fwd: EOD reached\n", tape->name);
+			if (tape->debug_level >= 2)
+				printk(KERN_INFO "ide-tape: %s: space_fwd: EOD reached\n", tape->name);
 #endif
 			return -EIO;
 		}
@@ -4043,7 +4168,7 @@
 /*
  * Fast linux specific version of OnStream FSF
  */
-static int idetape_onstream_space_over_filemarks_forward_fast(ide_drive_t *drive,short mt_op,int mt_count)
+static int idetape_onstream_space_over_filemarks_forward_fast (ide_drive_t *drive,short mt_op,int mt_count)
 {
 	idetape_tape_t *tape = drive->driver_data;
 	int cnt = 0, next_mark_addr;
@@ -4062,7 +4187,8 @@
 			break;
 		if (tape->first_stage->aux->frame_type == OS_FRAME_TYPE_EOD) {
 #if ONSTREAM_DEBUG
-			printk(KERN_INFO "ide-tape: %s: space_fwd: EOD reached\n", tape->name);
+			if (tape->debug_level >= 2)
+				printk(KERN_INFO "ide-tape: %s: space_fwd: EOD reached\n", tape->name);
 #endif
 			return -EIO;
 		}
@@ -4092,10 +4218,11 @@
 		if (!next_mark_addr || next_mark_addr > tape->eod_frame_addr) {
 			printk(KERN_INFO "ide-tape: %s: reverting to slow filemark space\n", tape->name);
 			return idetape_onstream_space_over_filemarks_forward_slow(drive, mt_op, mt_count - cnt);
-		}
 #if ONSTREAM_DEBUG
-		else printk(KERN_INFO "ide-tape: positioning to next mark at %d\n", next_mark_addr);
+		} else if (tape->debug_level >= 2) {
+		     printk(KERN_INFO "ide-tape: positioning to next mark at %d\n", next_mark_addr);
 #endif
+		}
 		idetape_position_tape(drive, next_mark_addr, 0, 0);
 		cnt++;
 		if (!idetape_get_logical_blk(drive, -1, 10, 0)) {
@@ -4218,6 +4345,7 @@
  *	The tape is optimized to maximize throughput when it is transferring
  *	an integral number of the "continuous transfer limit", which is
  *	a parameter of the specific tape (26 KB on my particular tape).
+ *      (32 kB for Onstream)
  *
  *	As of version 1.3 of the driver, the character device provides an
  *	abstract continuous view of the media - any mix of block sizes (even 1
@@ -4226,6 +4354,7 @@
  *	so that an unmatch between the user's block size to the recommended
  *	size will only result in a (slightly) increased driver overhead, but
  *	will no longer hit performance.
+ *      This is not applicable to Onstream.
  */
 static ssize_t idetape_chrdev_read (struct file *file, char *buf,
 				    size_t count, loff_t *ppos)
@@ -4244,7 +4373,8 @@
 		return -EINVAL;
 	}
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "Reached idetape_chrdev_read, count %d\n", count);
+	if (tape->debug_level >= 3)
+		printk (KERN_INFO "ide-tape: Reached idetape_chrdev_read, count %d\n", count);
 #endif /* IDETAPE_DEBUG_LOG */
 
 	if (tape->chrdev_direction != idetape_direction_read) {
@@ -4280,7 +4410,8 @@
 finish:
 	if (!actually_read && test_bit (IDETAPE_FILEMARK, &tape->flags)) {
 #if IDETAPE_DEBUG_LOG
-		printk(KERN_INFO "ide-tape: %s: spacing over filemark\n", tape->name);
+		if (tape->debug_level >= 2)
+			printk(KERN_INFO "ide-tape: %s: spacing over filemark\n", tape->name);
 #endif
 		idetape_space_over_filemarks (drive, MTFSF, 1);
 		return 0;
@@ -4293,7 +4424,7 @@
 	return actually_read;
 }
 
-static void idetape_update_last_marker(ide_drive_t *drive, int last_mark_addr, int next_mark_addr)
+static void idetape_update_last_marker (ide_drive_t *drive, int last_mark_addr, int next_mark_addr)
 {
 	idetape_tape_t *tape = drive->driver_data;
 	idetape_stage_t *stage;
@@ -4310,8 +4441,10 @@
 	idetape_flush_tape_buffers(drive);
 	position = idetape_read_position(drive);
 #if ONSTREAM_DEBUG
-	printk(KERN_INFO "current position (2) %d, lblk %d\n", position, tape->logical_blk_num);
-	printk(KERN_INFO "current position (2) tape block %d\n", tape->last_frame_position);
+	if (tape->debug_level >= 2)
+		printk(KERN_INFO "ide-tape: current position (2) %d, lblk %d\n", position, tape->logical_blk_num);
+	if (tape->debug_level >= 2)
+		printk(KERN_INFO "ide-tape: current position (2) tape block %d\n", tape->last_frame_position);
 #endif
 	idetape_position_tape(drive, last_mark_addr, 0, 0);
 	if (!idetape_queue_rw_tail (drive, IDETAPE_READ_RQ, 1, stage->bh)) {
@@ -4328,7 +4461,8 @@
 		return;
 	}
 #if ONSTREAM_DEBUG
-	printk(KERN_INFO "writing back marker\n");
+	if (tape->debug_level >= 2)
+		printk(KERN_INFO "ide-tape: writing back marker\n");
 #endif
 	aux->next_mark_addr = htonl(next_mark_addr);
 	idetape_position_tape(drive, last_mark_addr, 0, 0);
@@ -4344,7 +4478,7 @@
 	return;
 }
 
-static void __idetape_write_header(ide_drive_t *drive, int block, int cnt)
+static void __idetape_write_header (ide_drive_t *drive, int block, int cnt)
 {
 	idetape_tape_t *tape = drive->driver_data;
 	idetape_stage_t *stage;
@@ -4358,7 +4492,7 @@
 	idetape_position_tape(drive, block, 0, 0);
 	memset(&header, 0, sizeof(header));
 	strcpy(header.ident_str, "ADR_SEQ");
-	header.major_rev = header.minor_rev = 1;
+	header.major_rev = header.minor_rev = 2;
 	header.par_num = 1;
 	header.partition.partition_num = OS_DATA_PARTITION;
 	header.partition.par_desc_ver = OS_PARTITION_VERSION;
@@ -4378,21 +4512,23 @@
 	idetape_flush_tape_buffers (drive);
 }
 
-static void idetape_write_header(ide_drive_t *drive, int locate_eod)
+static void idetape_write_header (ide_drive_t *drive, int locate_eod)
 {
 	idetape_tape_t *tape = drive->driver_data;
 
 #if ONSTREAM_DEBUG
-	printk(KERN_INFO "ide-tape: %s: writing tape header\n", tape->name);
+	if (tape->debug_level >= 2)
+		printk(KERN_INFO "ide-tape: %s: writing tape header\n", tape->name);
 #endif
 	if (!tape->onstream || tape->raw)
 		return;
 	tape->update_frame_cntr++;
 	__idetape_write_header(drive, 5, 5);
-	__idetape_write_header(drive, 0xbb2, 6);
+	__idetape_write_header(drive, 0xbae, 5);
 	if (locate_eod) {
 #if ONSTREAM_DEBUG
-		printk(KERN_INFO "ide-tape: %s: locating back to eod frame addr %d\n", tape->name, tape->eod_frame_addr);
+		if (tape->debug_level >= 2)
+			printk(KERN_INFO "ide-tape: %s: locating back to eod frame addr %d\n", tape->name, tape->eod_frame_addr);
 #endif
 		idetape_position_tape(drive, tape->eod_frame_addr, 0, 0);
 	}
@@ -4416,7 +4552,8 @@
 		return -EINVAL;
 	}
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "Reached idetape_chrdev_write, count %d\n", count);
+	if (tape->debug_level >= 3)
+		printk (KERN_INFO "ide-tape: Reached idetape_chrdev_write, count %d\n", count);
 #endif /* IDETAPE_DEBUG_LOG */
 
 	if (tape->chrdev_direction != idetape_direction_write) {	/* Initialize write operation */
@@ -4439,8 +4576,10 @@
 				tape->logical_blk_num = 0;
 				tape->wrt_pass_cntr++;
 #if ONSTREAM_DEBUG
-				printk(KERN_INFO "ide-tape: %s: logical block num 0, setting eod to 20\n", tape->name);
-				printk(KERN_INFO "ide-tape: %s: allocating new write pass counter %d\n", tape->name, tape->wrt_pass_cntr);
+				if (tape->debug_level >= 2)
+					printk(KERN_INFO "ide-tape: %s: logical block num 0, setting eod to 20\n", tape->name);
+				if (tape->debug_level >= 2)
+					printk(KERN_INFO "ide-tape: %s: allocating new write pass counter %d\n", tape->name, tape->wrt_pass_cntr);
 #endif
 				tape->filemark_cnt = 0;
 				tape->eod_frame_addr = 20;
@@ -4448,13 +4587,15 @@
 				idetape_write_header(drive, 1);
 			}
 #if ONSTREAM_DEBUG
-			printk(KERN_INFO "ide-tape: %s: positioning tape to eod at %d\n", tape->name, tape->eod_frame_addr);
+			if (tape->debug_level >= 2)
+				printk(KERN_INFO "ide-tape: %s: positioning tape to eod at %d\n", tape->name, tape->eod_frame_addr);
 #endif
 			position = idetape_read_position(drive);
 			if (position != tape->eod_frame_addr)
 				idetape_position_tape(drive, tape->eod_frame_addr, 0, 0);
 #if ONSTREAM_DEBUG
-			printk(KERN_INFO "ide-tape: %s: first_frame_position %d\n", tape->name, tape->first_frame_position);
+			if (tape->debug_level >= 2)
+				printk(KERN_INFO "ide-tape: %s: first_frame_position %d\n", tape->name, tape->first_frame_position);
 #endif
 		}
 
@@ -4471,7 +4612,8 @@
 			return retval;
 		}
 #if ONSTREAM_DEBUG
-		printk("ide-tape: first_frame_position %d\n", tape->first_frame_position);
+		if (tape->debug_level >= 2)
+			printk("ide-tape: first_frame_position %d\n", tape->first_frame_position);
 #endif
 	}
 	if (count==0)
@@ -4512,7 +4654,7 @@
 	return (actually_written);
 }
 
-static int idetape_write_filemark(ide_drive_t *drive)
+static int idetape_write_filemark (ide_drive_t *drive)
 {
 	idetape_tape_t *tape = drive->driver_data;
 	int last_mark_addr;
@@ -4543,7 +4685,7 @@
 	return 0;
 }
 
-static void idetape_write_eod(ide_drive_t *drive)
+static void idetape_write_eod (ide_drive_t *drive)
 {
 	idetape_tape_t *tape = drive->driver_data;
 
@@ -4560,7 +4702,7 @@
 	return;
 }
 
-int idetape_seek_logical_blk(ide_drive_t *drive, int logical_blk_num)
+int idetape_seek_logical_blk (ide_drive_t *drive, int logical_blk_num)
 {
 	idetape_tape_t *tape = drive->driver_data;
 	int estimated_address = logical_blk_num + 20;
@@ -4666,7 +4808,8 @@
 	int i,retval;
 
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "Handling MTIOCTOP ioctl: mt_op=%d, mt_count=%d\n",mt_op,mt_count);
+	if (tape->debug_level >= 1)
+		printk (KERN_INFO "ide-tape: Handling MTIOCTOP ioctl: mt_op=%d, mt_count=%d\n",mt_op,mt_count);
 #endif /* IDETAPE_DEBUG_LOG */
 	/*
 	 *	Commands which need our pipelined read-ahead stages.
@@ -4716,7 +4859,8 @@
 		case MTEOM:
 			if (tape->onstream) {
 #if ONSTREAM_DEBUG
-				printk(KERN_INFO "ide-tape: %s: positioning tape to eod at %d\n", tape->name, tape->eod_frame_addr);
+				if (tape->debug_level >= 2)
+					printk(KERN_INFO "ide-tape: %s: positioning tape to eod at %d\n", tape->name, tape->eod_frame_addr);
 #endif
 				idetape_position_tape(drive, tape->eod_frame_addr, 0, 0);
 				if (!idetape_get_logical_blk(drive, -1, 10, 0))
@@ -4833,7 +4977,8 @@
 	int block_offset = 0, position = tape->first_frame_position;
 
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "Reached idetape_chrdev_ioctl, cmd=%u\n",cmd);
+	if (tape->debug_level >= 3)
+		printk (KERN_INFO "ide-tape: Reached idetape_chrdev_ioctl, cmd=%u\n",cmd);
 #endif /* IDETAPE_DEBUG_LOG */
 
 	tape->restart_speed_control_req = 1;
@@ -4890,7 +5035,7 @@
 	}
 }
 
-static int __idetape_analyze_headers(ide_drive_t *drive, int block)
+static int __idetape_analyze_headers (ide_drive_t *drive, int block)
 {
 	idetape_tape_t *tape = drive->driver_data;
 	idetape_stage_t *stage;
@@ -4910,7 +5055,8 @@
 	if (stage == NULL)
 		return 0;
 #if ONSTREAM_DEBUG
-	printk(KERN_INFO "ide-tape: %s: reading header\n", tape->name);
+	if (tape->debug_level >= 2)
+		printk(KERN_INFO "ide-tape: %s: reading header\n", tape->name);
 #endif
 	idetape_position_tape(drive, block, 0, 0);
 	if (!idetape_queue_rw_tail (drive, IDETAPE_READ_RQ, 1, stage->bh)) {
@@ -4925,8 +5071,8 @@
 		__idetape_kfree_stage (stage);
 		return 0;
 	}
-	if (header->major_rev != 1 || header->minor_rev != 1)
-		printk(KERN_INFO "ide-tape: warning: revision %d.%d detected (1.1 supported)\n", header->major_rev, header->minor_rev);
+	if (header->major_rev != 1 || (header->minor_rev != 1 && header->minor_rev != 2))
+		printk(KERN_INFO "ide-tape: warning: revision %d.%d detected (1.1/1.2 supported)\n", header->major_rev, header->minor_rev);
 	if (header->par_num != 1)
 		printk(KERN_INFO "ide-tape: warning: %d partitions defined, only one supported\n", header->par_num);
 	tape->wrt_pass_cntr = ntohs(header->partition.wrt_pass_cntr);
@@ -4946,13 +5092,14 @@
 		tape->linux_media = 0;
 	}
 #if ONSTREAM_DEBUG
-	printk(KERN_INFO "ide-tape: %s: detected write pass counter %d, eod frame addr %d\n", tape->name, tape->wrt_pass_cntr, tape->eod_frame_addr);
+	if (tape->debug_level >= 2)
+		printk(KERN_INFO "ide-tape: %s: detected write pass counter %d, eod frame addr %d\n", tape->name, tape->wrt_pass_cntr, tape->eod_frame_addr);
 #endif
 	__idetape_kfree_stage (stage);
 	return 1;
 }
 
-static int idetape_analyze_headers(ide_drive_t *drive)
+static int idetape_analyze_headers (ide_drive_t *drive)
 {
 	idetape_tape_t *tape = drive->driver_data;
 	int position, block;
@@ -4966,7 +5113,7 @@
 	for (block = 5; block < 10; block++)
 		if (__idetape_analyze_headers(drive, block))
 			goto ok;
-	for (block = 0xbb2; block < 0xbb8; block++)
+	for (block = 0xbae; block < 0xbb3; block++)
 		if (__idetape_analyze_headers(drive, block))
 			goto ok;
 	printk(KERN_ERR "ide-tape: %s: failed to find valid ADRL header\n", tape->name);
@@ -4990,7 +5137,7 @@
 	unsigned int minor=MINOR (inode->i_rdev);
 			
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "Reached idetape_chrdev_open\n");
+	printk (KERN_INFO "ide-tape: Reached idetape_chrdev_open\n");
 #endif /* IDETAPE_DEBUG_LOG */
 	
 	if ((drive = get_drive_ptr (inode->i_rdev)) == NULL)
@@ -5000,6 +5147,10 @@
 	if (test_and_set_bit (IDETAPE_BUSY, &tape->flags))
 		return -EBUSY;
 	MOD_INC_USE_COUNT;
+#if ONSTREAM_DEBUG
+	if (tape->debug_level >= 6)
+		printk(KERN_INFO "ide-tape: MOD_INC_USE_COUNT in idetape_chrdev_open-1\n");
+#endif
 	if (!tape->onstream) {
 		idetape_read_position(drive);
 		if (!test_bit (IDETAPE_ADDRESS_VALID, &tape->flags))
@@ -5016,15 +5167,27 @@
 	if (idetape_wait_ready(drive, 60 * HZ)) {
 		clear_bit(IDETAPE_BUSY, &tape->flags);
 		MOD_DEC_USE_COUNT;
+#if ONSTREAM_DEBUG
+	if (tape->debug_level >= 6)
+		printk(KERN_INFO "ide-tape: MOD_DEC_USE_COUNT in idetape_chrdev_open-1\n");
+#endif
 		printk(KERN_ERR "ide-tape: %s: drive not ready\n", tape->name);
 		return -EBUSY;
 	}
 	idetape_read_position(drive);
 	MOD_DEC_USE_COUNT;
+#if ONSTREAM_DEBUG
+	if (tape->debug_level >= 6)
+		printk(KERN_INFO "ide-tape: MOD_DEC_USE_COUNT in idetape_chrdev_open-2\n");
+#endif
 	clear_bit (IDETAPE_PIPELINE_ERROR, &tape->flags);
 
 	if (tape->chrdev_direction == idetape_direction_none) {
 		MOD_INC_USE_COUNT;
+#if ONSTREAM_DEBUG
+		if (tape->debug_level >= 6)
+			printk(KERN_INFO "ide-tape: MOD_INC_USE_COUNT in idetape_chrdev_open-2\n");
+#endif
 		idetape_create_prevent_cmd(drive, &pc, 1);
 		if (!idetape_queue_pc_tail (drive,&pc)) {
 			if (tape->door_locked != DOOR_EXPLICITLY_LOCKED)
@@ -5049,7 +5212,8 @@
 	unsigned int minor=MINOR (inode->i_rdev);
 			
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "Reached idetape_chrdev_release\n");
+	if (tape->debug_level >= 3)
+		printk (KERN_INFO "ide-tape: Reached idetape_chrdev_release\n");
 #endif /* IDETAPE_DEBUG_LOG */
 
 	if (tape->chrdev_direction == idetape_direction_write) {
@@ -5085,6 +5249,10 @@
 				tape->door_locked = DOOR_UNLOCKED;
 		}
 		MOD_DEC_USE_COUNT;
+#if ONSTREAM_DEBUG
+		if (tape->debug_level >= 6)
+			printk(KERN_INFO "ide-tape: MOD_DEC_USE_COUNT in idetape_chrdev_release\n");
+#endif
 	}
 	clear_bit (IDETAPE_BUSY, &tape->flags);
 	return 0;
@@ -5112,14 +5280,14 @@
 	*((unsigned short *) &gcw) = id->config;
 
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "Dumping ATAPI Identify Device tape parameters\n");
-	printk (KERN_INFO "Protocol Type: ");
+	printk (KERN_INFO "ide-tape: Dumping ATAPI Identify Device tape parameters\n");
+	printk (KERN_INFO "ide-tape: Protocol Type: ");
 	switch (gcw.protocol) {
 		case 0: case 1: printk (KERN_INFO "ATA\n");break;
 		case 2:	printk (KERN_INFO "ATAPI\n");break;
 		case 3: printk (KERN_INFO "Reserved (Unknown to ide-tape)\n");break;
 	}
-	printk (KERN_INFO "Device Type: %x - ",gcw.device_type);	
+	printk (KERN_INFO "ide-tape: Device Type: %x - ",gcw.device_type);	
 	switch (gcw.device_type) {
 		case 0: printk (KERN_INFO "Direct-access Device\n");break;
 		case 1: printk (KERN_INFO "Streaming Tape Device\n");break;
@@ -5130,32 +5298,32 @@
 		case 0x1f: printk (KERN_INFO "Unknown or no Device type\n");break;
 		default: printk (KERN_INFO "Reserved\n");
 	}
-	printk (KERN_INFO "Removable: %s",gcw.removable ? "Yes\n":"No\n");	
-	printk (KERN_INFO "Command Packet DRQ Type: ");
+	printk (KERN_INFO "ide-tape: Removable: %s",gcw.removable ? "Yes\n":"No\n");	
+	printk (KERN_INFO "ide-tape: Command Packet DRQ Type: ");
 	switch (gcw.drq_type) {
 		case 0: printk (KERN_INFO "Microprocessor DRQ\n");break;
 		case 1: printk (KERN_INFO "Interrupt DRQ\n");break;
 		case 2: printk (KERN_INFO "Accelerated DRQ\n");break;
 		case 3: printk (KERN_INFO "Reserved\n");break;
 	}
-	printk (KERN_INFO "Command Packet Size: ");
+	printk (KERN_INFO "ide-tape: Command Packet Size: ");
 	switch (gcw.packet_size) {
 		case 0: printk (KERN_INFO "12 bytes\n");break;
 		case 1: printk (KERN_INFO "16 bytes\n");break;
 		default: printk (KERN_INFO "Reserved\n");break;
 	}
-	printk (KERN_INFO "Model: %.40s\n",id->model);
-	printk (KERN_INFO "Firmware Revision: %.8s\n",id->fw_rev);
-	printk (KERN_INFO "Serial Number: %.20s\n",id->serial_no);
-	printk (KERN_INFO "Write buffer size: %d bytes\n",id->buf_size*512);
-	printk (KERN_INFO "DMA: %s",id->capability & 0x01 ? "Yes\n":"No\n");
-	printk (KERN_INFO "LBA: %s",id->capability & 0x02 ? "Yes\n":"No\n");
-	printk (KERN_INFO "IORDY can be disabled: %s",id->capability & 0x04 ? "Yes\n":"No\n");
-	printk (KERN_INFO "IORDY supported: %s",id->capability & 0x08 ? "Yes\n":"Unknown\n");
-	printk (KERN_INFO "ATAPI overlap supported: %s",id->capability & 0x20 ? "Yes\n":"No\n");
-	printk (KERN_INFO "PIO Cycle Timing Category: %d\n",id->tPIO);
-	printk (KERN_INFO "DMA Cycle Timing Category: %d\n",id->tDMA);
-	printk (KERN_INFO "Single Word DMA supported modes: ");
+	printk (KERN_INFO "ide-tape: Model: %.40s\n",id->model);
+	printk (KERN_INFO "ide-tape: Firmware Revision: %.8s\n",id->fw_rev);
+	printk (KERN_INFO "ide-tape: Serial Number: %.20s\n",id->serial_no);
+	printk (KERN_INFO "ide-tape: Write buffer size: %d bytes\n",id->buf_size*512);
+	printk (KERN_INFO "ide-tape: DMA: %s",id->capability & 0x01 ? "Yes\n":"No\n");
+	printk (KERN_INFO "ide-tape: LBA: %s",id->capability & 0x02 ? "Yes\n":"No\n");
+	printk (KERN_INFO "ide-tape: IORDY can be disabled: %s",id->capability & 0x04 ? "Yes\n":"No\n");
+	printk (KERN_INFO "ide-tape: IORDY supported: %s",id->capability & 0x08 ? "Yes\n":"Unknown\n");
+	printk (KERN_INFO "ide-tape: ATAPI overlap supported: %s",id->capability & 0x20 ? "Yes\n":"No\n");
+	printk (KERN_INFO "ide-tape: PIO Cycle Timing Category: %d\n",id->tPIO);
+	printk (KERN_INFO "ide-tape: DMA Cycle Timing Category: %d\n",id->tDMA);
+	printk (KERN_INFO "ide-tape: Single Word DMA supported modes: ");
 	for (i=0,mask=1;i<8;i++,mask=mask << 1) {
 		if (id->dma_1word & mask)
 			printk (KERN_INFO "%d ",i);
@@ -5163,7 +5331,7 @@
 			printk (KERN_INFO "(active) ");
 	}
 	printk (KERN_INFO "\n");
-	printk (KERN_INFO "Multi Word DMA supported modes: ");
+	printk (KERN_INFO "ide-tape: Multi Word DMA supported modes: ");
 	for (i=0,mask=1;i<8;i++,mask=mask << 1) {
 		if (id->dma_mword & mask)
 			printk (KERN_INFO "%d ",i);
@@ -5172,33 +5340,33 @@
 	}
 	printk (KERN_INFO "\n");
 	if (id->field_valid & 0x0002) {
-		printk (KERN_INFO "Enhanced PIO Modes: %s\n",id->eide_pio_modes & 1 ? "Mode 3":"None");
-		printk (KERN_INFO "Minimum Multi-word DMA cycle per word: ");
+		printk (KERN_INFO "ide-tape: Enhanced PIO Modes: %s\n",id->eide_pio_modes & 1 ? "Mode 3":"None");
+		printk (KERN_INFO "ide-tape: Minimum Multi-word DMA cycle per word: ");
 		if (id->eide_dma_min == 0)
 			printk (KERN_INFO "Not supported\n");
 		else
 			printk (KERN_INFO "%d ns\n",id->eide_dma_min);
 
-		printk (KERN_INFO "Manufacturer\'s Recommended Multi-word cycle: ");
+		printk (KERN_INFO "ide-tape: Manufacturer\'s Recommended Multi-word cycle: ");
 		if (id->eide_dma_time == 0)
 			printk (KERN_INFO "Not supported\n");
 		else
 			printk (KERN_INFO "%d ns\n",id->eide_dma_time);
 
-		printk (KERN_INFO "Minimum PIO cycle without IORDY: ");
+		printk (KERN_INFO "ide-tape: Minimum PIO cycle without IORDY: ");
 		if (id->eide_pio == 0)
 			printk (KERN_INFO "Not supported\n");
 		else
 			printk (KERN_INFO "%d ns\n",id->eide_pio);
 
-		printk (KERN_INFO "Minimum PIO cycle with IORDY: ");
+		printk (KERN_INFO "ide-tape: Minimum PIO cycle with IORDY: ");
 		if (id->eide_pio_iordy == 0)
 			printk (KERN_INFO "Not supported\n");
 		else
 			printk (KERN_INFO "%d ns\n",id->eide_pio_iordy);
 		
 	} else
-		printk (KERN_INFO "According to the device, fields 64-70 are not valid.\n");
+		printk (KERN_INFO "ide-tape: According to the device, fields 64-70 are not valid.\n");
 #endif /* IDETAPE_DEBUG_LOG */
 
 	/* Check that we can support this device */
@@ -5221,7 +5389,7 @@
 /*
  * Notify vendor ID to the OnStream tape drive
  */
-static void idetape_onstream_set_vendor(ide_drive_t *drive, char *vendor)
+static void idetape_onstream_set_vendor (ide_drive_t *drive, char *vendor)
 {
 	idetape_pc_t pc;
 	idetape_mode_parameter_header_t *header;
@@ -5248,7 +5416,7 @@
  * Various unused OnStream commands
  */
 #if ONSTREAM_DEBUG
-static void idetape_onstream_set_retries(ide_drive_t *drive, int retries)
+static void idetape_onstream_set_retries (ide_drive_t *drive, int retries)
 {
 	idetape_pc_t pc;
 
@@ -5269,7 +5437,7 @@
 /*
  * Configure 32.5KB block size.
  */
-static void idetape_onstream_configure_block_size(ide_drive_t *drive)
+static void idetape_onstream_configure_block_size (ide_drive_t *drive)
 {
 	idetape_pc_t pc;
 	idetape_mode_parameter_header_t *header;
@@ -5285,10 +5453,10 @@
 	bs = (idetape_block_size_page_t *) (pc.buffer + sizeof(idetape_mode_parameter_header_t) + header->bdl);
 
 #if IDETAPE_DEBUG_LOG
-	printk(KERN_INFO "32KB play back: %s\n", bs->play32 ? "Yes" : "No");
-	printk(KERN_INFO "32.5KB play back: %s\n", bs->play32_5 ? "Yes" : "No");
-	printk(KERN_INFO "32KB record: %s\n", bs->record32 ? "Yes" : "No");
-	printk(KERN_INFO "32.5KB record: %s\n", bs->record32_5 ? "Yes" : "No");
+	printk(KERN_INFO "ide-tape: 32KB play back: %s\n", bs->play32 ? "Yes" : "No");
+	printk(KERN_INFO "ide-tape: 32.5KB play back: %s\n", bs->play32_5 ? "Yes" : "No");
+	printk(KERN_INFO "ide-tape: 32KB record: %s\n", bs->record32 ? "Yes" : "No");
+	printk(KERN_INFO "ide-tape: 32.5KB record: %s\n", bs->record32_5 ? "Yes" : "No");
 #endif
 
 	/*
@@ -5315,7 +5483,7 @@
 /*
  * Use INQUIRY to get the firmware revision
  */
-static void idetape_get_inquiry_results(ide_drive_t *drive)
+static void idetape_get_inquiry_results (ide_drive_t *drive)
 {
 	char *r;
 	idetape_tape_t *tape = drive->driver_data;
@@ -5345,13 +5513,13 @@
 /*
  * Configure the OnStream ATAPI tape drive for default operation
  */
-static void idetape_configure_onstream(ide_drive_t *drive)
+static void idetape_configure_onstream (ide_drive_t *drive)
 {
 	idetape_tape_t *tape = drive->driver_data;
 
 	if (tape->firmware_revision_num < 105) {
-		printk("ide-tape: %s: Old OnStream firmware revision detected (%s)\n", tape->name, tape->firmware_revision);
-		printk("ide-tape: %s: An upgrade to version 1.05 or above is recommended\n", tape->name);
+		printk(KERN_INFO "ide-tape: %s: Old OnStream firmware revision detected (%s)\n", tape->name, tape->firmware_revision);
+		printk(KERN_INFO "ide-tape: %s: An upgrade to version 1.05 or above is recommended\n", tape->name);
 	}
 
 	/*
@@ -5410,37 +5578,37 @@
 		tape->tape_block_size = 32768;
 
 #if IDETAPE_DEBUG_LOG
-	printk (KERN_INFO "Dumping the results of the MODE SENSE packet command\n");
-	printk (KERN_INFO "Mode Parameter Header:\n");
-	printk (KERN_INFO "Mode Data Length - %d\n",header->mode_data_length);
-	printk (KERN_INFO "Medium Type - %d\n",header->medium_type);
-	printk (KERN_INFO "Device Specific Parameter - %d\n",header->dsp);
-	printk (KERN_INFO "Block Descriptor Length - %d\n",header->bdl);
+	printk (KERN_INFO "ide-tape: Dumping the results of the MODE SENSE packet command\n");
+	printk (KERN_INFO "ide-tape: Mode Parameter Header:\n");
+	printk (KERN_INFO "ide-tape: Mode Data Length - %d\n",header->mode_data_length);
+	printk (KERN_INFO "ide-tape: Medium Type - %d\n",header->medium_type);
+	printk (KERN_INFO "ide-tape: Device Specific Parameter - %d\n",header->dsp);
+	printk (KERN_INFO "ide-tape: Block Descriptor Length - %d\n",header->bdl);
 	
-	printk (KERN_INFO "Capabilities and Mechanical Status Page:\n");
-	printk (KERN_INFO "Page code - %d\n",capabilities->page_code);
-	printk (KERN_INFO "Page length - %d\n",capabilities->page_length);
-	printk (KERN_INFO "Read only - %s\n",capabilities->ro ? "Yes":"No");
-	printk (KERN_INFO "Supports reverse space - %s\n",capabilities->sprev ? "Yes":"No");
-	printk (KERN_INFO "Supports erase initiated formatting - %s\n",capabilities->efmt ? "Yes":"No");
-	printk (KERN_INFO "Supports QFA two Partition format - %s\n",capabilities->qfa ? "Yes":"No");
-	printk (KERN_INFO "Supports locking the medium - %s\n",capabilities->lock ? "Yes":"No");
-	printk (KERN_INFO "The volume is currently locked - %s\n",capabilities->locked ? "Yes":"No");
-	printk (KERN_INFO "The device defaults in the prevent state - %s\n",capabilities->prevent ? "Yes":"No");
-	printk (KERN_INFO "Supports ejecting the medium - %s\n",capabilities->eject ? "Yes":"No");
-	printk (KERN_INFO "Supports error correction - %s\n",capabilities->ecc ? "Yes":"No");
-	printk (KERN_INFO "Supports data compression - %s\n",capabilities->cmprs ? "Yes":"No");
-	printk (KERN_INFO "Supports 512 bytes block size - %s\n",capabilities->blk512 ? "Yes":"No");
-	printk (KERN_INFO "Supports 1024 bytes block size - %s\n",capabilities->blk1024 ? "Yes":"No");
-	printk (KERN_INFO "Supports 32768 bytes block size / Restricted byte count for PIO transfers - %s\n",capabilities->blk32768 ? "Yes":"No");
-	printk (KERN_INFO "Maximum supported speed in KBps - %d\n",capabilities->max_speed);
-	printk (KERN_INFO "Continuous transfer limits in blocks - %d\n",capabilities->ctl);
-	printk (KERN_INFO "Current speed in KBps - %d\n",capabilities->speed);	
-	printk (KERN_INFO "Buffer size - %d\n",capabilities->buffer_size*512);
+	printk (KERN_INFO "ide-tape: Capabilities and Mechanical Status Page:\n");
+	printk (KERN_INFO "ide-tape: Page code - %d\n",capabilities->page_code);
+	printk (KERN_INFO "ide-tape: Page length - %d\n",capabilities->page_length);
+	printk (KERN_INFO "ide-tape: Read only - %s\n",capabilities->ro ? "Yes":"No");
+	printk (KERN_INFO "ide-tape: Supports reverse space - %s\n",capabilities->sprev ? "Yes":"No");
+	printk (KERN_INFO "ide-tape: Supports erase initiated formatting - %s\n",capabilities->efmt ? "Yes":"No");
+	printk (KERN_INFO "ide-tape: Supports QFA two Partition format - %s\n",capabilities->qfa ? "Yes":"No");
+	printk (KERN_INFO "ide-tape: Supports locking the medium - %s\n",capabilities->lock ? "Yes":"No");
+	printk (KERN_INFO "ide-tape: The volume is currently locked - %s\n",capabilities->locked ? "Yes":"No");
+	printk (KERN_INFO "ide-tape: The device defaults in the prevent state - %s\n",capabilities->prevent ? "Yes":"No");
+	printk (KERN_INFO "ide-tape: Supports ejecting the medium - %s\n",capabilities->eject ? "Yes":"No");
+	printk (KERN_INFO "ide-tape: Supports error correction - %s\n",capabilities->ecc ? "Yes":"No");
+	printk (KERN_INFO "ide-tape: Supports data compression - %s\n",capabilities->cmprs ? "Yes":"No");
+	printk (KERN_INFO "ide-tape: Supports 512 bytes block size - %s\n",capabilities->blk512 ? "Yes":"No");
+	printk (KERN_INFO "ide-tape: Supports 1024 bytes block size - %s\n",capabilities->blk1024 ? "Yes":"No");
+	printk (KERN_INFO "ide-tape: Supports 32768 bytes block size / Restricted byte count for PIO transfers - %s\n",capabilities->blk32768 ? "Yes":"No");
+	printk (KERN_INFO "ide-tape: Maximum supported speed in KBps - %d\n",capabilities->max_speed);
+	printk (KERN_INFO "ide-tape: Continuous transfer limits in blocks - %d\n",capabilities->ctl);
+	printk (KERN_INFO "ide-tape: Current speed in KBps - %d\n",capabilities->speed);	
+	printk (KERN_INFO "ide-tape: Buffer size - %d\n",capabilities->buffer_size*512);
 #endif /* IDETAPE_DEBUG_LOG */
 }
 
-static void idetape_add_settings(ide_drive_t *drive)
+static void idetape_add_settings (ide_drive_t *drive)
 {
 	idetape_tape_t *tape = drive->driver_data;
 
@@ -5465,6 +5633,7 @@
 		ide_add_setting(drive,	"max_frames",	SETTING_READ,	-1,	-1,		TYPE_SHORT,	0,			0xffff,			1,				1,				&tape->max_frames,		NULL);
 		ide_add_setting(drive,	"insert_speed",	SETTING_READ,	-1,	-1,		TYPE_INT,	0,			0xffff,			1,				1,				&tape->insert_speed,		NULL);
 		ide_add_setting(drive,	"speed_control",SETTING_RW,	-1,	-1,		TYPE_INT,	0,			0xffff,			1,				1,				&tape->speed_control,		NULL);
+		ide_add_setting(drive,	"debug_level",SETTING_RW,	-1,	-1,		TYPE_INT,	0,			0xffff,			1,				1,				&tape->debug_level,		NULL);
 		ide_add_setting(drive,	"tape_still_time",SETTING_READ,	-1,	-1,		TYPE_INT,	0,			0xffff,			1,				1,				&tape->tape_still_time,		NULL);
 		ide_add_setting(drive,	"max_insert_speed",SETTING_RW,	-1,	-1,		TYPE_INT,	0,			0xffff,			1,				1,				&tape->max_insert_speed,	NULL);
 		ide_add_setting(drive,	"insert_size",	SETTING_READ,	-1,	-1,		TYPE_INT,	0,			0xffff,			1,				1,				&tape->insert_size,		NULL);
@@ -5686,6 +5855,9 @@
 	int minor, failed = 0, supported = 0;
 
 	MOD_INC_USE_COUNT;
+#if ONSTREAM_DEBUG
+        printk(KERN_INFO "ide-tape: MOD_INC_USE_COUNT in idetape_init\n");
+#endif
 	if (!idetape_chrdev_present)
 		for (minor = 0; minor < MAX_HWIFS * MAX_DRIVES; minor++ )
 			idetape_chrdevs[minor].drive = NULL;
@@ -5693,11 +5865,18 @@
 	if ((drive = ide_scan_devices (ide_tape, idetape_driver.name, NULL, failed++)) == NULL) {
 		ide_register_module (&idetape_module);
 		MOD_DEC_USE_COUNT;
+#if ONSTREAM_DEBUG
+		if (tape->debug_level >= 6)
+			printk(KERN_INFO "ide-tape: MOD_DEC_USE_COUNT in idetape_init\n");
+#endif
 		return 0;
 	}
 	if (!idetape_chrdev_present && register_chrdev (IDETAPE_MAJOR, "ht", &idetape_fops)) {
 		printk (KERN_ERR "ide-tape: Failed to register character device interface\n");
 		MOD_DEC_USE_COUNT;
+#if ONSTREAM_DEBUG
+		printk(KERN_INFO "ide-tape: MOD_DEC_USE_COUNT in idetape_init\n");
+#endif
 		return -EBUSY;
 	}
 	do {
@@ -5734,6 +5913,9 @@
 		idetape_chrdev_present = 1;
 	ide_register_module (&idetape_module);
 	MOD_DEC_USE_COUNT;
+#if ONSTREAM_DEBUG
+	printk(KERN_INFO "ide-tape: MOD_DEC_USE_COUNT in idetape_init\n");
+#endif
 	return 0;
 }
 

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)