Re: [Yaffs] problem mounting yaffs2 : No such device or addr…

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Ian McDonnell
Date:  
To: yaffs, Richard Genoud
Subject: Re: [Yaffs] problem mounting yaffs2 : No such device or address
Richard,

On Wednesday 21 March 2007 05:30, Richard Genoud wrote:
> I trace the code, and it seems that it's a problem with
> getting the partitioning information.
> I'm going to search in this way.
>
> here's the trace I get :
> mount -tyaffs2 /dev/mtdblock0 /mnt/mtd0
>   into yaffs2_read_super_mtd
>     into get_sb_bdev
>       into open_bdev_excl
>         into do_open
> ->       get_gendisk : kobj_lookup returned NULL   <-
>         do_open : get_gendisk error
>       open_bdev_excl : blkdev_get error
>     open_bdev_excl error : IS_ERR(bdev) = -6
>   get_sb_bdev result=-6

>
> mount: Mounting /dev/mtdblock0 on /mnt/mtd0 failed: No such
> device or address
>
> 2007/3/20, Charles Manning <>:
> > On Wednesday 21 March 2007 04:31, Richard Genoud wrote:
> > > mount -t yaffs2 /dev/mtdblock0 /mnt/mtd0/
> > > mount: Mounting /dev/mtdblock0 on /mnt/mtd0/ failed: No
> > > such device or address
> >
> > You are not getting any yaffs:xxx messages so it looks like
> > the call is being rejected by mount even before it gets to
> > call any specific yaffs code.
> >
> > You can also try turning on more yaffs tracing to see if
> > that helps.


Oh, how this rings a bell. I'm also using the Atmel AT91SAM926X
patches by on a 2.6.15 base and I had to hack the gendisk code.
These half-bread linux revisions are becoming quite ridiculous.
The whole /sys integration is half done and broken.

I had to remove the call to blk_register_queue() and
blk_unregister_queue() in block/genhd.c. See hack.
We only have/use MTD block devices.

-imcd

/**
 * add_disk - add partitioning information to kernel list
 * @disk: per-device partitioning information
 *
 * This function registers the partitioning information in @disk
 * with the kernel.
 */
void add_disk(struct gendisk *disk)
{
        disk->flags |= GENHD_FL_UP;
        blk_register_region(MKDEV(disk->major, disk->first_minor),
                            disk->minors, NULL, exact_match, exact_lock, disk);
        register_disk(disk);
#ifndef CONFIG_BSE_TWEAKS
        blk_register_queue(disk);
#endif
}


EXPORT_SYMBOL(add_disk);
EXPORT_SYMBOL(del_gendisk);     /* in partitions/check.c */


void unlink_gendisk(struct gendisk *disk)
{
#ifndef CONFIG_BSE_TWEAKS
// calling blk_unregister_queue for MTD block devs crashes in kobject_del
// call sequence:
// sys_delete_module > mod_exit > mtd_blktrans_exit > unregister_mtd_user >
// blktrans_notify_remove > mtdblock_remove_dev > del_mtd_blktrans_dev >
// del_gendisk > unlink_gendisk > blk_unregister_queue > kobject_unregister >
// kobject_del > sysfs_remove_dir
        blk_unregister_queue(disk);
#endif
        blk_unregister_region(MKDEV(disk->major, disk->first_minor),
                              disk->minors);
}