block: Add BLKROTATIONAL ioctl
authorMartin K. Petersen <martin.petersen@oracle.com>
Wed, 11 Jan 2012 15:29:31 +0000 (16:29 +0100)
committerJens Axboe <axboe@kernel.dk>
Wed, 11 Jan 2012 15:29:31 +0000 (16:29 +0100)
Introduce an ioctl which permits applications to query whether a block
device is rotational.

Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/compat_ioctl.c
block/ioctl.c
include/linux/fs.h

index 7b725020823c82243418c7d0105b9f6d23260589..7c668c8a6f953e1b6c298c9fc8af400924d7368a 100644 (file)
@@ -719,6 +719,9 @@ long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg)
        case BLKSECTGET:
                return compat_put_ushort(arg,
                                         queue_max_sectors(bdev_get_queue(bdev)));
+       case BLKROTATIONAL:
+               return compat_put_ushort(arg,
+                                        !blk_queue_nonrot(bdev_get_queue(bdev)));
        case BLKRASET: /* compatible, but no compat_ptr (!) */
        case BLKFRASET:
                if (!capable(CAP_SYS_ADMIN))
index ca939fc1030f29489f8a5f2c5a142c4e6a6f2264..337d207ab14dd1df31111d4d13cfa31e7f55b07c 100644 (file)
@@ -278,6 +278,8 @@ int blkdev_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
                return put_uint(arg, bdev_discard_zeroes_data(bdev));
        case BLKSECTGET:
                return put_ushort(arg, queue_max_sectors(bdev_get_queue(bdev)));
+       case BLKROTATIONAL:
+               return put_ushort(arg, !blk_queue_nonrot(bdev_get_queue(bdev)));
        case BLKRASET:
        case BLKFRASET:
                if(!capable(CAP_SYS_ADMIN))
index e0bc4ffb8e7f0ec42a916219ab02f43a112609d1..95dd911506f159df838c8c3e1a85d8e1b135e80f 100644 (file)
@@ -319,6 +319,7 @@ struct inodes_stat_t {
 #define BLKPBSZGET _IO(0x12,123)
 #define BLKDISCARDZEROES _IO(0x12,124)
 #define BLKSECDISCARD _IO(0x12,125)
+#define BLKROTATIONAL _IO(0x12,126)
 
 #define BMAP_IOCTL 1           /* obsolete - kept for compatibility */
 #define FIBMAP    _IO(0x00,1)  /* bmap access */