@@ -374,6 +374,45 @@ void *bch_nvm_alloc_pages(int order, const char *owner_uuid)
}
EXPORT_SYMBOL_GPL(bch_nvm_alloc_pages);
+struct bch_extent *bch_get_allocated_pages(const char *owner_uuid)
+{
+ struct bch_owner_list *owner_list = find_owner_list(owner_uuid, false);
+ struct bch_nvm_alloced_recs *alloced_recs;
+ struct bch_extent *head = NULL, *e, *tmp;
+ int i;
+
+ if (!owner_list)
+ return NULL;
+
+ for (i = 0; i < only_set->total_namespaces_nr; i++) {
+ struct list_head *l;
+
+ alloced_recs = owner_list->alloced_recs[i];
+
+ if (!alloced_recs || alloced_recs->nr == 0)
+ continue;
+
+ l = alloced_recs->extent_head.next;
+ while (l != &alloced_recs->extent_head) {
+ e = container_of(l, struct bch_extent, list);
+ tmp = kzalloc(sizeof(*tmp), GFP_KERNEL|__GFP_NOFAIL);
+
+ INIT_LIST_HEAD(&tmp->list);
+ tmp->kaddr = e->kaddr;
+ tmp->nr = e->nr;
+
+ if (head)
+ list_add_tail(&tmp->list, &head->list);
+ else
+ head = tmp;
+
+ l = l->next;
+ }
+ }
+ return head;
+}
+EXPORT_SYMBOL_GPL(bch_get_allocated_pages);
+
static int init_owner_info(struct bch_nvm_namespace *ns)
{
struct bch_owner_list_head *owner_list_head;
@@ -81,6 +81,7 @@ int bch_nvm_init(void);
void bch_nvm_exit(void);
void *bch_nvm_alloc_pages(int order, const char *owner_uuid);
void bch_nvm_free_pages(void *addr, int order, const char *owner_uuid);
+struct bch_extent *bch_get_allocated_pages(const char *owner_uuid);
#else
@@ -101,6 +102,11 @@ static inline void *bch_nvm_alloc_pages(int order, const char *owner_uuid)
static inline void bch_nvm_free_pages(void *addr, int order, const char *owner_uuid) { }
+static inline struct bch_extent *bch_get_allocated_pages(const char *owner_uuid)
+{
+ return NULL;
+}
+
#endif /* CONFIG_BCACHE_NVM_PAGES */
#endif /* _BCACHE_NVM_PAGES_H */