blkdev_get() HOWTO

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

 



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

PS: Cc me, I'm not subscribed


--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux