diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index d44eea25c0d65b65f8a9f98b63d7ffcb5a4fd795..dfd9a8c945e1d285176b6d366854d8870f2b3afd 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h @@ -696,7 +696,7 @@ struct small_page_pool { struct dhugetlb_pool { int nid; spinlock_t lock; - spinlock_t reserved_lock; + struct mutex reserved_lock; atomic_t refcnt; struct mem_cgroup *attach_memcg; diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 9f974270c84d167124e62b60750eab7d2758c4d9..a468d94bc16ae83c713b0fbc1453afa8e932764d 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -3327,7 +3327,7 @@ struct dhugetlb_pool *hpool_alloc(unsigned long nid) return NULL; spin_lock_init(&hpool->lock); - spin_lock_init(&hpool->reserved_lock); + mutex_init(&hpool->reserved_lock); hpool->nid = nid; atomic_set(&hpool->refcnt, 1); INIT_LIST_HEAD(&hpool->dhugetlb_1G_freelists); diff --git a/mm/memcontrol.c b/mm/memcontrol.c index fd40fef49e45ae4d2ed1fe4081f3a2acc2b7086d..886d6b0a4fceedc1cb3887769bc9bd44c38abb37 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -4950,9 +4950,9 @@ static int update_reserve_pages(struct kernfs_open_file *of, hpool = get_dhugetlb_pool_from_memcg(memcg); if (!hpool) return -EINVAL; - spin_lock(&hpool->reserved_lock); + mutex_lock(&hpool->reserved_lock); dhugetlb_reserve_hugepages(hpool, size, gigantic); - spin_unlock(&hpool->reserved_lock); + mutex_unlock(&hpool->reserved_lock); dhugetlb_pool_put(hpool); return 0; }