Whamcloud - gitweb
Branch b1_4
authoradilger <adilger>
Sat, 21 May 2005 08:16:46 +0000 (08:16 +0000)
committeradilger <adilger>
Sat, 21 May 2005 08:16:46 +0000 (08:16 +0000)
Print out numeric device if no name can be found for 2.6.
r=nathan

lustre/kernel_patches/patches/dev_read_only-2.6-lnxi.patch
lustre/kernel_patches/patches/dev_read_only-2.6-suse.patch
lustre/kernel_patches/patches/dev_read_only_2.4.20-rh.patch
lustre/kernel_patches/patches/dev_read_only_2.4.21-chaos.patch

index 52d168b..c6b38ab 100644 (file)
@@ -15,11 +15,11 @@ diff -ur linux-2.6.5-lnxi.orig/drivers/block/ll_rw_blk.c linux-2.6.5-lnxi/driver
                /* this is cfs's dev_rdonly check */
                if (bio->bi_rw == WRITE &&
 -                              dev_check_rdonly(bio->bi_bdev->bd_dev)) {
-+                              dev_check_rdonly(bio->bi_bdev)) {
++                              dev_check_rdonly(bio->bi_bdev)) {
                        bio_endio(bio, bio->bi_size, 0);
                        break;
                }
-@@ -3086,53 +3086,85 @@ void swap_io_context(struct io_context *
+@@ -3086,53 +3086,86 @@ void swap_io_context(struct io_context *
        *ioc2 = temp;
  }
  
@@ -33,8 +33,8 @@ diff -ur linux-2.6.5-lnxi.orig/drivers/block/ll_rw_blk.c linux-2.6.5-lnxi/driver
   */
 -void dev_set_rdonly(struct block_device *bdev, int no_write)
 +struct deventry {
-+        dev_t dev;
-+        struct deventry *next;
++      dev_t dev;
++      struct deventry *next;
 +};
 +
 +static struct deventry *devlist = NULL;
@@ -46,14 +46,14 @@ diff -ur linux-2.6.5-lnxi.orig/drivers/block/ll_rw_blk.c linux-2.6.5-lnxi/driver
 -              printk(KERN_ALERT "%s:%d illegal arg %d (max %d)\n",
 -                              __FILE__, __LINE__, no_write, MAX_RDONLY_DEVS);
 -              return;
-+        struct deventry *cur;
-+        if (!bdev) return 0;
-+        spin_lock(&devlock);
-+        cur = devlist;
-+        while(cur) {
-+                if (bdev->bd_dev == cur->dev) {
-+                        spin_unlock(&devlock);
-+                        return 1;
++      struct deventry *cur;
++      if (!bdev) return 0;
++      spin_lock(&devlock);
++      cur = devlist;
++      while(cur) {
++              if (bdev->bd_dev == cur->dev) {
++                      spin_unlock(&devlock);
++                      return 1;
        }
 -
 -      if (bdev) {
@@ -61,10 +61,10 @@ diff -ur linux-2.6.5-lnxi.orig/drivers/block/ll_rw_blk.c linux-2.6.5-lnxi/driver
 -                              bdev->bd_disk ? bdev->bd_disk->disk_name : "?",
 -                              no_write);
 -              rdonly_devs[no_write] = bdev->bd_dev;
-+                cur = cur->next;
++              cur = cur->next;
        }
-+        spin_unlock(&devlock);
-+        return 0;
++      spin_unlock(&devlock);
++      return 0;
  }
  
 -void dev_clear_rdonly(int no_write)
@@ -75,13 +75,13 @@ diff -ur linux-2.6.5-lnxi.orig/drivers/block/ll_rw_blk.c linux-2.6.5-lnxi/driver
 -                              __FILE__, __LINE__, no_write, MAX_RDONLY_DEVS);
 -              return;
 -      }
-+        struct deventry *newdev, *cur;
++      struct deventry *newdev, *cur;
  
 -      if (rdonly_devs[no_write] == 0)
