Skip to contentSkip to conversation

*** ANNOUNCEMENT *** LVM 0.9.1 Beta 7 available at www.sistina.com

DISCUSSION Heinz J. Mauelshagen 2 participants 2 messages Apr 10, 2001

lore
Share & tools
lore
#0 lore raw

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!

Signature · 15 lines
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
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#1 lore raw
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"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.

Signature · 3 lines
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/