--- 2.4.3aa/drivers/md/lvm.c.~1~ Fri Apr 6 04:41:01 2001 +++ 2.4.3aa/drivers/md/lvm.c Fri Apr 6 04:43:08 2001 @@ -194,6 +194,9 @@ * - factored lvm_do_pv_flush out of lvm_chr_ioctl (HM) * 09/03/2001 - Added _lock_open_count to ensure we only drop the lock * when the locking process closes. + * 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) * */ @@ -1105,11 +1108,11 @@ static int lvm_map(struct buffer_head *bh, int rw) { - int minor = MINOR(bh->b_dev); + int minor = MINOR(bh->b_rdev); ulong index; ulong pe_start; ulong size = bh->b_size >> 9; - ulong rsector_org = bh->b_blocknr * size; + ulong rsector_org = bh->b_rsector; ulong rsector_map; kdev_t rdev_map; vg_t *vg_this = vg[VG_BLK(minor)]; @@ -1134,7 +1137,7 @@ P_MAP("%s - lvm_map minor: %d *rdev: %s *rsector: %lu size:%lu\n", lvm_name, minor, - kdevname(bh->b_dev), + kdevname(bh->b_rdev), rsector_org, size); if (rsector_org + size > lv->lv_size) {