-+        if (!bdev) 
-+              return;
-+        newdev = kmalloc(sizeof(struct deventry), GFP_KERNEL);
-+        if (!newdev) 
++      if (!bdev) 
++              return;
++      newdev = kmalloc(sizeof(struct deventry), GFP_KERNEL);
++      if (!newdev) 
                return;
        
 -      printk(KERN_WARNING "Clearing read-only at %d\n", no_write);
@@ -96,46 +96,47 @@ diff -ur linux-2.6.5-lnxi.orig/drivers/block/ll_rw_blk.c linux-2.6.5-lnxi/driver
 -              if (rdonly_devs[i] == dev)
 -                      return 1;
 -      return 0;
-+        spin_lock(&devlock);
-+        cur = devlist;
-+        while(cur) {
-+                if (bdev->bd_dev == cur->dev) {
-+                        spin_unlock(&devlock);
-+                        kfree(newdev);
-+                        return;
-+}
-+                cur = cur->next;
-+        }
-+        newdev->dev = bdev->bd_dev;
-+        newdev->next = devlist;
-+        devlist = newdev;
-+        spin_unlock(&devlock);
-+        printk(KERN_WARNING "Turning device %s read-only\n",
-+               bdev->bd_disk ? bdev->bd_disk->disk_name : "?");
++      spin_lock(&devlock);
++      cur = devlist;
++      while(cur) {
++              if (bdev->bd_dev == cur->dev) {
++                      spin_unlock(&devlock);
++                      kfree(newdev);
++                      return;
++              }
++              cur = cur->next;
++      }
++      newdev->dev = bdev->bd_dev;
++      newdev->next = devlist;
++      devlist = newdev;
++      spin_unlock(&devlock);
++      printk(KERN_WARNING "Turning device %s (%#x) read-only\n",
++             bdev->bd_disk ? bdev->bd_disk->disk_name : "", bdev->bd_dev);
 +}
 +
 +void dev_clear_rdonly(struct block_device *bdev) 
 +{
-+        struct deventry *cur, *last = NULL;
-+        if (!bdev) return;
-+        spin_lock(&devlock);
-+        cur = devlist;
-+        while(cur) {
-+                if (bdev->bd_dev == cur->dev) {
-+                        if (last) 
-+                                last->next = cur->next;
-+                        else
-+                                devlist = cur->next;
-+                        spin_unlock(&devlock);
-+                        kfree(cur);
-+                        printk(KERN_WARNING "Removing read-only on %s\n",
-+                             bdev->bd_disk ? bdev->bd_disk->disk_name : "?");
++      struct deventry *cur, *last = NULL;
++      if (!bdev) return;
++      spin_lock(&devlock);
++      cur = devlist;
++      while(cur) {
++              if (bdev->bd_dev == cur->dev) {
++                      if (last) 
++                              last->next = cur->next;
++                      else
++                              devlist = cur->next;
++                      spin_unlock(&devlock);
++                      kfree(cur);
++                      printk(KERN_WARNING "Removing read-only on %s (%#x)\n",
++                             bdev->bd_disk ? bdev->bd_disk->disk_name :
++                                             "unknown block", bdev->bd_dev);
 +                      return;
-+                }
-+                last = cur;
-+                cur = cur->next;
-+        }
-+        spin_unlock(&devlock);
++              }
++              last = cur;
++              cur = cur->next;
++      }
++      spin_unlock(&devlock);
  }
  
  EXPORT_SYMBOL(dev_set_rdonly);
index ce244ae..d5a5ac4 100644 (file)
@@ -16,7 +16,7 @@ diff -ur linux-2.6.5-lnxi.orig/drivers/block/ll_rw_blk.c linux-2.6.5-lnxi/driver
  
 +              /* this is cfs's dev_rdonly check */
 +              if (bio->bi_rw == WRITE &&
-+                              dev_check_rdonly(bio->bi_bdev)) {
++                              dev_check_rdonly(bio->bi_bdev)) {
 +                      bio_endio(bio, bio->bi_size, 0);
 +                      break;
 +              }
