return f2fs_do_sync_file(file, start, end, datasync, false);
 }
 
-static bool __found_offset(struct address_space *mapping, block_t blkaddr,
-                               pgoff_t index, int whence)
+static bool __found_offset(struct address_space *mapping,
+               struct dnode_of_data *dn, pgoff_t index, int whence)
 {
+       block_t blkaddr = f2fs_data_blkaddr(dn);
+       struct inode *inode = mapping->host;
+       bool compressed_cluster = false;
+
+       if (f2fs_compressed_file(inode)) {
+               block_t first_blkaddr = data_blkaddr(dn->inode, dn->node_page,
+                   ALIGN_DOWN(dn->ofs_in_node, F2FS_I(inode)->i_cluster_size));
+
+               compressed_cluster = first_blkaddr == COMPRESS_ADDR;
+       }
+
        switch (whence) {
        case SEEK_DATA:
                if (__is_valid_data_blkaddr(blkaddr))
                if (blkaddr == NEW_ADDR &&
                    xa_get_mark(&mapping->i_pages, index, PAGECACHE_TAG_DIRTY))
                        return true;
+               if (compressed_cluster)
+                       return true;
                break;
        case SEEK_HOLE:
+               if (compressed_cluster)
+                       return false;
                if (blkaddr == NULL_ADDR)
                        return true;
                break;
                                goto fail;
                        }
 
-                       if (__found_offset(file->f_mapping, blkaddr,
+                       if (__found_offset(file->f_mapping, &dn,
                                                        pgofs, whence)) {
                                f2fs_put_dnode(&dn);
                                goto found;