}
 
        if (!(mode & FALLOC_FL_KEEP_SIZE) &&
-           (offset + len > i_size_read(inode) ||
+           (offset + len > inode->i_size ||
             offset + len > EXT4_I(inode)->i_disksize)) {
                new_size = offset + len;
                ret = inode_newsize_ok(inode, new_size);
                * Mark that we allocate beyond EOF so the subsequent truncate
                * can proceed even if the new size is the same as i_size.
                */
-               if ((offset + len) > i_size_read(inode))
+               if (offset + len > inode->i_size)
                        ext4_set_inode_flag(inode, EXT4_INODE_EOFBLOCKS);
        }
        ext4_mark_inode_dirty(handle, inode);
        }
 
        if (!(mode & FALLOC_FL_KEEP_SIZE) &&
-           (offset + len > i_size_read(inode) ||
+           (offset + len > inode->i_size ||
             offset + len > EXT4_I(inode)->i_disksize)) {
                new_size = offset + len;
                ret = inode_newsize_ok(inode, new_size);
        if (!ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
                return -EOPNOTSUPP;
 
-       /* Collapse range works only on fs block size aligned offsets. */
-       if (offset & (EXT4_CLUSTER_SIZE(sb) - 1) ||
-           len & (EXT4_CLUSTER_SIZE(sb) - 1))
+       /* Collapse range works only on fs cluster size aligned regions. */
+       if (!IS_ALIGNED(offset | len, EXT4_CLUSTER_SIZE(sb)))
                return -EINVAL;
 
        if (!S_ISREG(inode->i_mode))
         * There is no need to overlap collapse range with EOF, in which case
         * it is effectively a truncate operation
         */
-       if (offset + len >= i_size_read(inode)) {
+       if (offset + len >= inode->i_size) {
                ret = -EINVAL;
                goto out_mutex;
        }
                goto out_stop;
        }
 
-       new_size = i_size_read(inode) - len;
+       new_size = inode->i_size - len;
        i_size_write(inode, new_size);
        EXT4_I(inode)->i_disksize = new_size;
 
        if (!ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
                return -EOPNOTSUPP;
 
-       /* Insert range works only on fs block size aligned offsets. */
-       if (offset & (EXT4_CLUSTER_SIZE(sb) - 1) ||
-                       len & (EXT4_CLUSTER_SIZE(sb) - 1))
+       /* Insert range works only on fs cluster size aligned regions. */
+       if (!IS_ALIGNED(offset | len, EXT4_CLUSTER_SIZE(sb)))
                return -EINVAL;
 
        if (!S_ISREG(inode->i_mode))
                goto out_mutex;
        }
 
-       /* Check for wrap through zero */
-       if (inode->i_size + len > inode->i_sb->s_maxbytes) {
+       /* Check whether the maximum file size would be exceeded */
+       if (len > inode->i_sb->s_maxbytes - inode->i_size) {
                ret = -EFBIG;
                goto out_mutex;
        }
 
-       /* Offset should be less than i_size */
-       if (offset >= i_size_read(inode)) {
+       /* Offset must be less than i_size */
+       if (offset >= inode->i_size) {
                ret = -EINVAL;
                goto out_mutex;
        }