2001-04-10 17:25:59

by Heinz J . Mauelshagen

[permalink] [raw]
Subject: *** ANNOUNCEMENT *** LVM 0.9.1 Beta 7 available at www.sistina.com


Hi all,

a tarball of the Linux Logical Volume Manager 0.9.1 Beta 7 is available now at

<http://www.sistina.com/>

for download (Follow the "LVM 0.9.1-Beta7" link).

This release fixes several bugs.
See the CHANGELOG file contained in the tarball for further information.


Please help us to stabilize for LVM 1.0 ASAP and provide your test results,
bug fixes and advice.


--- Request For Tests ---

Beside others LVM 0.9.1 Beta 7 fixes several pvmove bugs.
We appreciate test feedback in this area on Linus 2.2 and 2.4.

Please try to pvmove logical volumes under load!


Feed back related information to <[email protected]>.

Thanks a lot for your support of LVM!

--

Regards,
Heinz -- The LVM Guy --

*** Software bugs are stupid.
Nevertheless it needs not so stupid people to solve them ***

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Heinz Mauelshagen Sistina Software Inc.
Senior Consultant/Developer Am Sonnenhang 11
56242 Marienrachdorf
Germany
[email protected] +49 2626 141200
FAX 924446
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


2001-04-10 20:02:13

by Martin K. Petersen

[permalink] [raw]
Subject: Re: [linux-lvm] *** ANNOUNCEMENT *** LVM 0.9.1 Beta 7 available at www.sistina.com

>>>>> "Heinz" == Heinz J Mauelshagen <[email protected]> writes:

Heinz> a tarball of the Linux Logical Volume Manager 0.9.1 Beta 7 is
Heinz> available now at

The following code is baaaad, m'kay...

[...]

down(&_pe_lock);
if((pe_lock_req.lock == LOCK_PE) &&
(rdev_map == pe_lock_req.data.pv_dev) &&
(rsector_map >= pe_lock_req.data.pv_offset) &&
(rsector_map < (pe_lock_req.data.pv_offset + vg_this->pe_size)) &&
((rw == WRITE) || (rw == WRITEA))) {
/* defer this bh until the PE has moved */
if(((int) bh) & 0x3) {
printk(KERN_ERR
"%s -- bh uses low 2 bits of pointer\n",
lvm_name);
up(&_pe_lock);
goto bad;
}

bh->b_reqnext = _pe_requests;
_pe_requests = (struct buffer_head *) ((int) bh | rw);
up(&_pe_lock);
up(&lv->lv_snapshot_sem);
return 0;
}
up(&_pe_lock);

[...]

/* handle all deferred io for this PE */
while(q) {
struct buffer_head *d_bh =
(struct buffer_head *) (q & ~0x3);
int rw = q & 0x3;
q = (uint) d_bh->b_reqnext;

/* resubmit this buffer head */
d_bh->b_reqnext = 0;
generic_make_request(rw, d_bh);
}


Not only is this an evil hack from hell, I don't understand why you go
through such a huge effort of storing rw in the pointer. Afaict, the
only valid value is WRITE. And WRITEA is #defined to WRITE in lvm.c.

--
Martin K. Petersen, Principal Linux Consultant, Linuxcare, Inc.
[email protected], http://www.linuxcare.com/
SGI XFS for Linux Developer, http://oss.sgi.com/projects/xfs/