[Sorry if this is a dupe, dunno if unsubscribed ones can post] Hi, I'm trying to understand a bit struct block_device and friends. I'm writing a piece of code which needs to hold a ref onto a bdev. This piece of code works on hda or ram0, but oopses on fd0 or cdrom: > static void piggyback(dev_t dev) > { > struct block_device *bdev; > int err; > bdev = bdget(dev); > if(!bdev) > { > printk(KERN_ERR "no bdev ...\n"); > goto no_bdev; > } > err = blkdev_get(bdev, FMODE_READ, 0, BDEV_RAW); > if(err) > { > printk(KERN_ERR "blkdev_get: error %d\n", -err); > goto no_get; > } > printk(KERN_INFO "using device %s\n", bdev->bd_disk->disk_name); > blkdev_put(bdev, BDEV_RAW); > no_get: > bdput(bdev); > no_bdev: > return; > } This function gets called inside proc_file_write. I'm using a 2.6.0 kernel. Any hint on what I get wrong ? Thanks, Xav -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/