From: Jeff D. <jd...@ka...> - 2002-09-17 14:11:16
|
jam...@ho... said: > I have been trying 2.5.35 and found a few problems with the stock > 2.5.35. (But it is so nice to be starting from the stock version) On the whole, that looks reasonable, especially the ubd fixes. I hadn't got around to looking at the ubd problems yet. > arch/um/kernel/Makefile did not get the obj-y += user_syms.o in 2.5.35 > so modules have problems if they user any of the user side symbols. Hmmm, I wonder how that got lost from 2.5. > __do_copy_to_user escaped being exported :( That was only recently fixed in 2.4, and I hadn't rolled it into 2.5 yet. > I found one include mixup where percpu.h was useing the same ifndef > flag as cacheflush.h this really confused me for a while as I could > not figure out how I was not getting the defines when I could see the > include right there. > > pgtable.h should now define pte_addr_t it appears > > timex.h has gained a couple of defines... there may be a better way to > do this. Nikita Danilov also sent in a patch fixing these. > somehow the merge missed the do_mounts.c entries for ubd, This makes > it very hard to have a good root= :) I tried feeding that to Linus and he spit it out. What he wants (and what I sent in and what was rejected by Al Viro because it would have gotten in the way of the gendisk changes he was making at the time) is something like this: -kdev_t __init name_to_kdev_t(char *line) +kdev_t name_to_kdev_t(char *dev) { + struct gendisk *gp = get_gendisk_by_name(dev); int base = 0; - if (strncmp(line,"/dev/",5) == 0) { - struct dev_name_struct *dev = root_dev_names; - line += 5; - do { - int len = strlen(dev->name); - if (strncmp(line,dev->name,len) == 0) { - line += len; - base = dev->num; - break; - } - dev++; - } while (dev->name); - } - return to_kdev_t(base + simple_strtoul(line,NULL,base?10:16)); + if(gp != NULL){ + base = MKDEV(gp->major, gp->first_minor); + dev += strlen(gp->major_name); + } + + return to_kdev_t(base + simple_strtoul(dev, NULL, base ? 10 : 16)); } static int __init root_dev_setup(char *line) @@ -240,7 +105,6 @@ int i; char ch; - ROOT_DEV = kdev_t_to_nr(name_to_kdev_t(line)); memset (root_device_name, 0, sizeof root_device_name); if (strncmp (line, "/dev/", 5) == 0) line += 5; for (i = 0; i < sizeof root_device_name - 1; ++i) @@ -814,7 +678,10 @@ */ void prepare_namespace(void) { - int is_floppy = MAJOR(ROOT_DEV) == FLOPPY_MAJOR; + int is_floppy; + + ROOT_DEV = kdev_t_to_nr(name_to_kdev_t(root_device_name)); + is_floppy = (MAJOR(ROOT_DEV) == FLOPPY_MAJOR); #ifdef CONFIG_BLK_DEV_INITRD if (!initrd_start) mount_initrd = 0; where you figure out the kdev_t for a device name by looking at the gendisk_head list rather than that long array in do_mounts.c. Jeff |