|
@@ -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);
|
|
struct block_device *bdev = I_BDEV(file->f_mapping->host);
|
|
fmode_t mode = file->f_mode;
|
|
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)
|
|
if (file->f_flags & O_NDELAY)
|
|
- mode |= FMODE_NDELAY_NOW;
|
|
|
|
|
|
+ mode |= FMODE_NDELAY;
|
|
|
|
+ else
|
|
|
|
+ mode &= ~FMODE_NDELAY;
|
|
|
|
+
|
|
return blkdev_ioctl(bdev, mode, cmd, arg);
|
|
return blkdev_ioctl(bdev, mode, cmd, arg);
|
|
}
|
|
}
|
|
|
|
|