Whamcloud - gitweb
Clear dev_rdonly flag for external journal devices (Andreas)
authorgirish <girish>
Thu, 18 Dec 2008 14:46:45 +0000 (14:46 +0000)
committergirish <girish>
Thu, 18 Dec 2008 14:46:45 +0000 (14:46 +0000)
b=18018
i=johann
i=girish

lustre/ChangeLog
lustre/kernel_patches/patches/dev_read_only-2.6-fc5.patch
lustre/kernel_patches/patches/dev_read_only-2.6-suse.patch
lustre/kernel_patches/patches/dev_read_only-2.6.18-vanilla.patch
lustre/kernel_patches/patches/dev_read_only-2.6.22-vanilla.patch

index f583dc5..6e39098 100644 (file)
@@ -13,6 +13,13 @@ tbd  Sun Microsystems, Inc.
         removed cwd "./" (refer to Bugzilla 14399).
        * File join has been disabled in this release, refer to Bugzilla 16929.
 
+Severity   : major
+Frequency  : on remount
+Bugzilla   : 18018
+Description: external journal device not working after the remount
+Details    : clear dev_rdonly flag for external journal devices in
+             blkdev_put()
+
 Severity   : normal
 Frequency  : race on file read and write
 Bugzilla   : 16417
index 5cab63e..51c7f66 100644 (file)
@@ -1,7 +1,8 @@
-diff -rup linux-2.6.16.i686.orig/block/ll_rw_blk.c linux-2.6.16.i686/block/ll_rw_blk.c
---- linux-2.6.16.i686.orig/block/ll_rw_blk.c   2007-05-29 15:24:36.000000000 +0300
-+++ linux-2.6.16.i686/block/ll_rw_blk.c        2007-05-29 15:33:50.000000000 +0300
-@@ -2940,6 +2940,8 @@ static void handle_bad_sector(struct bio
+Index: linux-2.6.16.i686/block/ll_rw_blk.c
+===================================================================
+--- linux-2.6.16.i686.orig/block/ll_rw_blk.c
++++ linux-2.6.16.i686/block/ll_rw_blk.c
+@@ -2989,6 +2989,8 @@ static void handle_bad_sector(struct bio
        set_bit(BIO_EOF, &bio->bi_flags);
  }
  
@@ -10,7 +11,7 @@ diff -rup linux-2.6.16.i686.orig/block/ll_rw_blk.c linux-2.6.16.i686/block/ll_rw
  /**
   * generic_make_request: hand a buffer to its device driver for I/O
   * @bio:  The bio describing the location in memory and on the device.
-@@ -3020,6 +3022,12 @@ end_io:
+@@ -3075,6 +3077,12 @@ end_io:
  
                if (unlikely(test_bit(QUEUE_FLAG_DEAD, &q->queue_flags)))
                        goto end_io;
@@ -23,7 +24,7 @@ diff -rup linux-2.6.16.i686.orig/block/ll_rw_blk.c linux-2.6.16.i686/block/ll_rw
  
                /*
                 * If this device has partitions, remap block n
-@@ -3593,6 +3601,91 @@ void swap_io_context(struct io_context *
+@@ -3697,6 +3705,91 @@ void swap_io_context(struct io_context *
        *ioc2 = temp;
  }
  EXPORT_SYMBOL(swap_io_context);
@@ -115,21 +116,23 @@ diff -rup linux-2.6.16.i686.orig/block/ll_rw_blk.c linux-2.6.16.i686/block/ll_rw
  
  /*
   * sysfs parts below
-diff -rup linux-2.6.16.i686.orig/fs/block_dev.c linux-2.6.16.i686/fs/block_dev.c
---- linux-2.6.16.i686.orig/fs/block_dev.c      2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.i686/fs/block_dev.c   2007-05-29 15:35:00.000000000 +0300
-@@ -60,6 +60,7 @@ static void kill_bdev(struct block_devic
- {
-       invalidate_bdev(bdev, 1);
-       truncate_inode_pages(bdev->bd_inode->i_mapping, 0);
-+      dev_clear_rdonly(bdev);
- }     
- int set_blocksize(struct block_device *bdev, int size)
-diff -rup linux-2.6.16.i686.orig/include/linux/fs.h linux-2.6.16.i686/include/linux/fs.h
---- linux-2.6.16.i686.orig/include/linux/fs.h  2007-05-29 15:24:38.000000000 +0300
-+++ linux-2.6.16.i686/include/linux/fs.h       2007-05-29 15:33:50.000000000 +0300
-@@ -1541,6 +1541,10 @@ extern void file_kill(struct file *f);
+Index: linux-2.6.16.i686/fs/block_dev.c
+===================================================================
+--- linux-2.6.16.i686.orig/fs/block_dev.c
++++ linux-2.6.16.i686/fs/block_dev.c
+@@ -763,6 +763,7 @@ int blkdev_put(struct block_device *bdev
+                       blkdev_put(bdev->bd_contains);
+               }
+               bdev->bd_contains = NULL;
++              dev_clear_rdonly(bdev);
+       }
+       unlock_kernel();
+       up(&bdev->bd_sem);
+Index: linux-2.6.16.i686/include/linux/fs.h
+===================================================================
+--- linux-2.6.16.i686.orig/include/linux/fs.h
++++ linux-2.6.16.i686/include/linux/fs.h
+@@ -1595,6 +1595,10 @@ extern void file_kill(struct file *f);
  struct bio;
  extern void submit_bio(int, struct bio *);
  extern int bdev_read_only(struct block_device *);
index e486944..a93ffa5 100644 (file)
@@ -2,7 +2,7 @@ Index: linux-2.6.9/drivers/block/ll_rw_blk.c
 ===================================================================
 --- linux-2.6.9.orig/drivers/block/ll_rw_blk.c
 +++ linux-2.6.9/drivers/block/ll_rw_blk.c
-@@ -2326,6 +2326,8 @@ static inline int attempt_front_merge(re
+@@ -2331,6 +2331,8 @@ static inline int attempt_front_merge(re
        return 0;
  }
  
@@ -11,7 +11,7 @@ Index: linux-2.6.9/drivers/block/ll_rw_blk.c
  /**
   * blk_attempt_remerge  - attempt to remerge active head with next request
   * @q:    The &request_queue_t belonging to the device
-@@ -2631,6 +2633,13 @@ end_io:
+@@ -2636,6 +2638,13 @@ end_io:
                if (test_bit(QUEUE_FLAG_DEAD, &q->queue_flags))
                        goto end_io;
  
@@ -25,7 +25,7 @@ Index: linux-2.6.9/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.
-@@ -3180,6 +3189,92 @@ void swap_io_context(struct io_context *
+@@ -3185,6 +3194,92 @@ void swap_io_context(struct io_context *
  
  
  /*
@@ -122,19 +122,19 @@ Index: linux-2.6.9/fs/block_dev.c
 ===================================================================
 --- linux-2.6.9.orig/fs/block_dev.c
 +++ linux-2.6.9/fs/block_dev.c
-@@ -60,6 +60,7 @@ static void kill_bdev(struct block_devic
- {
-       invalidate_bdev(bdev, 1);
-       truncate_inode_pages(bdev->bd_inode->i_mapping, 0);
-+      dev_clear_rdonly(bdev);
- }     
- int set_blocksize(struct block_device *bdev, int size)
+@@ -744,6 +744,7 @@ int blkdev_put(struct block_device *bdev
+                       blkdev_put(bdev->bd_contains);
+               }
+               bdev->bd_contains = NULL;
++              dev_clear_rdonly(bdev);
+       }
+       unlock_kernel();
+       up(&bdev->bd_sem);
 Index: linux-2.6.9/include/linux/fs.h
 ===================================================================
 --- linux-2.6.9.orig/include/linux/fs.h
 +++ linux-2.6.9/include/linux/fs.h
-@@ -1492,6 +1492,10 @@ extern void file_kill(struct file *f);
+@@ -1479,6 +1479,10 @@ extern void file_kill(struct file *f);
  struct bio;
  extern void submit_bio(int, struct bio *);
  extern int bdev_read_only(struct block_device *);
index ff6cf91..b4704a5 100644 (file)
@@ -1,7 +1,8 @@
-diff -urp linux-2.6.18.1.orig/block/ll_rw_blk.c linux-2.6.18.1/block/ll_rw_blk.c
---- linux-2.6.18.1.orig/block/ll_rw_blk.c      2006-10-14 06:34:03.000000000 +0300
-+++ linux-2.6.18.1/block/ll_rw_blk.c   2007-05-29 14:50:46.000000000 +0300
-@@ -2993,6 +2993,8 @@ static void handle_bad_sector(struct bio
+Index: linux-2.6.18.1/block/ll_rw_blk.c
+===================================================================
+--- linux-2.6.18.1.orig/block/ll_rw_blk.c
++++ linux-2.6.18.1/block/ll_rw_blk.c
+@@ -3067,6 +3067,8 @@ static void handle_bad_sector(struct bio
        set_bit(BIO_EOF, &bio->bi_flags);
  }
  
@@ -10,7 +11,7 @@ diff -urp linux-2.6.18.1.orig/block/ll_rw_blk.c linux-2.6.18.1/block/ll_rw_blk.c
  /**
   * generic_make_request: hand a buffer to its device driver for I/O
   * @bio:  The bio describing the location in memory and on the device.
-@@ -3076,6 +3078,12 @@ end_io:
+@@ -3151,6 +3153,12 @@ end_io:
  
                if (unlikely(test_bit(QUEUE_FLAG_DEAD, &q->queue_flags)))
                        goto end_io;
@@ -23,7 +24,7 @@ diff -urp linux-2.6.18.1.orig/block/ll_rw_blk.c linux-2.6.18.1/block/ll_rw_blk.c
  
                /*
                 * If this device has partitions, remap block n
-@@ -3675,6 +3683,91 @@ void swap_io_context(struct io_context *
+@@ -3765,6 +3773,91 @@ void swap_io_context(struct io_context *
        *ioc2 = temp;
  }
  EXPORT_SYMBOL(swap_io_context);
@@ -115,21 +116,23 @@ diff -urp linux-2.6.18.1.orig/block/ll_rw_blk.c linux-2.6.18.1/block/ll_rw_blk.c
  
  /*
   * sysfs parts below
-diff -urp linux-2.6.18.1.orig/fs/block_dev.c linux-2.6.18.1/fs/block_dev.c
---- linux-2.6.18.1.orig/fs/block_dev.c 2006-10-14 06:34:03.000000000 +0300
-+++ linux-2.6.18.1/fs/block_dev.c      2007-05-29 14:53:38.000000000 +0300
-@@ -58,6 +58,7 @@ static void kill_bdev(struct block_devic
- {
-       invalidate_bdev(bdev, 1);
-       truncate_inode_pages(bdev->bd_inode->i_mapping, 0);
-+      dev_clear_rdonly(bdev);
- }     
- int set_blocksize(struct block_device *bdev, int size)
-diff -urp linux-2.6.18.1.orig/include/linux/fs.h linux-2.6.18.1/include/linux/fs.h
---- linux-2.6.18.1.orig/include/linux/fs.h     2006-10-14 06:34:03.000000000 +0300
-+++ linux-2.6.18.1/include/linux/fs.h  2007-05-29 14:50:46.000000000 +0300
-@@ -1632,6 +1632,10 @@ extern void file_kill(struct file *f);
+Index: linux-2.6.18.1/fs/block_dev.c
+===================================================================
+--- linux-2.6.18.1.orig/fs/block_dev.c
++++ linux-2.6.18.1/fs/block_dev.c
+@@ -1059,6 +1059,7 @@ static int __blkdev_put(struct block_dev
+               if (bdev != bdev->bd_contains)
+                       victim = bdev->bd_contains;
+               bdev->bd_contains = NULL;
++              dev_clear_rdonly(bdev);
+       }
+       unlock_kernel();
+       mutex_unlock(&bdev->bd_mutex);
+Index: linux-2.6.18.1/include/linux/fs.h
+===================================================================
+--- linux-2.6.18.1.orig/include/linux/fs.h
++++ linux-2.6.18.1/include/linux/fs.h
+@@ -1685,6 +1685,10 @@ extern void file_kill(struct file *f);
  struct bio;
  extern void submit_bio(int, struct bio *);
  extern int bdev_read_only(struct block_device *);
index e7e40ac..39dca98 100644 (file)
@@ -6,19 +6,20 @@ At one time it was required to avoid crashes in the JBD layer during
 failover, but it may also be possible to just allow the inflight IO to
 complete and have Lustre handle this more gracefully.
 
-diff -urp linux-2.6.18.1.orig/block/ll_rw_blk.c linux-2.6.18.1/block/ll_rw_blk.c
---- linux-2.6.18.1.orig/block/ll_rw_blk.c      2006-10-14 06:34:03.000000000 +0300
-+++ linux-2.6.18.1/block/ll_rw_blk.c   2007-05-29 14:50:46.000000000 +0300
-@@ -2993,6 +2993,8 @@ static void handle_bad_sector(struct bio
-       set_bit(BIO_EOF, &bio->bi_flags);
- }
+Index: linux-2.6.22.5/block/ll_rw_blk.c
+===================================================================
+--- linux-2.6.22.5.orig/block/ll_rw_blk.c
++++ linux-2.6.22.5/block/ll_rw_blk.c
+@@ -3101,6 +3101,8 @@ static inline int should_fail_request(st
+ #endif /* CONFIG_FAIL_MAKE_REQUEST */
  
 +int dev_check_rdonly(struct block_device *bdev);
 +
  /**
   * generic_make_request: hand a buffer to its device driver for I/O
   * @bio:  The bio describing the location in memory and on the device.
-@@ -3076,6 +3078,12 @@ end_io:
+@@ -3185,6 +3187,12 @@ end_io:
  
                if (unlikely(test_bit(QUEUE_FLAG_DEAD, &q->queue_flags)))
                        goto end_io;
@@ -29,9 +30,9 @@ diff -urp linux-2.6.18.1.orig/block/ll_rw_blk.c linux-2.6.18.1/block/ll_rw_blk.c
 +                      break;
 +              }
  
-               /*
-                * If this device has partitions, remap block n
-@@ -3675,6 +3683,91 @@ void swap_io_context(struct io_context *
+               if (should_fail_request(bio))
+                       goto end_io;
+@@ -3850,6 +3858,91 @@ void swap_io_context(struct io_context *
        *ioc2 = temp;
  }
  EXPORT_SYMBOL(swap_io_context);
@@ -123,21 +124,23 @@ diff -urp linux-2.6.18.1.orig/block/ll_rw_blk.c linux-2.6.18.1/block/ll_rw_blk.c
  
  /*
   * sysfs parts below
-diff -urp linux-2.6.18.1.orig/fs/block_dev.c linux-2.6.18.1/fs/block_dev.c
---- linux-2.6.18.1.orig/fs/block_dev.c 2006-10-14 06:34:03.000000000 +0300
-+++ linux-2.6.18.1/fs/block_dev.c      2007-05-29 14:53:38.000000000 +0300
-@@ -58,6 +58,7 @@ static void kill_bdev(struct block_devic
- {
-       invalidate_bdev(bdev, 1);
-       truncate_inode_pages(bdev->bd_inode->i_mapping, 0);
-+      dev_clear_rdonly(bdev);
- }     
- int set_blocksize(struct block_device *bdev, int size)
-diff -urp linux-2.6.18.1.orig/include/linux/fs.h linux-2.6.18.1/include/linux/fs.h
---- linux-2.6.18.1.orig/include/linux/fs.h     2006-10-14 06:34:03.000000000 +0300
-+++ linux-2.6.18.1/include/linux/fs.h  2007-05-29 14:50:46.000000000 +0300
-@@ -1632,6 +1632,10 @@ extern void file_kill(struct file *f);
+Index: linux-2.6.22.5/fs/block_dev.c
+===================================================================
+--- linux-2.6.22.5.orig/fs/block_dev.c
++++ linux-2.6.22.5/fs/block_dev.c
+@@ -1294,6 +1294,7 @@ static int __blkdev_put(struct block_dev
+               if (bdev != bdev->bd_contains)
+                       victim = bdev->bd_contains;
+               bdev->bd_contains = NULL;
++              dev_clear_rdonly(bdev);
+       }
+       unlock_kernel();
+       mutex_unlock(&bdev->bd_mutex);
+Index: linux-2.6.22.5/include/linux/fs.h
+===================================================================
+--- linux-2.6.22.5.orig/include/linux/fs.h
++++ linux-2.6.22.5/include/linux/fs.h
+@@ -1744,6 +1744,10 @@ struct bio;
  extern void submit_bio(int, struct bio *);
  extern int bdev_read_only(struct block_device *);
  #endif