resv_map
struct resv_map *resv_map;
resv_map = (struct resv_map *)(&inode->i_data)->i_private_data;
if (resv_map)
resv_map_release(&resv_map->refs);
struct resv_map *resv_map = NULL;
resv_map = resv_map_alloc();
if (!resv_map)
inode->i_mapping->i_private_data = resv_map;
if (resv_map)
kref_put(&resv_map->refs, resv_map_release);
extern struct resv_map *resv_map_alloc(void);
struct resv_map *resv_map)
if (resv_map->css)
css_get(resv_map->css);
struct resv_map *resv_map)
if (resv_map->css)
css_put(resv_map->css);
extern void hugetlb_cgroup_uncharge_counter(struct resv_map *resv,
extern void hugetlb_cgroup_uncharge_file_region(struct resv_map *resv,
static inline void hugetlb_cgroup_uncharge_file_region(struct resv_map *resv,
struct resv_map *resv_map)
struct resv_map *resv_map)
struct resv_map;
static inline void hugetlb_cgroup_uncharge_counter(struct resv_map *resv,
resv_map_set_hugetlb_cgroup_uncharge_info(struct resv_map *resv_map,
resv_map->reservation_counter = NULL;
resv_map->pages_per_hpage = 0;
resv_map->css = NULL;
resv_map->reservation_counter =
resv_map->pages_per_hpage = pages_per_huge_page(h);
resv_map->css = &h_cg->css;
struct resv_map *resv_map_alloc(void)
struct resv_map *resv_map = kmalloc_obj(*resv_map);
if (!resv_map || !rg) {
kfree(resv_map);
kref_init(&resv_map->refs);
spin_lock_init(&resv_map->lock);
INIT_LIST_HEAD(&resv_map->regions);
init_rwsem(&resv_map->rw_sema);
resv_map->adds_in_progress = 0;
resv_map_set_hugetlb_cgroup_uncharge_info(resv_map, NULL, NULL);
INIT_LIST_HEAD(&resv_map->region_cache);
list_add(&rg->link, &resv_map->region_cache);
resv_map->region_cache_count = 1;
return resv_map;
struct resv_map *resv_map = container_of(ref, struct resv_map, refs);
struct list_head *head = &resv_map->region_cache;
region_del(resv_map, 0, LONG_MAX);
VM_BUG_ON(resv_map->adds_in_progress);
kfree(resv_map);
static inline struct resv_map *inode_resv_map(struct inode *inode)
return (struct resv_map *)(&inode->i_data)->i_private_data;
static struct resv_map *vma_resv_map(struct vm_area_struct *vma)
return (struct resv_map *)(get_vma_private_data(vma) &
static void set_vma_desc_resv_map(struct vm_area_desc *desc, struct resv_map *map)
static struct resv_map *vma_resv_map(struct vm_area_struct *vma);
struct resv_map *reservations = vma_resv_map(vma);
struct resv_map *resv;
struct resv_map *resv_map = vma_resv_map(vma);
down_read(&resv_map->rw_sema);
struct resv_map *resv_map = vma_resv_map(vma);
up_read(&resv_map->rw_sema);
struct resv_map *resv_map = vma_resv_map(vma);
down_write(&resv_map->rw_sema);
struct resv_map *resv_map = vma_resv_map(vma);
up_write(&resv_map->rw_sema);
struct resv_map *resv_map = vma_resv_map(vma);
return down_write_trylock(&resv_map->rw_sema);
struct resv_map *resv_map = vma_resv_map(vma);
lockdep_assert_held(&resv_map->rw_sema);
struct resv_map *resv_map = vma_resv_map(vma);
up_write(&resv_map->rw_sema);
get_file_region_entry_from_cache(struct resv_map *resv, long from, long to)
struct resv_map *resv = vma_resv_map(vma);
struct resv_map *resv;
struct resv_map *resv,
static void coalesce_file_region(struct resv_map *resv, struct file_region *rg)
hugetlb_resv_map_add(struct resv_map *map, struct list_head *rg, long from,
static long add_reservation_in_range(struct resv_map *resv, long f, long t,
struct resv_map *resv_map;
static int allocate_file_region_entries(struct resv_map *resv,
resv_map = inode_resv_map(inode);
chg = region_chg(resv_map, from, to, ®ions_needed);
resv_map = resv_map_alloc();
if (!resv_map) {
set_vma_desc_resv_map(desc, resv_map);
resv_map_set_hugetlb_cgroup_uncharge_info(resv_map, h_cg, h);
add = region_add(resv_map, from, to, regions_needed, h, h_cg);
region_abort(resv_map, from, to, regions_needed);
kref_put(&resv_map->refs, resv_map_release);
struct resv_map *resv_map = inode_resv_map(inode);
if (resv_map) {
chg = region_del(resv_map, start, end);
static long region_add(struct resv_map *resv, long f, long t,
static long region_chg(struct resv_map *resv, long f, long t,
static void region_abort(struct resv_map *resv, long f, long t,
static long region_del(struct resv_map *resv, long f, long t)
static long region_count(struct resv_map *resv, long f, long t)
void hugetlb_cgroup_uncharge_counter(struct resv_map *resv, unsigned long start,
void hugetlb_cgroup_uncharge_file_region(struct resv_map *resv,