2929#include <linux/buffer_head.h>
3030#include <linux/seq_file.h>
3131#include <trace/events/block.h>
32+
3233#include "md.h"
3334#include "md-bitmap.h"
35+ #include "md-cluster.h"
3436
3537#define BITMAP_MAJOR_LO 3
3638/* version 4 insists the bitmap is in little-endian order
@@ -426,8 +428,8 @@ static int __write_sb_page(struct md_rdev *rdev, struct bitmap *bitmap,
426428 struct block_device * bdev ;
427429 struct mddev * mddev = bitmap -> mddev ;
428430 struct bitmap_storage * store = & bitmap -> storage ;
429- unsigned int bitmap_limit = ( bitmap -> storage .file_pages - pg_index ) <<
430- PAGE_SHIFT ;
431+ unsigned long num_pages = bitmap -> storage .file_pages ;
432+ unsigned int bitmap_limit = ( num_pages - pg_index % num_pages ) << PAGE_SHIFT ;
431433 loff_t sboff , offset = mddev -> bitmap_info .offset ;
432434 sector_t ps = pg_index * PAGE_SIZE / SECTOR_SIZE ;
433435 unsigned int size = PAGE_SIZE ;
@@ -436,7 +438,7 @@ static int __write_sb_page(struct md_rdev *rdev, struct bitmap *bitmap,
436438
437439 bdev = (rdev -> meta_bdev ) ? rdev -> meta_bdev : rdev -> bdev ;
438440 /* we compare length (page numbers), not page offset. */
439- if ((pg_index - store -> sb_index ) == store -> file_pages - 1 ) {
441+ if ((pg_index - store -> sb_index ) == num_pages - 1 ) {
440442 unsigned int last_page_size = store -> bytes & (PAGE_SIZE - 1 );
441443
442444 if (last_page_size == 0 )
@@ -942,7 +944,7 @@ static int md_bitmap_read_sb(struct bitmap *bitmap)
942944 bmname (bitmap ), err );
943945 goto out_no_sb ;
944946 }
945- bitmap -> cluster_slot = md_cluster_ops -> slot_number (bitmap -> mddev );
947+ bitmap -> cluster_slot = bitmap -> mddev -> cluster_ops -> slot_number (bitmap -> mddev );
946948 goto re_read ;
947949 }
948950
@@ -2021,7 +2023,7 @@ static void md_bitmap_free(void *data)
20212023 sysfs_put (bitmap -> sysfs_can_clear );
20222024
20232025 if (mddev_is_clustered (bitmap -> mddev ) && bitmap -> mddev -> cluster_info &&
2024- bitmap -> cluster_slot == md_cluster_ops -> slot_number (bitmap -> mddev ))
2026+ bitmap -> cluster_slot == bitmap -> mddev -> cluster_ops -> slot_number (bitmap -> mddev ))
20252027 md_cluster_stop (bitmap -> mddev );
20262028
20272029 /* Shouldn't be needed - but just in case.... */
@@ -2229,7 +2231,7 @@ static int bitmap_load(struct mddev *mddev)
22292231 mddev_create_serial_pool (mddev , rdev );
22302232
22312233 if (mddev_is_clustered (mddev ))
2232- md_cluster_ops -> load_bitmaps (mddev , mddev -> bitmap_info .nodes );
2234+ mddev -> cluster_ops -> load_bitmaps (mddev , mddev -> bitmap_info .nodes );
22332235
22342236 /* Clear out old bitmap info first: Either there is none, or we
22352237 * are resuming after someone else has possibly changed things,
0 commit comments