@@ -24,7 +24,7 @@ diff -ur linux-2.6.5-lnxi.orig/drivers/block/ll_rw_blk.c linux-2.6.5-lnxi/driver
                /*
                 * If this device has partitions, remap block n
                 * of partition p to block n+start(p) of the disk.
-@@ -3078,6 +3087,91 @@ void swap_io_context(struct io_context *
+@@ -3078,6 +3087,92 @@ void swap_io_context(struct io_context *
  }
  
  /*
@@ -32,8 +32,8 @@ diff -ur linux-2.6.5-lnxi.orig/drivers/block/ll_rw_blk.c linux-2.6.5-lnxi/driver
 + * silently).  This is for filesystem crash/recovery testing.
 + */
 +struct deventry {
-+        dev_t dev;
-+        struct deventry *next;
++      dev_t dev;
++      struct deventry *next;
 +};
 +
 +static struct deventry *devlist = NULL;
@@ -41,71 +41,72 @@ diff -ur linux-2.6.5-lnxi.orig/drivers/block/ll_rw_blk.c linux-2.6.5-lnxi/driver
 +
 +int dev_check_rdonly(struct block_device *bdev) 
 +{
-+        struct deventry *cur;
-+        if (!bdev) return 0;
-+        spin_lock(&devlock);
-+        cur = devlist;
-+        while(cur) {
-+                if (bdev->bd_dev == cur->dev) {
-+                        spin_unlock(&devlock);
-+                        return 1;
++      struct deventry *cur;
++      if (!bdev) return 0;
++      spin_lock(&devlock);
++      cur = devlist;
++      while(cur) {
++              if (bdev->bd_dev == cur->dev) {
++                      spin_unlock(&devlock);
++                      return 1;
 +      }
-+                cur = cur->next;
++              cur = cur->next;
 +      }
-+        spin_unlock(&devlock);
-+        return 0;
++      spin_unlock(&devlock);
++      return 0;
 +}
 +
 +void dev_set_rdonly(struct block_device *bdev)
 +{
-+        struct deventry *newdev, *cur;
++      struct deventry *newdev, *cur;
 +
-+        if (!bdev) 
-+              return;
-+        newdev = kmalloc(sizeof(struct deventry), GFP_KERNEL);
-+        if (!newdev) 
++      if (!bdev) 
++              return;
++      newdev = kmalloc(sizeof(struct deventry), GFP_KERNEL);
++      if (!newdev) 
 +              return;
 +      
-+        spin_lock(&devlock);
-+        cur = devlist;
-+        while(cur) {
-+                if (bdev->bd_dev == cur->dev) {
-+                        spin_unlock(&devlock);
-+                        kfree(newdev);
-+                        return;
-+}
-+                cur = cur->next;
-+        }
-+        newdev->dev = bdev->bd_dev;
-+        newdev->next = devlist;
-+        devlist = newdev;
-+        spin_unlock(&devlock);
-+        printk(KERN_WARNING "Turning device %s read-only\n",
-+               bdev->bd_disk ? bdev->bd_disk->disk_name : "?");
++      spin_lock(&devlock);
++      cur = devlist;
++      while(cur) {
++              if (bdev->bd_dev == cur->dev) {
++                      spin_unlock(&devlock);
++                      kfree(newdev);
++                      return;
++              }
++              cur = cur->next;
++      }
++      newdev->dev = bdev->bd_dev;
++      newdev->next = devlist;
++      devlist = newdev;
++      spin_unlock(&devlock);
++      printk(KERN_WARNING "Turning device %s (%#x) read-only\n",
++             bdev->bd_disk ? bdev->bd_disk->disk_name : "", bdev->bd_dev);
 +}
 +
 +void dev_clear_rdonly(struct block_device *bdev) 
 +{
-+        struct deventry *cur, *last = NULL;
-+        if (!bdev) return;
-+        spin_lock(&devlock);
-+        cur = devlist;
-+        while(cur) {
-+                if (bdev->bd_dev == cur->dev) {
-+                        if (last) 
-+                                last->next = cur->next;
-+                        else
-+                                devlist = cur->next;
-+                        spin_unlock(&devlock);
-+                        kfree(cur);
-+                        printk(KERN_WARNING "Removing read-only on %s\n",
-+                             bdev->bd_disk ? bdev->bd_disk->disk_name : "?");
++      struct deventry *cur, *last = NULL;
++      if (!bdev) return;
++      spin_lock(&devlock);
++      cur = devlist;
++      while(cur) {
++              if (bdev->bd_dev == cur->dev) {
++                      if (last) 
++                              last->next = cur->next;
++                      else
++                              devlist = cur->next;
++                      spin_unlock(&devlock);
++                      kfree(cur);
++                      printk(KERN_WARNING "Removing read-only on %s (%#x)\n",
++                             bdev->bd_disk ? bdev->bd_disk->disk_name :
++                                             "unknown block", bdev->bd_dev);
 +                      return;
-+                }
-+                last = cur;
-+                cur = cur->next;
-+        }
-+        spin_unlock(&devlock);
++              }
++              last = cur;
++              cur = cur->next;
++      }
++      spin_unlock(&devlock);
 +}
 +
 +EXPORT_SYMBOL(dev_set_rdonly);
index 44f0ade..c7650fd 100644 (file)
@@ -1,90 +1,88 @@
 diff -ur linux-2.4.20-rh.orig/drivers/block/ll_rw_blk.c linux-2.4.20-rh/drivers/block/ll_rw_blk.c
 --- linux-2.4.20-rh.orig/drivers/block/ll_rw_blk.c     2004-05-27 11:25:09.000000000 -0700
 +++ linux-2.4.20-rh/drivers/block/ll_rw_blk.c  2005-04-08 09:02:14.734804881 -0700
-@@ -645,6 +645,86 @@ void set_device_ro(kdev_t dev,int flag)
+@@ -645,6 +645,84 @@ void set_device_ro(kdev_t dev,int flag)
        else ro_bits[major][minor >> 5] &= ~(1 << (minor & 31));
  }
  
-+
 +/*
-+ * Debug code for turning block devices read-only *silently* (will 
++ * Debug code for turning block devices read-only *silently* (will
 + * discard writes silently).  This is only for filesystem crash/recovery
 + * testing.
 + */
 +struct deventry {
-+        kdev_t dev;
-+        struct deventry *next;
++      kdev_t dev;
++      struct deventry *next;
 +};
 +
 +static struct deventry *devlist = NULL;
-+static spinlock_t devlock = SPIN_LOCK_UNLOCKED; 
++static spinlock_t devlock = SPIN_LOCK_UNLOCKED;
 +
 +int dev_check_rdonly(kdev_t dev) {
-+        struct deventry *cur;
-+        spin_lock(&devlock);
-+        cur = devlist;
-+        while(cur) {
-+                if (dev == cur->dev) {
-+                        spin_unlock(&devlock);
-+                        return 1;
-+                }
-+                cur = cur->next;
-+        }
-+        spin_unlock(&devlock);
-+        return 0;
++      struct deventry *cur;
++      spin_lock(&devlock);
++      cur = devlist;
++      while(cur) {
++              if (dev == cur->dev) {
++                      spin_unlock(&devlock);
++                      return 1;
++              }
++              cur = cur->next;
++      }
++      spin_unlock(&devlock);
++      return 0;
 +}
 +
 +void dev_set_rdonly(kdev_t dev)
 +{
-+        struct deventry *newdev, *cur;
-+        newdev = kmalloc(sizeof(struct deventry), GFP_KERNEL);
-+        if (!newdev) return;
++      struct deventry *newdev, *cur;
++      newdev = kmalloc(sizeof(struct deventry), GFP_KERNEL);
++      if (!newdev) return;
 +
-+        spin_lock(&devlock);
-+        cur = devlist;
-+        while(cur) {
-+                if (dev == cur->dev) {
-+                        spin_unlock(&devlock);
-+                        kfree(newdev);
-+                        return;
-+                }
-+                cur = cur->next;
-+        }
-+        newdev->dev = dev;
-+        newdev->next = devlist;
-+        devlist = newdev;
-+        spin_unlock(&devlock);
-+        printk(KERN_WARNING "Turning device %s read-only\n",
-+               bdevname(dev));
++      spin_lock(&devlock);
++      cur = devlist;
++      while(cur) {
++              if (dev == cur->dev) {
++                      spin_unlock(&devlock);
++                      kfree(newdev);
++                      return;
++              }
++              cur = cur->next;
++      }
++      newdev->dev = dev;
++      newdev->next = devlist;
++      devlist = newdev;
++      spin_unlock(&devlock);
++      printk(KERN_WARNING "Turning device %s read-only\n", bdevname(dev));
 +}
 +
 +void dev_clear_rdonly(kdev_t dev) {
-+        struct deventry *cur, *last = NULL;
-+        spin_lock(&devlock);
-+        cur = devlist;
-+        while(cur) {
-+                if (dev == cur->dev) {
-+                        if (last) 
-+                                last->next = cur->next;
-+                        else
-+                                devlist = cur->next;
-+                        spin_unlock(&devlock);
-+                        kfree(cur);
-+                        printk(KERN_WARNING "Removing read-only on %s\n",
-+                               bdevname(dev));
-+                        return;
-+                }
-+                last = cur;
-+                cur = cur->next;
-+        }
-+        spin_unlock(&devlock);
++      struct deventry *cur, *last = NULL;
++
++      spin_lock(&devlock);
++      cur = devlist;
++      while(cur) {
++              if (dev == cur->dev) {
++                      if (last)
++                              last->next = cur->next;
++                      else
++                              devlist = cur->next;
++                      spin_unlock(&devlock);
++                      kfree(cur);
++                      printk(KERN_WARNING "Removing read-only on %s\n",
++                             bdevname(dev));
++                      return;
++              }
++              last = cur;
++              cur = cur->next;
++      }
++      spin_unlock(&devlock);
 +}
 +
 +EXPORT_SYMBOL(dev_set_rdonly);
 +EXPORT_SYMBOL(dev_check_rdonly);
 +EXPORT_SYMBOL(dev_clear_rdonly);
 +
-+
  inline void drive_stat_acct (kdev_t dev, int rw,
                                unsigned long nr_sectors, int new_io)
  {
@@ -92,10 +90,10 @@ diff -ur linux-2.4.20-rh.orig/drivers/block/ll_rw_blk.c linux-2.4.20-rh/drivers/
                        buffer_IO_error(bh);
                        break;
                }
-+                if ((rw & WRITE)&&(dev_check_rdonly(bh->b_rdev))) {
-+                        bh->b_end_io(bh, 0);
-+                        break;
-+                }
++              if ((rw & WRITE)&&(dev_check_rdonly(bh->b_rdev))) {
++                      bh->b_end_io(bh, 0);
++                      break;
++              }
        } while (q->make_request_fn(q, rw, bh));
  }
  
