[Devel] [PATCH RHEL8 COMMIT] ploop: Underline clu and page is u32
Konstantin Khorenko
khorenko at virtuozzo.com
Fri Jul 2 22:43:34 MSK 2021
The commit is pushed to "branch-rh8-4.18.0-240.1.1.vz8.6.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh8-4.18.0-240.1.1.el8
------>
commit 28dc1487ef68c3e1dbbff4021f7c6e1887d6597c
Author: Kirill Tkhai <ktkhai at virtuozzo.com>
Date: Fri Jul 2 22:43:33 2021 +0300
ploop: Underline clu and page is u32
Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
==========================
Parallel async BAT pages submission and improvements
[1-15]:
https://jira.sw.ru/browse/PSBM-124550
[16-22]:
following improvements
Kirill Tkhai (22):
ploop: Remove absolet comment
ploop: Add md and piwb cross pointers
ploop: Add @md argument to locate_new_cluster_and_attach_pio()
ploop: Refactoring in process_one_discard_pio()
ploop: Pass type argument to ploop_prepare_bat_update()
ploop: Move md is busy check to delay_if_md_busy()
ploop: Introduce batch list for md pages writeback
ploop: Check for md dirty instead of md piwb
ploop: Reread piwb after ploop_prepare_bat_update()
ploop: Change argument in ploop_prepare_bat_update()
ploop: Return md from ploop_prepare_reloc_index_wb()
ploop: Change arguments and rename ploop_reset_bat_update()
ploop: Allow parallel wb of md pages
ploop: Async md writeback
ploop: Rename ploop_submit_index_wb_sync()
ploop: Resubmit pios from main kwork
ploop: Rename process_delta_wb()
ploop: Do fsync after bat page write
ploop: Do not iterate excess clusters in notify_delta_merged()
ploop: Use kvec in ploop_delta_check_header()
ploop: Add argument to ploop_read_delta_metadata()
ploop: Underline clu and page is u32
---
drivers/md/dm-ploop-bat.c | 28 +++++++++---------
drivers/md/dm-ploop-cmd.c | 37 +++++++++++-------------
drivers/md/dm-ploop-map.c | 65 +++++++++++++++++++-----------------------
drivers/md/dm-ploop.h | 72 ++++++++++++++++++++++-------------------------
4 files changed, 92 insertions(+), 110 deletions(-)
diff --git a/drivers/md/dm-ploop-bat.c b/drivers/md/dm-ploop-bat.c
index 53a51871b0b2..1ae863043f50 100644
--- a/drivers/md/dm-ploop-bat.c
+++ b/drivers/md/dm-ploop-bat.c
@@ -11,7 +11,7 @@
#include <linux/mm.h>
#include "dm-ploop.h"
-struct md_page * md_page_find(struct ploop *ploop, unsigned int id)
+struct md_page * md_page_find(struct ploop *ploop, u32 id)
{
struct rb_node *node;
struct md_page *md;
@@ -33,8 +33,8 @@ struct md_page * md_page_find(struct ploop *ploop, unsigned int id)
static void __md_page_insert(struct rb_root *root, struct md_page *new_md)
{
- unsigned int new_id = new_md->id;
struct rb_node *parent, **node;
+ u32 new_id = new_md->id;
struct md_page *md;
node = &root->rb_node;
@@ -60,7 +60,7 @@ void md_page_insert(struct ploop *ploop, struct md_page *new_md)
__md_page_insert(&ploop->bat_entries, new_md);
}
-static struct md_page * alloc_md_page(unsigned int id)
+static struct md_page * alloc_md_page(u32 id)
{
struct md_page *md;
struct page *page;
@@ -101,10 +101,10 @@ void ploop_free_md_page(struct md_page *md)
kfree(md);
}
-int prealloc_md_pages(struct rb_root *root, unsigned int nr_bat_entries,
- unsigned int new_nr_bat_entries)
+int prealloc_md_pages(struct rb_root *root, u32 nr_bat_entries,
+ u32 new_nr_bat_entries)
{
- unsigned int i, nr_pages, new_nr_pages;
+ u32 i, nr_pages, new_nr_pages;
struct md_page *md;
void *addr;
@@ -127,10 +127,9 @@ int prealloc_md_pages(struct rb_root *root, unsigned int nr_bat_entries,
return 0;
}
-bool try_update_bat_entry(struct ploop *ploop, unsigned int clu,
- u8 level, unsigned int dst_clu)
+bool try_update_bat_entry(struct ploop *ploop, u32 clu, u8 level, u32 dst_clu)
{
- unsigned int *bat_entries, id = bat_clu_to_page_nr(clu);
+ u32 *bat_entries, id = bat_clu_to_page_nr(clu);
struct md_page *md = md_page_find(ploop, id);
lockdep_assert_held(&ploop->bat_rwlock);
@@ -239,10 +238,9 @@ int ploop_read_bat(struct ploop *ploop, struct bio *bio, u8 nr_deltas)
#endif
/* Alloc holes_bitmap and set bits of free clusters */
-static int ploop_setup_holes_bitmap(struct ploop *ploop,
- unsigned int bat_clusters)
+static int ploop_setup_holes_bitmap(struct ploop *ploop, u32 bat_clusters)
{
- unsigned int i, size;
+ u32 i, size;
/*
* + number of data clusters.
@@ -269,8 +267,8 @@ static int ploop_setup_holes_bitmap(struct ploop *ploop,
int ploop_setup_metadata(struct ploop *ploop, struct page *page)
{
- unsigned int bat_clusters, offset_clusters;
struct ploop_pvd_header *m_hdr = NULL;
+ u32 bat_clusters, offset_clusters;
unsigned long size;
int ret;
@@ -318,7 +316,7 @@ static int ploop_delta_check_header(struct ploop *ploop,
struct ploop_pvd_header *d_hdr,
u32 *delta_nr_be_ret)
{
- unsigned int bytes, delta_nr_be, offset_clusters, bat_clusters;
+ u32 bytes, delta_nr_be, offset_clusters, bat_clusters;
int ret = -EPROTO;
if (memcmp(d_hdr->m_Sig, ploop->m_Sig, sizeof(d_hdr->m_Sig)) ||
@@ -420,7 +418,7 @@ static void apply_delta_mappings(struct ploop *ploop, struct ploop_delta *deltas
{
map_index_t *bat_entries, *delta_bat_entries;
bool is_top_level, is_raw, stop = false;
- unsigned int i, end, dst_clu, clu;
+ u32 i, end, dst_clu, clu;
struct rb_node *node;
struct md_page *md;
diff --git a/drivers/md/dm-ploop-cmd.c b/drivers/md/dm-ploop-cmd.c
index d1ed50ed4772..5104bdff10f8 100644
--- a/drivers/md/dm-ploop-cmd.c
+++ b/drivers/md/dm-ploop-cmd.c
@@ -22,7 +22,7 @@
static void ploop_advance_holes_bitmap(struct ploop *ploop,
struct ploop_cmd *cmd)
{
- unsigned int i, end, size, dst_clu, *bat_entries;
+ u32 i, end, size, dst_clu, *bat_entries;
struct rb_node *node;
struct md_page *md;
@@ -143,11 +143,9 @@ static void ploop_resume_submitting_pios(struct ploop *ploop)
}
/* Find existing BAT clu pointing to dst_clu */
-static unsigned int ploop_find_bat_entry(struct ploop *ploop,
- unsigned int dst_clu,
- bool *is_locked)
+static u32 ploop_find_bat_entry(struct ploop *ploop, u32 dst_clu, bool *is_locked)
{
- unsigned int i, end, *bat_entries, clu = UINT_MAX;
+ u32 i, end, *bat_entries, clu = U32_MAX;
struct rb_node *node;
struct md_page *md;
@@ -179,8 +177,7 @@ static unsigned int ploop_find_bat_entry(struct ploop *ploop,
return clu;
}
-void pio_prepare_offsets(struct ploop *ploop, struct pio *pio,
- unsigned int clu)
+void pio_prepare_offsets(struct ploop *ploop, struct pio *pio, u32 clu)
{
int i, nr_pages = nr_pages_in_cluster(ploop);
@@ -204,7 +201,7 @@ static void wake_completion(struct pio *pio, void *data, blk_status_t status)
}
static int ploop_read_cluster_sync(struct ploop *ploop, struct pio *pio,
- unsigned int dst_clu)
+ u32 dst_clu)
{
DECLARE_COMPLETION(completion);
@@ -224,7 +221,7 @@ static int ploop_read_cluster_sync(struct ploop *ploop, struct pio *pio,
}
static int ploop_write_cluster_sync(struct ploop *ploop, struct pio *pio,
- unsigned int dst_clu)
+ u32 dst_clu)
{
struct file *file = top_delta(ploop)->file;
DECLARE_COMPLETION(completion);
@@ -251,8 +248,7 @@ static int ploop_write_cluster_sync(struct ploop *ploop, struct pio *pio,
}
static int ploop_write_zero_cluster_sync(struct ploop *ploop,
- struct pio *pio,
- unsigned int clu)
+ struct pio *pio, u32 clu)
{
void *data;
int i;
@@ -276,9 +272,9 @@ static void ploop_make_md_wb(struct ploop *ploop, struct md_page *md)
static int ploop_grow_relocate_cluster(struct ploop *ploop,
struct ploop_cmd *cmd)
{
- unsigned int new_dst, clu, dst_clu;
struct pio *pio = cmd->resize.pio;
struct ploop_index_wb *piwb;
+ u32 new_dst, clu, dst_clu;
struct completion comp;
struct md_page *md;
bool is_locked;
@@ -414,7 +410,7 @@ static void ploop_add_md_pages(struct ploop *ploop, struct rb_root *from)
*/
static int process_resize_cmd(struct ploop *ploop, struct ploop_cmd *cmd)
{
- unsigned int dst_clu;
+ u32 dst_clu;
int ret = 0;
/* Update memory arrays and hb_nr, but do not update nr_bat_entries. */
@@ -502,8 +498,8 @@ void free_pio_with_pages(struct ploop *ploop, struct pio *pio)
/* TODO: we may delegate this to userspace */
static int ploop_resize(struct ploop *ploop, sector_t new_sectors)
{
- unsigned int nr_bat_entries, nr_old_bat_clusters, nr_bat_clusters;
struct ploop_cmd cmd = { .resize.md_pages_root = RB_ROOT };
+ u32 nr_bat_entries, nr_old_bat_clusters, nr_bat_clusters;
unsigned int hb_nr, size, old_size;
struct ploop_pvd_header *hdr;
sector_t old_sectors;
@@ -687,7 +683,7 @@ static int ploop_merge_latest_snapshot(struct ploop *ploop)
static void notify_delta_merged(struct ploop *ploop, u8 level, void *hdr,
bool forward, u32 size_in_clus)
{
- unsigned int i, end, *bat_entries, *delta_bat_entries;
+ u32 i, end, *bat_entries, *delta_bat_entries;
struct rb_node *node;
struct md_page *md;
struct file *file;
@@ -748,7 +744,7 @@ static void notify_delta_merged(struct ploop *ploop, u8 level, void *hdr,
static int process_update_delta_index(struct ploop *ploop, u8 level,
const char *map)
{
- unsigned int clu, dst_clu, n;
+ u32 clu, dst_clu, n;
int ret;
write_lock_irq(&ploop->bat_rwlock);
@@ -890,11 +886,12 @@ static int ploop_update_delta_index(struct ploop *ploop, unsigned int level,
static int process_flip_upper_deltas(struct ploop *ploop)
{
- unsigned int i, size, end, bat_clusters, hb_nr, *bat_entries;
+ u32 i, end, bat_clusters, hb_nr, *bat_entries;
void *holes_bitmap = ploop->holes_bitmap;
u8 level = top_level(ploop) - 1;
struct rb_node *node;
struct md_page *md;
+ u64 size;
size = (PLOOP_MAP_OFFSET + ploop->nr_bat_entries) * sizeof(map_index_t);
bat_clusters = DIV_ROUND_UP(size, CLU_SIZE(ploop));
@@ -934,7 +931,7 @@ static int process_flip_upper_deltas(struct ploop *ploop)
static int process_tracking_start(struct ploop *ploop, void *tracking_bitmap,
u32 tb_nr)
{
- unsigned int i, nr_pages, end, *bat_entries, dst_clu, nr;
+ u32 i, nr_pages, end, *bat_entries, dst_clu, nr;
struct rb_node *node;
struct md_page *md;
int ret = 0;
@@ -1001,9 +998,9 @@ static int tracking_get_next(struct ploop *ploop, char *result,
return ret;
}
-static unsigned int max_dst_clu_in_top_delta(struct ploop *ploop)
+static u32 max_dst_clu_in_top_delta(struct ploop *ploop)
{
- unsigned int i, nr_pages, nr = 0, end, *bat_entries, dst_clu = 0;
+ u32 i, nr_pages, nr = 0, end, *bat_entries, dst_clu = 0;
struct rb_node *node;
struct md_page *md;
diff --git a/drivers/md/dm-ploop-map.c b/drivers/md/dm-ploop-map.c
index 6bd7bd087f4a..15427a5f4154 100644
--- a/drivers/md/dm-ploop-map.c
+++ b/drivers/md/dm-ploop-map.c
@@ -81,8 +81,8 @@ void init_pio(struct ploop *ploop, unsigned int bi_op, struct pio *pio)
static int ploop_pio_valid(struct ploop *ploop, struct pio *pio)
{
sector_t sector = pio->bi_iter.bi_sector;
- unsigned int end_clu;
loff_t end_byte;
+ u32 end_clu;
end_byte = to_bytes(sector) + pio->bi_iter.bi_size - 1;
end_clu = POS_TO_CLU(ploop, end_byte);
@@ -298,7 +298,7 @@ void track_dst_cluster(struct ploop *ploop, u32 dst_clu)
*/
void __track_pio(struct ploop *ploop, struct pio *pio)
{
- unsigned int dst_clu = SEC_TO_CLU(ploop, pio->bi_iter.bi_sector);
+ u32 dst_clu = SEC_TO_CLU(ploop, pio->bi_iter.bi_sector);
if (!op_is_write(pio->bi_op) || !bvec_iter_sectors((pio)->bi_iter))
return;
@@ -347,13 +347,13 @@ struct pio *find_pio(struct hlist_head head[], u32 clu)
return NULL;
}
-static struct pio *find_inflight_bio(struct ploop *ploop, unsigned int clu)
+static struct pio *find_inflight_bio(struct ploop *ploop, u32 clu)
{
lockdep_assert_held(&ploop->inflight_lock);
return find_pio(ploop->inflight_pios, clu);
}
-struct pio *find_lk_of_cluster(struct ploop *ploop, unsigned int clu)
+struct pio *find_lk_of_cluster(struct ploop *ploop, u32 clu)
{
lockdep_assert_held(&ploop->deferred_lock);
return find_pio(ploop->exclusive_pios, clu);
@@ -440,8 +440,7 @@ static void del_cluster_lk(struct ploop *ploop, struct pio *pio)
dispatch_pios(ploop, NULL, &pio_list);
}
-static void link_submitting_pio(struct ploop *ploop, struct pio *pio,
- unsigned int clu)
+static void link_submitting_pio(struct ploop *ploop, struct pio *pio, u32 clu)
{
unsigned long flags;
@@ -521,7 +520,7 @@ static int punch_hole(struct file *file, loff_t pos, loff_t len)
}
static void handle_discard_pio(struct ploop *ploop, struct pio *pio,
- unsigned int clu, unsigned int dst_clu)
+ u32 clu, u32 dst_clu)
{
struct pio *inflight_h;
unsigned long flags;
@@ -598,9 +597,9 @@ static void queue_or_fail(struct ploop *ploop, int err, void *data)
static void complete_cow(struct ploop_cow *cow, blk_status_t bi_status)
{
- unsigned int dst_clu = cow->dst_clu;
struct pio *aux_pio = cow->aux_pio;
struct ploop *ploop = cow->ploop;
+ u32 dst_clu = cow->dst_clu;
unsigned long flags;
struct pio *cow_pio;
@@ -622,10 +621,9 @@ static void complete_cow(struct ploop_cow *cow, blk_status_t bi_status)
kmem_cache_free(cow_cache, cow);
}
-static void ploop_release_cluster(struct ploop *ploop,
- unsigned int clu)
+static void ploop_release_cluster(struct ploop *ploop, u32 clu)
{
- unsigned int id, *bat_entries, dst_clu;
+ u32 id, *bat_entries, dst_clu;
struct md_page *md;
lockdep_assert_held(&ploop->bat_rwlock);
@@ -646,7 +644,7 @@ static void ploop_release_cluster(struct ploop *ploop,
}
static void piwb_discard_completed(struct ploop *ploop, bool success,
- unsigned int clu, unsigned int new_dst_clu)
+ u32 clu, u32 new_dst_clu)
{
if (new_dst_clu)
return;
@@ -668,8 +666,8 @@ static void ploop_advance_local_after_bat_wb(struct ploop *ploop,
struct ploop_index_wb *piwb,
bool success)
{
- unsigned int i, last, *bat_entries;
struct md_page *md = piwb->md;
+ u32 i, last, *bat_entries;
map_index_t *dst_clu, off;
unsigned long flags;
LIST_HEAD(list);
@@ -802,7 +800,7 @@ static void ploop_bat_write_complete(struct ploop_index_wb *piwb,
static int ploop_prepare_bat_update(struct ploop *ploop, struct md_page *md,
enum piwb_type type)
{
- unsigned int i, off, last, *bat_entries;
+ u32 i, off, last, *bat_entries;
struct ploop_index_wb *piwb;
bool is_last_page = true;
u32 page_id = md->id;
@@ -883,7 +881,7 @@ void ploop_break_bat_update(struct ploop *ploop, struct md_page *md)
static void ploop_bat_page_zero_cluster(struct ploop *ploop,
struct ploop_index_wb *piwb,
- unsigned int clu)
+ u32 clu)
{
map_index_t *to;
@@ -896,9 +894,9 @@ static void ploop_bat_page_zero_cluster(struct ploop *ploop,
}
static int find_dst_clu_bit(struct ploop *ploop,
- unsigned int *ret_dst_clu)
+ u32 *ret_dst_clu)
{
- unsigned int dst_clu;
+ u32 dst_clu;
/* Find empty clu */
dst_clu = find_first_bit(ploop->holes_bitmap, ploop->hb_nr);
@@ -935,7 +933,7 @@ static int truncate_prealloc_safe(struct ploop_delta *delta, loff_t len, const c
return 0;
}
-static int allocate_cluster(struct ploop *ploop, unsigned int *dst_clu)
+static int allocate_cluster(struct ploop *ploop, u32 *dst_clu)
{
struct ploop_delta *top = top_delta(ploop);
u32 clu_size = CLU_SIZE(ploop);
@@ -991,7 +989,7 @@ static int allocate_cluster(struct ploop *ploop, unsigned int *dst_clu)
* in ploop->holes_bitmap and bat_page.
*/
static int ploop_alloc_cluster(struct ploop *ploop, struct ploop_index_wb *piwb,
- unsigned int clu, unsigned int *dst_clu)
+ u32 clu, u32 *dst_clu)
{
struct page *page = piwb->bat_page;
bool already_alloced = false;
@@ -1176,7 +1174,7 @@ void map_and_submit_rw(struct ploop *ploop, u32 dst_clu, struct pio *pio, u8 lev
}
static void initiate_delta_read(struct ploop *ploop, unsigned int level,
- unsigned int dst_clu, struct pio *pio)
+ u32 dst_clu, struct pio *pio)
{
if (dst_clu == BAT_ENTRY_NONE) {
/* No one delta contains dst_clu. */
@@ -1197,8 +1195,7 @@ static void ploop_cow_endio(struct pio *aux_pio, void *data, blk_status_t bi_sta
dispatch_pios(ploop, aux_pio, NULL);
}
-static bool postpone_if_cluster_locked(struct ploop *ploop, struct pio *pio,
- unsigned int clu)
+static bool postpone_if_cluster_locked(struct ploop *ploop, struct pio *pio, u32 clu)
{
struct pio *e_h; /* Exclusively locked */
@@ -1212,8 +1209,7 @@ static bool postpone_if_cluster_locked(struct ploop *ploop, struct pio *pio,
}
static int submit_cluster_cow(struct ploop *ploop, unsigned int level,
- unsigned int clu, unsigned int dst_clu,
- struct pio *cow_pio)
+ u32 clu, u32 dst_clu, struct pio *cow_pio)
{
struct ploop_cow *cow = NULL;
struct pio *aux_pio = NULL;
@@ -1246,7 +1242,7 @@ static int submit_cluster_cow(struct ploop *ploop, unsigned int level,
}
static void initiate_cluster_cow(struct ploop *ploop, unsigned int level,
- unsigned int clu, unsigned int dst_clu, struct pio *pio)
+ u32 clu, u32 dst_clu, struct pio *pio)
{
if (!submit_cluster_cow(ploop, level, clu, dst_clu, pio))
return;
@@ -1259,7 +1255,7 @@ static void submit_cluster_write(struct ploop_cow *cow)
{
struct pio *aux_pio = cow->aux_pio;
struct ploop *ploop = cow->ploop;
- unsigned int dst_clu;
+ u32 dst_clu;
if (allocate_cluster(ploop, &dst_clu) < 0)
goto error;
@@ -1281,10 +1277,9 @@ static void submit_cluster_write(struct ploop_cow *cow)
static void submit_cow_index_wb(struct ploop_cow *cow)
{
struct pio *cow_pio = cow->cow_pio;
- unsigned int clu = cow_pio->clu;
struct ploop *ploop = cow->ploop;
+ u32 page_id, clu = cow_pio->clu;
struct ploop_index_wb *piwb;
- unsigned int page_id;
struct md_page *md;
map_index_t *to;
@@ -1369,14 +1364,13 @@ static void process_delta_cow(struct ploop *ploop, struct list_head *cow_list)
*/
static bool locate_new_cluster_and_attach_pio(struct ploop *ploop,
struct md_page *md,
- unsigned int clu,
- unsigned int *dst_clu,
+ u32 clu, u32 *dst_clu,
struct pio *pio)
{
bool bat_update_prepared = false;
struct ploop_index_wb *piwb;
bool attached = false;
- unsigned int page_id;
+ u32 page_id;
WARN_ON_ONCE(pio->queue_list_id != PLOOP_LIST_DEFERRED);
if (delay_if_md_busy(ploop, md, PIWB_TYPE_ALLOC, pio))
@@ -1417,8 +1411,8 @@ static bool locate_new_cluster_and_attach_pio(struct ploop *ploop,
static int process_one_deferred_bio(struct ploop *ploop, struct pio *pio)
{
sector_t sector = pio->bi_iter.bi_sector;
- unsigned int clu, dst_clu;
struct md_page *md;
+ u32 clu, dst_clu;
u8 level;
bool ret;
@@ -1540,8 +1534,8 @@ static void process_deferred_pios(struct ploop *ploop, struct list_head *pios)
static void process_one_discard_pio(struct ploop *ploop, struct pio *pio)
{
- unsigned int page_id, clu = pio->clu;
bool bat_update_prepared = false;
+ u32 page_id, clu = pio->clu;
struct ploop_index_wb *piwb;
struct md_page *md;
map_index_t *to;
@@ -1841,11 +1835,10 @@ static void handle_cleanup(struct ploop *ploop, struct pio *pio)
*/
int ploop_prepare_reloc_index_wb(struct ploop *ploop,
struct md_page **ret_md,
- unsigned int clu,
- unsigned int *dst_clu)
+ u32 clu, u32 *dst_clu)
{
- unsigned int page_id = bat_clu_to_page_nr(clu);
enum piwb_type type = PIWB_TYPE_ALLOC;
+ u32 page_id = bat_clu_to_page_nr(clu);
struct md_page *md = md_page_find(ploop, page_id);
struct ploop_index_wb *piwb;
diff --git a/drivers/md/dm-ploop.h b/drivers/md/dm-ploop.h
index 8bb075b72e3f..50663d8aa219 100644
--- a/drivers/md/dm-ploop.h
+++ b/drivers/md/dm-ploop.h
@@ -69,9 +69,9 @@ struct ploop_cmd {
};
};
-#define PAGE_NR_NONE UINT_MAX
+#define PAGE_NR_NONE U32_MAX
/* We can't use 0 for unmapped clusters, since RAW image references 0 clu */
-#define BAT_ENTRY_NONE UINT_MAX
+#define BAT_ENTRY_NONE U32_MAX
#define PLOOP_INFLIGHT_TIMEOUT (60 * HZ)
#define PLOOP_ENOSPC_TIMEOUT (20 * HZ)
@@ -104,13 +104,13 @@ struct ploop_index_wb {
atomic_t count;
bool completed;
int bi_status;
- unsigned int page_id;
+ u32 page_id;
};
/* Metadata page */
struct md_page {
struct rb_node node;
- unsigned int id; /* Number of this page starting from hdr */
+ u32 id; /* Number of this page starting from hdr */
#define MD_DIRTY (1U << 1) /* Page contains changes and wants writeback */
#define MD_WRITEBACK (1U << 2) /* Writeback was submitted */
unsigned int status;
@@ -137,7 +137,7 @@ struct ploop {
struct rb_root bat_entries;
struct ploop_delta *deltas;
u8 nr_deltas;
- unsigned int nr_bat_entries;
+ u32 nr_bat_entries;
unsigned int cluster_log; /* In sectors */
u8 m_Sig[16]; /* Signature */
@@ -149,7 +149,7 @@ struct ploop {
* are also included, and their bits must be zeroed.
*/
void *holes_bitmap; /* Clearing a bit occurs from kwork only */
- unsigned int hb_nr; /* holes_bitmap size in bits */
+ u32 hb_nr; /* holes_bitmap size in bits */
rwlock_t bat_rwlock;
struct list_head wb_batch_list;
@@ -244,7 +244,7 @@ struct pio {
ploop_endio_t endio_cb;
void *endio_cb_data;
- unsigned int clu;
+ u32 clu;
u8 level;
bool is_data_alloc:1;
@@ -273,7 +273,7 @@ struct pio {
struct ploop_cow {
struct ploop *ploop;
struct pio *aux_pio;
- unsigned int dst_clu;
+ u32 dst_clu;
struct pio *cow_pio;
};
@@ -293,8 +293,7 @@ static inline bool ploop_is_ro(struct ploop *ploop)
return (dm_table_get_mode(ploop->ti->table) & FMODE_WRITE) == 0;
}
-static inline void remap_to_cluster(struct ploop *ploop, struct pio *pio,
- unsigned int clu)
+static inline void remap_to_cluster(struct ploop *ploop, struct pio *pio, u32 clu)
{
pio->bi_iter.bi_sector &= ((1 << ploop->cluster_log) - 1);
pio->bi_iter.bi_sector |= (clu << ploop->cluster_log);
@@ -344,7 +343,7 @@ static inline void ploop_hole_set_bit(unsigned long nr, struct ploop *ploop)
set_bit(nr, ploop->holes_bitmap);
}
-static inline void ploop_hole_clear_bit(unsigned int nr, struct ploop *ploop)
+static inline void ploop_hole_clear_bit(u32 nr, struct ploop *ploop)
{
if (!WARN_ON_ONCE(nr >= ploop->hb_nr))
clear_bit(nr, ploop->holes_bitmap);
@@ -357,7 +356,7 @@ static inline unsigned int nr_pages_in_cluster(struct ploop *ploop)
/* Get number of clusters, occupied by hdr and BAT */
static inline unsigned int ploop_nr_bat_clusters(struct ploop *ploop,
- unsigned int nr_bat_entries)
+ u32 nr_bat_entries)
{
unsigned long size, bat_clusters;
@@ -367,40 +366,37 @@ static inline unsigned int ploop_nr_bat_clusters(struct ploop *ploop,
return bat_clusters;
}
-static inline unsigned int bat_clu_to_page_nr(unsigned int clu)
+static inline u32 bat_clu_to_page_nr(u32 clu)
{
- unsigned int byte;
+ u64 byte;
byte = (clu + PLOOP_MAP_OFFSET) * sizeof(map_index_t);
return byte >> PAGE_SHIFT;
}
-static inline unsigned int bat_clu_idx_in_page(unsigned int clu)
+static inline u32 bat_clu_idx_in_page(u32 clu)
{
return (clu + PLOOP_MAP_OFFSET) % (PAGE_SIZE / sizeof(map_index_t));
}
-static inline unsigned int page_clu_idx_to_bat_clu(unsigned int page_id,
- unsigned int cluster_rel)
+static inline u32 page_clu_idx_to_bat_clu(u32 page_id, u32 cluster_rel)
{
unsigned int off;
- off = page_id * PAGE_SIZE / sizeof(map_index_t) - PLOOP_MAP_OFFSET;
+ off = (u64)page_id * PAGE_SIZE / sizeof(map_index_t) - PLOOP_MAP_OFFSET;
return off + cluster_rel;
}
-extern struct md_page * md_page_find(struct ploop *ploop, unsigned int id);
+extern struct md_page * md_page_find(struct ploop *ploop, u32 id);
/*
* This should be called in very rare cases. Avoid this function
* in cycles by clu, use ploop_for_each_md_page()-based
* iterations instead.
*/
-static inline unsigned int ploop_bat_entries(struct ploop *ploop,
- unsigned int clu,
- u8 *bat_level,
- struct md_page **md_ret)
+static inline u32 ploop_bat_entries(struct ploop *ploop, u32 clu,
+ u8 *bat_level, struct md_page **md_ret)
{
- unsigned int *bat_entries, dst_clu, id;
+ u32 *bat_entries, dst_clu, id;
struct md_page *md;
id = bat_clu_to_page_nr(clu);
@@ -421,10 +417,9 @@ static inline unsigned int ploop_bat_entries(struct ploop *ploop,
return dst_clu;
}
-static inline bool cluster_is_in_top_delta(struct ploop *ploop,
- unsigned int clu)
+static inline bool cluster_is_in_top_delta(struct ploop *ploop, u32 clu)
{
- unsigned int dst_clu;
+ u32 dst_clu;
u8 level;
if (WARN_ON(clu >= ploop->nr_bat_entries))
@@ -437,9 +432,9 @@ static inline bool cluster_is_in_top_delta(struct ploop *ploop,
}
static inline bool md_page_cluster_is_in_top_delta(struct ploop *ploop,
- struct md_page *md, unsigned int clu)
+ struct md_page *md, u32 clu)
{
- unsigned int count, *bat_entries;
+ u32 count, *bat_entries;
bool ret = true;
count = PAGE_SIZE / sizeof(map_index_t);
@@ -457,10 +452,10 @@ static inline bool md_page_cluster_is_in_top_delta(struct ploop *ploop,
return ret;
}
-static inline void init_bat_entries_iter(struct ploop *ploop, unsigned int page_id,
- unsigned int *start, unsigned int *end)
+static inline void init_bat_entries_iter(struct ploop *ploop, u32 page_id,
+ u32 *start, u32 *end)
{
- unsigned int last_page = bat_clu_to_page_nr(ploop->nr_bat_entries - 1);
+ u32 last_page = bat_clu_to_page_nr(ploop->nr_bat_entries - 1);
unsigned int count = PAGE_SIZE / sizeof(map_index_t);
*start = 0;
@@ -483,8 +478,8 @@ static inline void track_pio(struct ploop *ploop, struct pio *pio)
extern struct pio *find_pio(struct hlist_head head[], u32 clu);
-extern int prealloc_md_pages(struct rb_root *root, unsigned int nr_bat_entries,
- unsigned int new_nr_bat_entries);
+extern int prealloc_md_pages(struct rb_root *root, u32 nr_bat_entries,
+ u32 new_nr_bat_entries);
static inline struct pio *bio_to_endio_hook(struct bio *bio)
{
@@ -521,8 +516,8 @@ static inline bool fake_merge_pio(struct pio *pio)
extern void md_page_insert(struct ploop *ploop, struct md_page *md);
extern void ploop_free_md_page(struct md_page *md);
extern void free_md_pages_tree(struct rb_root *root);
-extern bool try_update_bat_entry(struct ploop *ploop, unsigned int clu,
- u8 level, unsigned int dst_clu);
+extern bool try_update_bat_entry(struct ploop *ploop, u32 clu,
+ u8 level, u32 dst_clu);
extern int convert_bat_entries(u32 *bat_entries, u32 count);
extern int ploop_add_delta(struct ploop *ploop, u32 level, struct file *file, bool is_raw);
@@ -539,8 +534,7 @@ extern int ploop_rw_page_sync(unsigned rw, struct file *file,
u64 index, struct page *page);
extern void map_and_submit_rw(struct ploop *ploop, u32 dst_clu, struct pio *pio, u8 level);
-extern int ploop_prepare_reloc_index_wb(struct ploop *, struct md_page **,
- unsigned int, unsigned int *);
+extern int ploop_prepare_reloc_index_wb(struct ploop *, struct md_page **, u32, u32 *);
extern void ploop_break_bat_update(struct ploop *ploop, struct md_page *);
extern void ploop_index_wb_submit(struct ploop *, struct ploop_index_wb *);
extern int ploop_message(struct dm_target *ti, unsigned int argc, char **argv,
@@ -548,7 +542,7 @@ extern int ploop_message(struct dm_target *ti, unsigned int argc, char **argv,
extern struct pio * alloc_pio_with_pages(struct ploop *ploop);
extern void free_pio_with_pages(struct ploop *ploop, struct pio *pio);
-extern void pio_prepare_offsets(struct ploop *, struct pio *, unsigned int);
+extern void pio_prepare_offsets(struct ploop *, struct pio *, u32);
extern int ploop_setup_metadata(struct ploop *ploop, struct page *page);
extern int ploop_read_delta_metadata(struct ploop *ploop, struct file *file,
More information about the Devel
mailing list