if (len & 511)
                return -EINVAL;
 
-       if (start + len > i_size_read(bdev->bd_inode))
+       if (start + len > bdev_nr_bytes(bdev))
                return -EINVAL;
 
        err = truncate_bdev_range(bdev, mode, start, start + len - 1);
                return -EINVAL;
        if (len & 511)
                return -EINVAL;
-       if (end >= (uint64_t)i_size_read(bdev->bd_inode))
+       if (end >= (uint64_t)bdev_nr_bytes(bdev))
                return -EINVAL;
        if (end < start)
                return -EINVAL;
        struct block_device *bdev = I_BDEV(file->f_mapping->host);
        void __user *argp = (void __user *)arg;
        fmode_t mode = file->f_mode;
-       loff_t size;
        int ret;
 
        /*
                return put_long(argp,
                        (bdev->bd_disk->bdi->ra_pages * PAGE_SIZE) / 512);
        case BLKGETSIZE:
-               size = i_size_read(bdev->bd_inode);
-               if ((size >> 9) > ~0UL)
+               if (bdev_nr_sectors(bdev) > ~0UL)
                        return -EFBIG;
-               return put_ulong(argp, size >> 9);
+               return put_ulong(argp, bdev_nr_sectors(bdev));
 
        /* The data is compatible, but the command number is different */
        case BLKBSZGET: /* get block device soft block size (cf. BLKSSZGET) */
        case BLKBSZSET:
                return blkdev_bszset(bdev, mode, argp);
        case BLKGETSIZE64:
-               return put_u64(argp, i_size_read(bdev->bd_inode));
+               return put_u64(argp, bdev_nr_bytes(bdev));
 
        /* Incompatible alignment on i386 */
        case BLKTRACESETUP:
        struct block_device *bdev = I_BDEV(file->f_mapping->host);
        struct gendisk *disk = bdev->bd_disk;
        fmode_t mode = file->f_mode;
-       loff_t size;
 
        /*
         * O_NDELAY can be altered using fcntl(.., F_SETFL, ..), so we have
                return compat_put_long(argp,
                        (bdev->bd_disk->bdi->ra_pages * PAGE_SIZE) / 512);
        case BLKGETSIZE:
-               size = i_size_read(bdev->bd_inode);
-               if ((size >> 9) > ~0UL)
+               if (bdev_nr_sectors(bdev) > ~0UL)
                        return -EFBIG;
-               return compat_put_ulong(argp, size >> 9);
+               return compat_put_ulong(argp, bdev_nr_sectors(bdev));
 
        /* The data is compatible, but the command number is different */
        case BLKBSZGET_32: /* get the logical block size (cf. BLKSSZGET) */
        case BLKBSZSET_32:
                return blkdev_bszset(bdev, mode, argp);
        case BLKGETSIZE64_32:
-               return put_u64(argp, i_size_read(bdev->bd_inode));
+               return put_u64(argp, bdev_nr_bytes(bdev));
 
        /* Incompatible alignment on i386 */
        case BLKTRACESETUP32: