From: viro@www.linux.org.uk

killed gratitious uses of kdev_t in tpqic02



 drivers/char/tpqic02.c  |   63 ++++++++++++++++++++++++------------------------
 include/linux/tpqic02.h |    6 ++--
 2 files changed, 35 insertions(+), 34 deletions(-)

diff -puN drivers/char/tpqic02.c~large-dev_t-03 drivers/char/tpqic02.c
--- 25/drivers/char/tpqic02.c~large-dev_t-03	2003-08-26 18:28:47.000000000 -0700
+++ 25-akpm/drivers/char/tpqic02.c	2003-08-26 18:28:47.000000000 -0700
@@ -169,7 +169,7 @@ static unsigned long dma_bytes_done;
 static volatile unsigned dma_mode;	/* !=0 also means DMA in use */
 static flag need_rewind = YES;
 
-static kdev_t current_tape_dev;
+static int current_type;
 static int extra_blocks_left = BLOCKS_BEYOND_EW;
 static struct timer_list tp_timer;
 
@@ -677,7 +677,7 @@ static int rdstatus(char *stp, unsigned 
 	 * exception flag from previous exception which we are trying to clear.
 	 */
 
-	if (TP_DIAGS(current_tape_dev))
+	if (TP_DIAGS(current_type))
 		printk(TPQIC02_NAME ": reading status bytes: ");
 
 	for (q = stp; q < stp + size; q++) {
@@ -693,7 +693,7 @@ static int rdstatus(char *stp, unsigned 
 
 		*q = inb_p(QIC02_DATA_PORT);	/* read status byte */
 
-		if (TP_DIAGS(current_tape_dev))
+		if (TP_DIAGS(current_type))
 			printk("[%1d]=0x%x  ", q - stp, (unsigned) (*q) & 0xff);
 
 		outb_p(ctlbits | QIC02_CTL_REQUEST, QIC02_CTL_PORT);	/* set request */
@@ -714,7 +714,7 @@ static int rdstatus(char *stp, unsigned 
 		cpu_relax();
 	/* wait for ready */
 
-	if (TP_DIAGS(current_tape_dev))
+	if (TP_DIAGS(current_type))
 		printk("\n");
 
 	return TE_OK;
@@ -1614,7 +1614,7 @@ static irqreturn_t qic02_tape_interrupt(
 
 	if (status_expect_int) {
 #ifdef WANT_EXTRA_FULL_DEBUGGING
-		if (TP_DIAGS(current_tape_dev))
+		if (TP_DIAGS(current_type))
 			printk("@");
 #endif
 		stat = inb(QIC02_STAT_PORT);	/* Knock, knock */
@@ -1726,7 +1726,7 @@ static irqreturn_t qic02_tape_interrupt(
 
 static ssize_t qic02_tape_read(struct file *filp, char *buf, size_t count, loff_t * ppos)
 {
-	kdev_t dev = filp->f_dentry->d_inode->i_rdev;
+	int type = minor(filp->f_dentry->d_inode->i_rdev);
 	unsigned short flags = filp->f_flags;
 	unsigned long bytes_todo, bytes_done, total_bytes_done = 0;
 	int stat;
@@ -1736,8 +1736,8 @@ static ssize_t qic02_tape_read(struct fi
 		return -ENXIO;
 	}
 
-	if (TP_DIAGS(current_tape_dev))
-		printk(TPQIC02_NAME ": request READ, minor=%x, buf=%p, count=%lx, pos=%Lx, flags=%x\n", minor(dev), buf,
+	if (TP_DIAGS(current_type))
+		printk(TPQIC02_NAME ": request READ, minor=%x, buf=%p, count=%lx, pos=%Lx, flags=%x\n", type, buf,
 		       (long) count, filp->f_pos, flags);
 
 	if (count % TAPE_BLKSIZE) {	/* Only allow mod 512 bytes at a time. */
@@ -1904,7 +1904,7 @@ static ssize_t qic02_tape_read(struct fi
  */
 static ssize_t qic02_tape_write(struct file *filp, const char *buf, size_t count, loff_t * ppos)
 {
-	kdev_t dev = filp->f_dentry->d_inode->i_rdev;
+	int type = minor(filp->f_dentry->d_inode->i_rdev);
 	unsigned short flags = filp->f_flags;
 	unsigned long bytes_todo, bytes_done, total_bytes_done = 0;
 
@@ -1913,9 +1913,9 @@ static ssize_t qic02_tape_write(struct f
 		return -ENXIO;
 	}
 
-	if (TP_DIAGS(current_tape_dev)) {
+	if (TP_DIAGS(current_type)) {
 		printk(TPQIC02_NAME ": request WRITE, minor=%x, buf=%p, count=%lx, pos=%Lx, flags=%x\n",
-		       minor(dev), buf, (long) count, filp->f_pos, flags);
+		       type, buf, (long) count, filp->f_pos, flags);
 	}
 
 	if (count % TAPE_BLKSIZE) {	/* only allow mod 512 bytes at a time */
@@ -2070,17 +2070,18 @@ static int qic02_tape_open(struct inode 
 static int qic02_tape_open_no_use_count(struct inode *inode,
 					struct file *filp)
 {
-	kdev_t dev = inode->i_rdev;
+	int type = minor(inode->i_rdev);
 	unsigned short flags = filp->f_flags;
 	unsigned short dens = 0;
 	int s;
 
 
-	if (TP_DIAGS(dev)) {
-		printk("qic02_tape_open: dev=%s, flags=%x     ", cdevname(dev), flags);
+	if (TP_DIAGS(type)) {
+		printk("qic02_tape_open: dev=tpqic2(%d), flags=%x     ",
+			type, flags);
 	}
 
-	if (minor(dev) == 255) {	/* special case for resetting */
+	if (type == 255) {	/* special case for resetting */
 		if (capable(CAP_SYS_ADMIN)) {
 			return (tape_reset(1) == TE_OK) ? -EAGAIN : -ENXIO;
 		} else {
@@ -2162,7 +2163,7 @@ static int qic02_tape_open_no_use_count(
 	 */
 
 	/* not allowed to do QCMD_DENS_* unless tape is rewound */
-	if ((TP_DENS(dev) != 0) && (TP_DENS(current_tape_dev) != TP_DENS(dev))) {
+	if ((TP_DENS(type) != 0) && (TP_DENS(current_type) != TP_DENS(type))) {
 		/* force rewind if minor bits have changed,
 		 * i.e. user wants to use tape in different format.
 		 * [assuming single drive operation]
@@ -2175,7 +2176,7 @@ static int qic02_tape_open_no_use_count(
 		/* density bits still the same, but TP_DIAGS bit 
 		 * may have changed.
 		 */
-		current_tape_dev = dev;
+		current_type = type;
 	}
 
 	if (need_rewind == YES) {
@@ -2212,14 +2213,14 @@ static int qic02_tape_open_no_use_count(
 	 * so we must have done a rewind by now. If not, just skip over.
 	 * Only give set density command when minor bits have changed.
 	 */
-	if (TP_DENS(current_tape_dev) == TP_DENS(dev)) {
+	if (TP_DENS(current_type) == TP_DENS(type)) {
 		return 0;
 	}
 
-	current_tape_dev = dev;
+	current_type = type;
 	need_rewind = NO;
 	if (TP_HAVE_DENS) {
-		dens = TP_DENS(dev);
+		dens = TP_DENS(type);
 	}
 
 	if (dens < sizeof(format_names) / sizeof(char *))
@@ -2227,7 +2228,7 @@ static int qic02_tape_open_no_use_count(
 	else
 		tpqputs(TPQD_REWIND, "Wait for retensioning...");
 
-	switch (TP_DENS(dev)) {
+	switch (TP_DENS(type)) {
 	case 0:		/* Minor 0 is for drives without set-density support */
 		s = 0;
 		break;
@@ -2254,7 +2255,7 @@ static int qic02_tape_open_no_use_count(
 	}
 	if (s != 0) {
 		status_dead = YES;	/* force reset */
-		current_tape_dev = NODEV;/* earlier 0xff80 */
+		current_type = 0;/* earlier 0xff80 */
 		return -EIO;
 	}
 
@@ -2264,10 +2265,10 @@ static int qic02_tape_open_no_use_count(
 
 static int qic02_tape_release(struct inode *inode, struct file *filp)
 {
-	kdev_t dev = inode->i_rdev;
+	int type = minor(inode->i_rdev);
 
-	if (TP_DIAGS(dev)) {
-		printk("qic02_tape_release: dev=%s\n", cdevname(dev));
+	if (TP_DIAGS(type)) {
+		printk("qic02_tape_release: dev=tpqic2(%d)\n", type);
 	}
 
 	if (status_zombie == NO) {	/* don't rewind in zombie mode */
@@ -2283,7 +2284,7 @@ static int qic02_tape_release(struct ino
 		/* Rewind only if minor number requires it AND 
 		 * read/writes have been done. ************* IS THIS CORRECT??????????
 		 */
-		if ((TP_REWCLOSE(dev)) && (status_bytes_rd | status_bytes_wr)) {
+		if (TP_REWCLOSE(type) && (status_bytes_rd | status_bytes_wr)) {
 			tpqputs(TPQD_REWIND, "release: Doing rewind...");
 			(void) do_qic_cmd(QCMD_REWIND, TIM_R);
 		}
@@ -2398,7 +2399,7 @@ static int qic02_tape_ioctl(struct inode
 	struct mtpos ioctl_tell;
 
 
-	if (TP_DIAGS(current_tape_dev))
+	if (TP_DIAGS(current_type))
 		printk(TPQIC02_NAME ": ioctl(%4x, %4lx)\n", iocmd, ioarg);
 
 	if (!inode)
@@ -2459,7 +2460,7 @@ static int qic02_tape_ioctl(struct inode
 		 * ---      tape at the beginning of the current file.
 		 */
 
-		if (TP_DIAGS(current_tape_dev))
+		if (TP_DIAGS(current_type))
 			printk("OP op=%4x, count=%4x\n", operation.mt_op, operation.mt_count);
 
 		if (operation.mt_count < 0)
@@ -2492,7 +2493,7 @@ static int qic02_tape_ioctl(struct inode
 		return 0;
 
 	} else if (c == _IOC_NR(MTIOCGET)) {
-		if (TP_DIAGS(current_tape_dev))
+		if (TP_DIAGS(current_type))
 			printk("GET ");
 
 		CHECK_IOC_SIZE(mtget);
@@ -2507,7 +2508,7 @@ static int qic02_tape_ioctl(struct inode
 			return -EFAULT;
 		return 0;
 	} else if (TP_HAVE_TELL && (c == _IOC_NR(MTIOCPOS))) {
-		if (TP_DIAGS(current_tape_dev))
+		if (TP_DIAGS(current_type))
 			printk("POS ");
 
 		CHECK_IOC_SIZE(mtpos);
@@ -2664,7 +2665,7 @@ int __init qic02_tape_init(void)
 		return -ENODEV;
 	}
 
-	current_tape_dev = mk_kdev(QIC02_TAPE_MAJOR, 0);
+	current_type = 0;
 
 #ifndef CONFIG_QIC02_DYNCONF
 	printk(TPQIC02_NAME ": IRQ %d, DMA %d, IO 0x%x, IFC %s, %s, %s\n",
diff -puN include/linux/tpqic02.h~large-dev_t-03 include/linux/tpqic02.h
--- 25/include/linux/tpqic02.h~large-dev_t-03	2003-08-26 18:28:47.000000000 -0700
+++ 25-akpm/include/linux/tpqic02.h	2003-08-26 18:28:47.000000000 -0700
@@ -587,10 +587,10 @@
  *  |___________________ Reserved for diagnostics during debugging.
  */
 
-#define	TP_REWCLOSE(d)	((minor(d)&0x01) == 1)	   		/* rewind bit */
+#define	TP_REWCLOSE(d)	((d)&1)	   		/* rewind bit */
 			   /* rewind is only done if data has been transferred */
-#define	TP_DENS(dev)	((minor(dev) >> 1) & 0x07) 	      /* tape density */
-#define TP_UNIT(dev)	((minor(dev) >> 4) & 0x07)	       /* unit number */
+#define	TP_DENS(d)	(((d) >> 1) & 0x07) 	      /* tape density */
+#define TP_UNIT(d)	(((d) >> 4) & 0x07)	       /* unit number */
 
 /* print excessive diagnostics */
 #define TP_DIAGS(dev)	(QIC02_TAPE_DEBUG & TPQD_DIAGS)

_