Whamcloud - gitweb
- no more flooding
[fs/lustre-release.git] / lustre / kernel_patches / patches / dev_read_only-2.6.10-fc3.patch
index 0398e0e..1b9c58e 100644 (file)
@@ -1,7 +1,7 @@
 Index: linux-2.6.10/drivers/block/ll_rw_blk.c
 ===================================================================
 --- linux-2.6.10.orig/drivers/block/ll_rw_blk.c        2004-12-25 05:33:59.000000000 +0800
-+++ linux-2.6.10/drivers/block/ll_rw_blk.c     2005-04-07 00:37:34.299974720 +0800
++++ linux-2.6.10/drivers/block/ll_rw_blk.c     2005-04-08 12:35:49.785573840 +0800
 @@ -2598,6 +2598,8 @@
        set_bit(BIO_EOF, &bio->bi_flags);
  }
@@ -25,7 +25,7 @@ Index: linux-2.6.10/drivers/block/ll_rw_blk.c
                /*
                 * If this device has partitions, remap block n
                 * of partition p to block n+start(p) of the disk.
-@@ -3156,6 +3165,91 @@
+@@ -3156,6 +3165,79 @@
  EXPORT_SYMBOL(swap_io_context);
  
  /*
@@ -34,10 +34,9 @@ Index: linux-2.6.10/drivers/block/ll_rw_blk.c
 + */
 +struct deventry {
 +        dev_t dev;
-+        struct deventry *next;
++        struct list_head dev_list;
 +};
-+
-+static struct deventry *devlist = NULL;
++static struct list_head devlist = LIST_HEAD_INIT(devlist);
 +static spinlock_t devlock = SPIN_LOCK_UNLOCKED; 
 +
 +int dev_check_rdonly(struct block_device *bdev) 
@@ -45,13 +44,11 @@ Index: linux-2.6.10/drivers/block/ll_rw_blk.c
 +        struct deventry *cur;
 +        if (!bdev) return 0;
 +        spin_lock(&devlock);
-+        cur = devlist;
-+        while(cur) {
++      list_for_each_entry(cur, &devlist, dev_list) {
 +                if (bdev->bd_dev == cur->dev) {
 +                        spin_unlock(&devlock);
 +                        return 1;
 +                }
-+                cur = cur->next;
 +        }
 +        spin_unlock(&devlock);
 +        return 0;
@@ -68,18 +65,15 @@ Index: linux-2.6.10/drivers/block/ll_rw_blk.c
 +              return;
 +
 +        spin_lock(&devlock);
-+        cur = devlist;
-+        while(cur) {
++      list_for_each_entry(cur, &devlist, dev_list) {
 +                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;
++      list_add(&newdev->dev_list, &devlist); 
 +        spin_unlock(&devlock);
 +        printk(KERN_WARNING "Turning device %s read-only\n",
 +               bdev->bd_disk ? bdev->bd_disk->disk_name : "?");
@@ -87,24 +81,18 @@ Index: linux-2.6.10/drivers/block/ll_rw_blk.c
 +
 +void dev_clear_rdonly(struct block_device *bdev) 
 +{
-+        struct deventry *cur, *last = NULL;
++        struct deventry *cur, *tmp;
 +        if (!bdev) return;
 +        spin_lock(&devlock);
-+        cur = devlist;
-+        while(cur) {
++      list_for_each_entry_safe(cur, tmp, &devlist, dev_list) { 
 +                if (bdev->bd_dev == cur->dev) {
-+                        if (last) 
-+                                last->next = cur->next;
-+                        else
-+                                devlist = cur->next;
++                        list_del_init(&cur->dev_list);
++                      kfree(cur);
 +                        spin_unlock(&devlock);
-+                        kfree(cur);
 +                        printk(KERN_WARNING "Removing read-only on %s\n",
 +                             bdev->bd_disk ? bdev->bd_disk->disk_name : "?");
 +                      return;
 +                }
-+                last = cur;
-+                cur = cur->next;
 +        }
 +        spin_unlock(&devlock);
 +}