| Submitter | Brian Norris |
|---|---|
| Date | Aug. 2, 2011, 5:40 p.m. |
| Message ID | <CAN8TOE9mWEmS5YJqNrS9OrG=t+emeLcXNpKR1BiZ6VDJW7_c=A@mail.gmail.com> |
| Download | mbox | patch |
| Permalink | /patch/107979/ |
| State | New |
| Headers | show |
Comments
On 2 August 2011 18:40, Brian Norris <computersforpeace@gmail.com> wrote: > Have you tried linux 3.0, which does not have the patch series that > messes with mtd partition parsing and registering? Yes, and the problem does not appear there. Daniel
On Tue, Aug 2, 2011 at 10:58 AM, Daniel Drake <dsd@laptop.org> wrote: > On 2 August 2011 18:40, Brian Norris <computersforpeace@gmail.com> wrote: >> Have you tried linux 3.0, which does not have the patch series that >> messes with mtd partition parsing and registering? > > Yes, and the problem does not appear there. As expected. Then let's wait and see if anyone has comments on my patch. Brian
Hi Brian, On Tue, Aug 02, 2011 at 10:40:29AM -0700, Brian Norris wrote: > Since Dmitry's change, it looks like cafe_nand will add the master > device, then parse and register its partitions, if found. However, if > partitions are NOT found, then mtd_device_parse_register() falls back > to adding the master device, which was already added. In > drivers/mtd/mtdcore.c, see: > > int mtd_device_parse_register(struct mtd_info *mtd, const char **types, > ... > if (err > 0) { > ... > } else if (err == 0) { > err = add_mtd_device(mtd); > ... > > > So it looks like perhaps we can solve the problem by just killing the > "register the whole device first" and allow mtd_device_parse_register > to do it if there are no partitions. Any cafe_nand developers know if > this is a problem? i.e., is there a reason we need both the whole > device AND the partitions sent to add_mtd_device()? I'll send a full > patch with sign-off and description if there are no objections. I think that's the right thing to do. There's actually a comment in drivers/mtd/mtdpart.c saying: /* NOTE: we don't arrange MTDs as a tree; it'd be error-prone * to have the same data be in two different partitions. */ So I do think it should be the whole device *or* the partitions. In any case, your patch looks good to me. Jamie
Patch
diff --git a/drivers/mtd/nand/cafe_nand.c b/drivers/mtd/nand/cafe_nand.c index fb1425e..72d3f23 100644 --- a/drivers/mtd/nand/cafe_nand.c +++ b/drivers/mtd/nand/cafe_nand.c @@ -798,9 +798,6 @@ static int __devinit cafe_nand_probe(struct pci_dev *pdev, pci_set_drvdata(pdev, mtd); - /* We register the whole device first, separate from the partitions */ - mtd_device_register(mtd, NULL, 0); - mtd->name = "cafe_nand"; mtd_device_parse_register(mtd, part_probes, 0, NULL, 0);