Re: [dm-devel] dev kernels(bio change), evms_activate still produces oops

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Sorry for being so slow.  Here's a patch that I believe will fix this oops.
Please give this a try and let me know.  The problem is that when I
coded up the new bio_clone() code, I made the bad assumption that the
bio passed in would have been allocated from a bio_set.  In the case
of raid5 and raid6, this isn't the case.  So, when raid5 passes one
of its bio's into the dm code, and dm tries to bio_clone() it,
bio_clone() dereferences a NULL pointer.

As a quick fix, this patch changes bio_clone() to just use the global
bio_set to allocate the new bio.  Problem is, this potentially sets
up another bio exhaustion case.  I'm thinking there should maybe
be a bio_clone_bioset() that accepts a bio_set pointer as an argument.
That way, dm could for example pass in it's own bio_set to allocate
from.

But for now, here's the quick patch.  Please give it a try and give
me the results.


diff -ur linux-2.6.11-rc3-bk4-udm1/fs/bio.c linux-2.6.11-rc3-bk4-udm1-patch/fs/bio.c
--- linux-2.6.11-rc3-bk4-udm1/fs/bio.c	2005-02-08 15:36:16.000000000 -0800
+++ linux-2.6.11-rc3-bk4-udm1-patch/fs/bio.c	2005-02-09 14:56:39.000000000 -0800
@@ -258,7 +258,7 @@
  */
 struct bio *bio_clone(struct bio *bio, int gfp_mask)
 {
-	struct bio *b = bio_alloc_bioset(gfp_mask, bio->bi_max_vecs, bio->bi_set);
+	struct bio *b = bio_alloc_bioset(gfp_mask, bio->bi_max_vecs, fs_bio_set);
 
 	if (b)
 		__bio_clone(b, bio);


[Index of Archives]     [DM Crypt]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Packaging]     [Fedora SELinux]     [Yosemite Discussion]     [KDE Users]     [Fedora Docs]

  Powered by Linux