Re: [PATCH] Fix root hole in raw device

From: Willy Tarreau
Date: Tue May 17 2005 - 02:21:28 EST


On Tue, May 17, 2005 at 05:57:48AM +0100, Al Viro wrote:
> On Mon, May 16, 2005 at 09:37:48PM -0700, Greg KH wrote:
> > @@ -122,7 +122,7 @@
> > {
> > struct block_device *bdev = filp->private_data;
> >
> > - return ioctl_by_bdev(bdev, command, arg);
> > + return blkdev_ioctl(bdev->bd_inode, filp, command, arg);
> > }
>
> That is not quite correct. You are passing very odd filp to ->ioctl()...
> Old variant gave NULL, which is also not too nice, though.

2.4 already does it in a cleaner manner :

err = -EINVAL;
if (b && b->bd_inode && b->bd_op && b->bd_op->ioctl) {
err = b->bd_op->ioctl(b->bd_inode, NULL, command, arg);
}
return err;

So may be something like this would be better (hand-written) :

@@ -122,7 +122,9 @@
{
struct block_device *bdev = filp->private_data;
int err = -EINVAL;

- return ioctl_by_bdev(bdev, command, arg);
+ if (bdev && bdev->bd_inode)
+ err = blkdev_ioctl(bdev->bd_inode, filp, command, arg);
+ return err;
}

Willy

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/