You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'akpm' (patches from Andrew)
Merge second patchbomb from Andrew Morton: - most of the rest of MM - lots of misc things - procfs updates - printk feature work - updates to get_maintainer, MAINTAINERS, checkpatch - lib/ updates * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (96 commits) exit,stats: /* obey this comment */ coredump: add __printf attribute to cn_*printf functions coredump: use from_kuid/kgid when formatting corename fs/reiserfs: remove unneeded cast NILFS2: support NFSv2 export fs/befs/btree.c: remove unneeded initializations fs/minix: remove unneeded cast init/do_mounts.c: add create_dev() failure log kasan: remove duplicate definition of the macro KASAN_FREE_PAGE fs/efs: femove unneeded cast checkpatch: emit "NOTE: <types>" message only once after multiple files checkpatch: emit an error when there's a diff in a changelog checkpatch: validate MODULE_LICENSE content checkpatch: add multi-line handling for PREFER_ETHER_ADDR_COPY checkpatch: suggest using eth_zero_addr() and eth_broadcast_addr() checkpatch: fix processing of MEMSET issues checkpatch: suggest using ether_addr_equal*() checkpatch: avoid NOT_UNIFIED_DIFF errors on cover-letter.patch files checkpatch: remove local from codespell path checkpatch: add --showfile to allow input via pipe to show filenames ...
This commit is contained in:
@@ -975,7 +975,6 @@ static void update_and_free_page(struct hstate *h, struct page *page)
|
||||
destroy_compound_gigantic_page(page, huge_page_order(h));
|
||||
free_gigantic_page(page, huge_page_order(h));
|
||||
} else {
|
||||
arch_release_hugepage(page);
|
||||
__free_pages(page, huge_page_order(h));
|
||||
}
|
||||
}
|
||||
@@ -1160,10 +1159,6 @@ static struct page *alloc_fresh_huge_page_node(struct hstate *h, int nid)
|
||||
__GFP_REPEAT|__GFP_NOWARN,
|
||||
huge_page_order(h));
|
||||
if (page) {
|
||||
if (arch_prepare_hugepage(page)) {
|
||||
__free_pages(page, huge_page_order(h));
|
||||
return NULL;
|
||||
}
|
||||
prep_new_huge_page(h, page, nid);
|
||||
}
|
||||
|
||||
@@ -1315,11 +1310,6 @@ static struct page *alloc_buddy_huge_page(struct hstate *h, int nid)
|
||||
htlb_alloc_mask(h)|__GFP_COMP|__GFP_THISNODE|
|
||||
__GFP_REPEAT|__GFP_NOWARN, huge_page_order(h));
|
||||
|
||||
if (page && arch_prepare_hugepage(page)) {
|
||||
__free_pages(page, huge_page_order(h));
|
||||
page = NULL;
|
||||
}
|
||||
|
||||
spin_lock(&hugetlb_lock);
|
||||
if (page) {
|
||||
INIT_LIST_HEAD(&page->lru);
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
#define KASAN_SHADOW_SCALE_SIZE (1UL << KASAN_SHADOW_SCALE_SHIFT)
|
||||
#define KASAN_SHADOW_MASK (KASAN_SHADOW_SCALE_SIZE - 1)
|
||||
|
||||
#define KASAN_FREE_PAGE 0xFF /* page was freed */
|
||||
#define KASAN_FREE_PAGE 0xFF /* page was freed */
|
||||
#define KASAN_PAGE_REDZONE 0xFE /* redzone for kmalloc_large allocations */
|
||||
#define KASAN_KMALLOC_REDZONE 0xFC /* redzone inside slub object */
|
||||
|
||||
@@ -97,6 +97,10 @@ struct zbud_pool {
|
||||
struct list_head lru;
|
||||
u64 pages_nr;
|
||||
struct zbud_ops *ops;
|
||||
#ifdef CONFIG_ZPOOL
|
||||
struct zpool *zpool;
|
||||
struct zpool_ops *zpool_ops;
|
||||
#endif
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -123,7 +127,10 @@ struct zbud_header {
|
||||
|
||||
static int zbud_zpool_evict(struct zbud_pool *pool, unsigned long handle)
|
||||
{
|
||||
return zpool_evict(pool, handle);
|
||||
if (pool->zpool && pool->zpool_ops && pool->zpool_ops->evict)
|
||||
return pool->zpool_ops->evict(pool->zpool, handle);
|
||||
else
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
static struct zbud_ops zbud_zpool_ops = {
|
||||
@@ -131,9 +138,17 @@ static struct zbud_ops zbud_zpool_ops = {
|
||||
};
|
||||
|
||||
static void *zbud_zpool_create(char *name, gfp_t gfp,
|
||||
struct zpool_ops *zpool_ops)
|
||||
struct zpool_ops *zpool_ops,
|
||||
struct zpool *zpool)
|
||||
{
|
||||
return zbud_create_pool(gfp, zpool_ops ? &zbud_zpool_ops : NULL);
|
||||
struct zbud_pool *pool;
|
||||
|
||||
pool = zbud_create_pool(gfp, zpool_ops ? &zbud_zpool_ops : NULL);
|
||||
if (pool) {
|
||||
pool->zpool = zpool;
|
||||
pool->zpool_ops = zpool_ops;
|
||||
}
|
||||
return pool;
|
||||
}
|
||||
|
||||
static void zbud_zpool_destroy(void *pool)
|
||||
@@ -292,7 +307,7 @@ struct zbud_pool *zbud_create_pool(gfp_t gfp, struct zbud_ops *ops)
|
||||
struct zbud_pool *pool;
|
||||
int i;
|
||||
|
||||
pool = kmalloc(sizeof(struct zbud_pool), gfp);
|
||||
pool = kzalloc(sizeof(struct zbud_pool), gfp);
|
||||
if (!pool)
|
||||
return NULL;
|
||||
spin_lock_init(&pool->lock);
|
||||
|
||||
+4
-31
@@ -73,33 +73,6 @@ int zpool_unregister_driver(struct zpool_driver *driver)
|
||||
}
|
||||
EXPORT_SYMBOL(zpool_unregister_driver);
|
||||
|
||||
/**
|
||||
* zpool_evict() - evict callback from a zpool implementation.
|
||||
* @pool: pool to evict from.
|
||||
* @handle: handle to evict.
|
||||
*
|
||||
* This can be used by zpool implementations to call the
|
||||
* user's evict zpool_ops struct evict callback.
|
||||
*/
|
||||
int zpool_evict(void *pool, unsigned long handle)
|
||||
{
|
||||
struct zpool *zpool;
|
||||
|
||||
spin_lock(&pools_lock);
|
||||
list_for_each_entry(zpool, &pools_head, list) {
|
||||
if (zpool->pool == pool) {
|
||||
spin_unlock(&pools_lock);
|
||||
if (!zpool->ops || !zpool->ops->evict)
|
||||
return -EINVAL;
|
||||
return zpool->ops->evict(zpool, handle);
|
||||
}
|
||||
}
|
||||
spin_unlock(&pools_lock);
|
||||
|
||||
return -ENOENT;
|
||||
}
|
||||
EXPORT_SYMBOL(zpool_evict);
|
||||
|
||||
static struct zpool_driver *zpool_get_driver(char *type)
|
||||
{
|
||||
struct zpool_driver *driver;
|
||||
@@ -147,7 +120,7 @@ struct zpool *zpool_create_pool(char *type, char *name, gfp_t gfp,
|
||||
struct zpool_driver *driver;
|
||||
struct zpool *zpool;
|
||||
|
||||
pr_info("creating pool type %s\n", type);
|
||||
pr_debug("creating pool type %s\n", type);
|
||||
|
||||
driver = zpool_get_driver(type);
|
||||
|
||||
@@ -170,7 +143,7 @@ struct zpool *zpool_create_pool(char *type, char *name, gfp_t gfp,
|
||||
|
||||
zpool->type = driver->type;
|
||||
zpool->driver = driver;
|
||||
zpool->pool = driver->create(name, gfp, ops);
|
||||
zpool->pool = driver->create(name, gfp, ops, zpool);
|
||||
zpool->ops = ops;
|
||||
|
||||
if (!zpool->pool) {
|
||||
@@ -180,7 +153,7 @@ struct zpool *zpool_create_pool(char *type, char *name, gfp_t gfp,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
pr_info("created %s pool\n", type);
|
||||
pr_debug("created pool type %s\n", type);
|
||||
|
||||
spin_lock(&pools_lock);
|
||||
list_add(&zpool->list, &pools_head);
|
||||
@@ -202,7 +175,7 @@ struct zpool *zpool_create_pool(char *type, char *name, gfp_t gfp,
|
||||
*/
|
||||
void zpool_destroy_pool(struct zpool *zpool)
|
||||
{
|
||||
pr_info("destroying pool type %s\n", zpool->type);
|
||||
pr_debug("destroying pool type %s\n", zpool->type);
|
||||
|
||||
spin_lock(&pools_lock);
|
||||
list_del(&zpool->list);
|
||||
|
||||
+2
-5
@@ -45,10 +45,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_ZSMALLOC_DEBUG
|
||||
#define DEBUG
|
||||
#endif
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/sched.h>
|
||||
@@ -313,7 +309,8 @@ static void record_obj(unsigned long handle, unsigned long obj)
|
||||
|
||||
#ifdef CONFIG_ZPOOL
|
||||
|
||||
static void *zs_zpool_create(char *name, gfp_t gfp, struct zpool_ops *zpool_ops)
|
||||
static void *zs_zpool_create(char *name, gfp_t gfp, struct zpool_ops *zpool_ops,
|
||||
struct zpool *zpool)
|
||||
{
|
||||
return zs_create_pool(name, gfp);
|
||||
}
|
||||
|
||||
+5
-7
@@ -75,9 +75,10 @@ static u64 zswap_duplicate_entry;
|
||||
/*********************************
|
||||
* tunables
|
||||
**********************************/
|
||||
/* Enable/disable zswap (disabled by default, fixed at boot for now) */
|
||||
static bool zswap_enabled __read_mostly;
|
||||
module_param_named(enabled, zswap_enabled, bool, 0444);
|
||||
|
||||
/* Enable/disable zswap (disabled by default) */
|
||||
static bool zswap_enabled;
|
||||
module_param_named(enabled, zswap_enabled, bool, 0644);
|
||||
|
||||
/* Compressor to be used by zswap (fixed at boot for now) */
|
||||
#define ZSWAP_COMPRESSOR_DEFAULT "lzo"
|
||||
@@ -648,7 +649,7 @@ static int zswap_frontswap_store(unsigned type, pgoff_t offset,
|
||||
u8 *src, *dst;
|
||||
struct zswap_header *zhdr;
|
||||
|
||||
if (!tree) {
|
||||
if (!zswap_enabled || !tree) {
|
||||
ret = -ENODEV;
|
||||
goto reject;
|
||||
}
|
||||
@@ -901,9 +902,6 @@ static int __init init_zswap(void)
|
||||
{
|
||||
gfp_t gfp = __GFP_NORETRY | __GFP_NOWARN;
|
||||
|
||||
if (!zswap_enabled)
|
||||
return 0;
|
||||
|
||||
pr_info("loading zswap\n");
|
||||
|
||||
zswap_pool = zpool_create_pool(zswap_zpool_type, "zswap", gfp,
|
||||
|
||||
Reference in New Issue
Block a user