Whamcloud - gitweb
land b1_5 onto HEAD
[fs/lustre-release.git] / lustre / kernel_patches / patches / dev_read_only-2.6-suse.patch
index db6b72d..d5a5ac4 100644 (file)
@@ -1,5 +1,6 @@
---- linux-2.6.5.orig/drivers/block/ll_rw_blk.c 2005-03-16 11:08:47.404935605 -0800
-+++ linux-2.6.5/drivers/block/ll_rw_blk.c      2005-03-16 10:57:38.197357003 -0800
+diff -ur linux-2.6.5-lnxi.orig/drivers/block/ll_rw_blk.c linux-2.6.5-lnxi/drivers/block/ll_rw_blk.c
+--- linux-2.6.5-lnxi.orig/drivers/block/ll_rw_blk.c    2005-04-11 10:16:14.278505679 -0700
++++ linux-2.6.5-lnxi/drivers/block/ll_rw_blk.c 2005-04-11 09:42:22.750936924 -0700
 @@ -2458,6 +2458,8 @@ static inline void blk_partition_remap(s
        }
  }
  
 +              /* this is cfs's dev_rdonly check */
 +              if (bio->bi_rw == WRITE &&
-+                              dev_check_rdonly(bio->bi_bdev)) {
-+                      bio_endio(bio, bio->bi_size, 0);
-+                      break;
++                              dev_check_rdonly(bio->bi_bdev)) {
++                      bio_endio(bio, bio->bi_size, 0);
++                      break;
 +              }
 +
                /*
                 * 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 *
  }
  
  /*
@@ -31,8 +32,8 @@
 + * 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;
 +
 +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;
-+                }
-+                cur = cur->next;
-+        }
-+        spin_unlock(&devlock);
-+        return 0;
++      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;
++      }
++      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) 
-+              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 : "?");
++      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 (%#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);
   * sysfs parts below
   */
  struct queue_sysfs_entry {
+diff -ur linux-2.6.5-lnxi.orig/fs/block_dev.c linux-2.6.5-lnxi/fs/block_dev.c
+--- linux-2.6.5-lnxi.orig/fs/block_dev.c       2004-11-11 07:28:30.000000000 -0800
++++ linux-2.6.5-lnxi/fs/block_dev.c    2005-04-11 09:49:01.891407856 -0700
+@@ -739,6 +739,7 @@ int blkdev_put(struct block_device *bdev
+       }
+       unlock_kernel();
+       up(&bdev->bd_sem);
++      dev_clear_rdonly(bdev);
+       bdput(bdev);
+       return ret;
+ }
+diff -ur linux-2.6.5-lnxi.orig/include/linux/fs.h linux-2.6.5-lnxi/include/linux/fs.h
+--- linux-2.6.5-lnxi.orig/include/linux/fs.h   2004-11-11 07:28:45.000000000 -0800
++++ linux-2.6.5-lnxi/include/linux/fs.h        2005-04-11 09:43:27.423116140 -0700
+@@ -1385,6 +1385,10 @@ extern void file_kill(struct file *f);
+ struct bio;
+ extern int submit_bio(int, struct bio *);
+ extern int bdev_read_only(struct block_device *);
++#define HAVE_CLEAR_RDONLY_ON_PUT
++void dev_set_rdonly(struct block_device *bdev);
++int dev_check_rdonly(struct block_device *bdev);
++void dev_clear_rdonly(struct block_device *bdev);
+ extern int set_blocksize(struct block_device *, int);
+ extern int sb_set_blocksize(struct super_block *, int);
+ extern int sb_min_blocksize(struct super_block *, int);