sector_t doff;
 
        bdev = (rdev->meta_bdev) ? rdev->meta_bdev : rdev->bdev;
-       if (pg_index == store->file_pages - 1) {
+       /* we compare length (page numbers), not page offset. */
+       if ((pg_index - store->sb_index) == store->file_pages - 1) {
                unsigned int last_page_size = store->bytes & (PAGE_SIZE - 1);
 
                if (last_page_size == 0)
        struct page *page = store->filemap[pg_index];
 
        if (mddev_is_clustered(bitmap->mddev)) {
-               pg_index += bitmap->cluster_slot *
-                       DIV_ROUND_UP(store->bytes, PAGE_SIZE);
+               /* go to node bitmap area starting point */
+               pg_index += store->sb_index;
        }
 
        if (store->file)
        unsigned long index = file_page_index(store, chunk);
        unsigned long node_offset = 0;
 
+       index += store->sb_index;
        if (mddev_is_clustered(bitmap->mddev))
                node_offset = bitmap->cluster_slot * store->file_pages;
 
        unsigned long index = file_page_index(store, chunk);
        unsigned long node_offset = 0;
 
+       index += store->sb_index;
        if (mddev_is_clustered(bitmap->mddev))
                node_offset = bitmap->cluster_slot * store->file_pages;