Loading drivers/md/bitmap.c +9 −7 Original line number Diff line number Diff line Loading @@ -203,9 +203,13 @@ static int write_sb_page(struct bitmap *bitmap, struct page *page, int wait) bdev = (rdev->meta_bdev) ? rdev->meta_bdev : rdev->bdev; if (page->index == store->file_pages-1) size = roundup(store->last_page_size, if (page->index == store->file_pages-1) { int last_page_size = store->bytes & (PAGE_SIZE-1); if (last_page_size == 0) last_page_size = PAGE_SIZE; size = roundup(last_page_size, bdev_logical_block_size(bdev)); } /* Just make sure we aren't corrupting data or * metadata */ Loading Loading @@ -973,6 +977,8 @@ static int bitmap_init_from_disk(struct bitmap *bitmap, sector_t start) if (!bitmap->mddev->bitmap_info.external) bytes += sizeof(bitmap_super_t); store->bytes = bytes; num_pages = DIV_ROUND_UP(bytes, PAGE_SIZE); if (file && i_size_read(file->f_mapping->host) < bytes) { Loading Loading @@ -1042,8 +1048,6 @@ static int bitmap_init_from_disk(struct bitmap *bitmap, sector_t start) oldindex = index; store->last_page_size = count; if (outofdate) { /* * if bitmap is out of date, dirty the Loading Loading @@ -1965,9 +1969,7 @@ space_store(struct mddev *mddev, const char *buf, size_t len) return -EINVAL; if (mddev->bitmap && sectors < ((mddev->bitmap->storage.file_pages - 1) * PAGE_SIZE + mddev->bitmap->storage.last_page_size + 511) >> 9) sectors < (mddev->bitmap->storage.bytes + 511) >> 9) return -EFBIG; /* Bitmap is too big for this small space */ /* could make sure it isn't too big, but that isn't really Loading drivers/md/bitmap.h +1 −1 Original line number Diff line number Diff line Loading @@ -197,7 +197,7 @@ struct bitmap { unsigned long *filemap_attr; /* attributes associated * w/ filemap pages */ unsigned long file_pages; /* number of pages in the file*/ int last_page_size; /* bytes in the last page */ unsigned long bytes; /* total bytes in the bitmap */ } storage; unsigned long flags; Loading Loading
drivers/md/bitmap.c +9 −7 Original line number Diff line number Diff line Loading @@ -203,9 +203,13 @@ static int write_sb_page(struct bitmap *bitmap, struct page *page, int wait) bdev = (rdev->meta_bdev) ? rdev->meta_bdev : rdev->bdev; if (page->index == store->file_pages-1) size = roundup(store->last_page_size, if (page->index == store->file_pages-1) { int last_page_size = store->bytes & (PAGE_SIZE-1); if (last_page_size == 0) last_page_size = PAGE_SIZE; size = roundup(last_page_size, bdev_logical_block_size(bdev)); } /* Just make sure we aren't corrupting data or * metadata */ Loading Loading @@ -973,6 +977,8 @@ static int bitmap_init_from_disk(struct bitmap *bitmap, sector_t start) if (!bitmap->mddev->bitmap_info.external) bytes += sizeof(bitmap_super_t); store->bytes = bytes; num_pages = DIV_ROUND_UP(bytes, PAGE_SIZE); if (file && i_size_read(file->f_mapping->host) < bytes) { Loading Loading @@ -1042,8 +1048,6 @@ static int bitmap_init_from_disk(struct bitmap *bitmap, sector_t start) oldindex = index; store->last_page_size = count; if (outofdate) { /* * if bitmap is out of date, dirty the Loading Loading @@ -1965,9 +1969,7 @@ space_store(struct mddev *mddev, const char *buf, size_t len) return -EINVAL; if (mddev->bitmap && sectors < ((mddev->bitmap->storage.file_pages - 1) * PAGE_SIZE + mddev->bitmap->storage.last_page_size + 511) >> 9) sectors < (mddev->bitmap->storage.bytes + 511) >> 9) return -EFBIG; /* Bitmap is too big for this small space */ /* could make sure it isn't too big, but that isn't really Loading
drivers/md/bitmap.h +1 −1 Original line number Diff line number Diff line Loading @@ -197,7 +197,7 @@ struct bitmap { unsigned long *filemap_attr; /* attributes associated * w/ filemap pages */ unsigned long file_pages; /* number of pages in the file*/ int last_page_size; /* bytes in the last page */ unsigned long bytes; /* total bytes in the bitmap */ } storage; unsigned long flags; Loading