X-Git-Url: http://ftp.safe.ca/?p=safe%2Fjmp%2Flinux-2.6;a=blobdiff_plain;f=fs%2Fblock_dev.c;h=99e0ae1a4c789fff59aae0e32207755e38fa7e41;hp=7c727523bc54a62bf6f7aa3c90a8bc7fe93b24f0;hb=fd4ce1acd0f8558033b1a6968001552bd7671e6d;hpb=ebbefc011e56bd85b4745d01e5b8d7d05d95ed5d diff --git a/fs/block_dev.c b/fs/block_dev.c index 7c72752..99e0ae1 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -1206,8 +1206,16 @@ static long block_ioctl(struct file *file, unsigned cmd, unsigned long arg) { struct block_device *bdev = I_BDEV(file->f_mapping->host); fmode_t mode = file->f_mode; + + /* + * O_NDELAY can be altered using fcntl(.., F_SETFL, ..), so we have + * to updated it before every ioctl. + */ if (file->f_flags & O_NDELAY) - mode |= FMODE_NDELAY_NOW; + mode |= FMODE_NDELAY; + else + mode &= ~FMODE_NDELAY; + return blkdev_ioctl(bdev, mode, cmd, arg); }