return 0;
 }
 
+static void loop_update_rotational(struct loop_device *lo)
+{
+       struct file *file = lo->lo_backing_file;
+       struct inode *file_inode = file->f_mapping->host;
+       struct block_device *file_bdev = file_inode->i_sb->s_bdev;
+       struct request_queue *q = lo->lo_queue;
+       bool nonrot = true;
+
+       /* not all filesystems (e.g. tmpfs) have a sb->s_bdev */
+       if (file_bdev)
+               nonrot = blk_queue_nonrot(bdev_get_queue(file_bdev));
+
+       if (nonrot)
+               blk_queue_flag_set(QUEUE_FLAG_NONROT, q);
+       else
+               blk_queue_flag_clear(QUEUE_FLAG_NONROT, q);
+}
+
 static int loop_set_fd(struct loop_device *lo, fmode_t mode,
                       struct block_device *bdev, unsigned int arg)
 {
        if (!(lo_flags & LO_FLAGS_READ_ONLY) && file->f_op->fsync)
                blk_queue_write_cache(lo->lo_queue, true, false);
 
+       loop_update_rotational(lo);
        loop_update_dio(lo);
        set_capacity(lo->lo_disk, size);
        bd_set_size(bdev, size << 9);