patch-2.4.4 linux/drivers/md/lvm.c
Next file: linux/drivers/md/md.c
Previous file: linux/drivers/md/lvm-snap.c
Back to the patch index
Back to the overall index
- Lines: 58
- Date:
Sat Apr 21 10:37:16 2001
- Orig file:
v2.4.3/linux/drivers/md/lvm.c
- Orig date:
Sun Jan 28 16:11:20 2001
diff -u --recursive --new-file v2.4.3/linux/drivers/md/lvm.c linux/drivers/md/lvm.c
@@ -148,6 +148,9 @@
* procfs is always supported now. (JT)
* 12/01/2001 - avoided flushing logical volume in case of shrinking
* because of unecessary overhead in case of heavy updates
+ * 05/04/2001 - lvm_map bugs: don't use b_blocknr/b_dev in lvm_map, it
+ * destroys stacking devices. call b_end_io on failed maps.
+ * (Jens Axboe)
*
*/
@@ -163,13 +166,6 @@
#include <linux/config.h>
#include <linux/version.h>
-
-#ifdef MODVERSIONS
-#undef MODULE
-#define MODULE
-#include <linux/modversions.h>
-#endif
-
#include <linux/module.h>
#include <linux/kernel.h>
@@ -1480,14 +1476,14 @@
*/
static int lvm_map(struct buffer_head *bh, int rw)
{
- int minor = MINOR(bh->b_dev);
+ int minor = MINOR(bh->b_rdev);
int ret = 0;
ulong index;
ulong pe_start;
ulong size = bh->b_size >> 9;
- ulong rsector_tmp = bh->b_blocknr * size;
+ ulong rsector_tmp = bh->b_rsector;
ulong rsector_sav;
- kdev_t rdev_tmp = bh->b_dev;
+ kdev_t rdev_tmp = bh->b_rdev;
kdev_t rdev_sav;
vg_t *vg_this = vg[VG_BLK(minor)];
lv_t *lv = vg_this->lv[LV_BLK(minor)];
@@ -1676,8 +1672,13 @@
*/
static int lvm_make_request_fn(request_queue_t *q,
int rw,
- struct buffer_head *bh) {
- return (lvm_map(bh, rw) < 0) ? 0 : 1;
+ struct buffer_head *bh)
+{
+ if (lvm_map(bh, rw) >= 0)
+ return 1;
+
+ buffer_IO_error(bh);
+ return 0;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)