index e37a15d..3902db5 100644 (file)
@@ -1,6 +1,6 @@
 --- linux-2.4.24.orig/drivers/block/ll_rw_blk.c        2005-04-07 17:30:58.978035892 -0700
 +++ linux-2.4.24/drivers/block/ll_rw_blk.c     2005-04-07 17:22:04.354867801 -0700
-@@ -691,6 +691,86 @@ void set_device_ro(kdev_t dev,int flag)
+@@ -691,6 +691,85 @@ void set_device_ro(kdev_t dev,int flag)
        else ro_bits[major][minor >> 5] &= ~(1 << (minor & 31));
  }
  
 + * testing.
 + */
 +struct deventry {
-+        kdev_t dev;
-+        struct deventry *next;
++      kdev_t dev;
++      struct deventry *next;
 +};
 +
 +static struct deventry *devlist = NULL;
 +static spinlock_t devlock = SPIN_LOCK_UNLOCKED; 
 +
 +int dev_check_rdonly(kdev_t dev) {
-+        struct deventry *cur;
-+        spin_lock(&devlock);
-+        cur = devlist;
-+        while(cur) {
-+                if (dev == cur->dev) {
-+                        spin_unlock(&devlock);
-+                        return 1;
-+                }
-+                cur = cur->next;
-+        }
-+        spin_unlock(&devlock);
-+        return 0;
++      struct deventry *cur;
++      spin_lock(&devlock);
++      cur = devlist;
++      while(cur) {
++              if (dev == cur->dev) {
++                      spin_unlock(&devlock);
++                      return 1;
++              }
++              cur = cur->next;
++      }
++      spin_unlock(&devlock);
++      return 0;
 +}
 +
 +void dev_set_rdonly(kdev_t dev)
 +{
-+        struct deventry *newdev, *cur;
-+        newdev = kmalloc(sizeof(struct deventry), GFP_KERNEL);
-+        if (!newdev) return;
++      struct deventry *newdev, *cur;
++      newdev = kmalloc(sizeof(struct deventry), GFP_KERNEL);
++      if (!newdev) return;
 +
-+        spin_lock(&devlock);
-+        cur = devlist;
-+        while(cur) {
-+                if (dev == cur->dev) {
-+                        spin_unlock(&devlock);
-+                        kfree(newdev);
-+                        return;
-+                }
-+                cur = cur->next;
-+        }
-+        newdev->dev = dev;
-+        newdev->next = devlist;
-+        devlist = newdev;
-+        spin_unlock(&devlock);
-+        printk(KERN_WARNING "Turning device %s read-only\n",
-+               bdevname(dev));
++      spin_lock(&devlock);
++      cur = devlist;
++      while(cur) {
++              if (dev == cur->dev) {
++                      spin_unlock(&devlock);
++                      kfree(newdev);
++                      return;
++              }
++              cur = cur->next;
++      }
++      newdev->dev = dev;
++      newdev->next = devlist;
++      devlist = newdev;
++      spin_unlock(&devlock);
++      printk(KERN_WARNING "Turning device %s read-only\n", bdevname(dev));
 +}
 +
 +void dev_clear_rdonly(kdev_t dev) {
-+        struct deventry *cur, *last = NULL;
-+        spin_lock(&devlock);
-+        cur = devlist;
-+        while(cur) {
-+                if (dev == cur->dev) {
-+                        if (last) 
-+                                last->next = cur->next;
-+                        else
-+                                devlist = cur->next;
-+                        spin_unlock(&devlock);
-+                        kfree(cur);
-+                        printk(KERN_WARNING "Removing read-only on %s\n",
-+                               bdevname(dev));
-+                        return;
-+                }
-+                last = cur;
-+                cur = cur->next;
-+        }
-+        spin_unlock(&devlock);
++      struct deventry *cur, *last = NULL;
++      spin_lock(&devlock);
++      cur = devlist;
++      while(cur) {
++              if (dev == cur->dev) {
++                      if (last) 
++                              last->next = cur->next;
++                      else
++                              devlist = cur->next;
++                      spin_unlock(&devlock);
++                      kfree(cur);
++                      printk(KERN_WARNING "Removing read-only on %s\n",
++                             bdevname(dev));
++                      return;
++              }
++              last = cur;
++              cur = cur->next;
++      }
++      spin_unlock(&devlock);
 +}
 +
 +EXPORT_SYMBOL(dev_set_rdonly);
                        break;
                }
  
-+                if ((rw & WRITE)&&(dev_check_rdonly(bh->b_rdev))) {
-+                        bh->b_end_io(bh, 0);
-+                        break;
-+                }
++              if ((rw & WRITE)&&(dev_check_rdonly(bh->b_rdev))) {
++                      bh->b_end_io(bh, 0);
++                      break;
++              }
        } while (q->make_request_fn(q, rw, bh));
  }
  
                bdev->bd_op = NULL;
        unlock_kernel();
        up(&bdev->bd_sem);
-+        dev_clear_rdonly(to_kdev_t(bdev->bd_dev));
++      dev_clear_rdonly(to_kdev_t(bdev->bd_dev));
        bdput(bdev);
        return ret;
  }