linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] staging: zsmalloc: various cleanups/improvments
@ 2013-01-25 17:46 Seth Jennings
  2013-01-25 17:46 ` [PATCH 1/4] staging: zsmalloc: add gfp flags to zs_create_pool Seth Jennings
                   ` (4 more replies)
  0 siblings, 5 replies; 26+ messages in thread
From: Seth Jennings @ 2013-01-25 17:46 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Seth Jennings, Andrew Morton, Dan Magenheimer,
	Konrad Rzeszutek Wilk, Nitin Gupta, Minchan Kim, Robert Jennings,
	linux-mm, devel, linux-kernel

These patches are the first 4 patches of the zswap patchset I
sent out previously.  Some recent commits to zsmalloc and
zcache in staging-next forced a rebase. While I was at it, Nitin
(zsmalloc maintainer) requested I break these 4 patches out from
the zswap patchset, since they stand on their own.

All are already Acked-by Nitin.

Based on staging-next as of today.

Seth Jennings (4):
  staging: zsmalloc: add gfp flags to zs_create_pool
  staging: zsmalloc: remove unused pool name
  staging: zsmalloc: add page alloc/free callbacks
  staging: zsmalloc: make CLASS_DELTA relative to PAGE_SIZE

 drivers/staging/zram/zram_drv.c          |    4 +-
 drivers/staging/zsmalloc/zsmalloc-main.c |   60 ++++++++++++++++++------------
 drivers/staging/zsmalloc/zsmalloc.h      |   10 ++++-
 3 files changed, 47 insertions(+), 27 deletions(-)

-- 
1.7.9.5


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH 1/4] staging: zsmalloc: add gfp flags to zs_create_pool
  2013-01-25 17:46 [PATCH 0/4] staging: zsmalloc: various cleanups/improvments Seth Jennings
@ 2013-01-25 17:46 ` Seth Jennings
  2013-01-28  3:39   ` Minchan Kim
  2013-01-25 17:46 ` [PATCH 2/4] staging: zsmalloc: remove unused pool name Seth Jennings
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 26+ messages in thread
From: Seth Jennings @ 2013-01-25 17:46 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Seth Jennings, Andrew Morton, Dan Magenheimer,
	Konrad Rzeszutek Wilk, Nitin Gupta, Minchan Kim, Robert Jennings,
	linux-mm, devel, linux-kernel

zs_create_pool() currently takes a gfp flags argument
that is used when growing the memory pool.  However
it is not used in allocating the metadata for the pool
itself.  That is currently hardcoded to GFP_KERNEL.

zswap calls zs_create_pool() at swapon time which is done
in atomic context, resulting in a "might sleep" warning.

This patch changes the meaning of the flags argument in
zs_create_pool() to mean the flags for the metadata allocation,
and adds a flags argument to zs_malloc that will be used for
memory pool growth if required.

Acked-by: Nitin Gupta <ngupta@vflare.org>
Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
---
 drivers/staging/zram/zram_drv.c          |    4 ++--
 drivers/staging/zsmalloc/zsmalloc-main.c |    9 +++------
 drivers/staging/zsmalloc/zsmalloc.h      |    2 +-
 3 files changed, 6 insertions(+), 9 deletions(-)

diff --git a/drivers/staging/zram/zram_drv.c b/drivers/staging/zram/zram_drv.c
index 6762b99..836dccf 100644
--- a/drivers/staging/zram/zram_drv.c
+++ b/drivers/staging/zram/zram_drv.c
@@ -325,7 +325,7 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
 		clen = PAGE_SIZE;
 	}
 
-	handle = zs_malloc(zram->mem_pool, clen);
+	handle = zs_malloc(zram->mem_pool, clen, GFP_NOIO | __GFP_HIGHMEM);
 	if (!handle) {
 		pr_info("Error allocating memory for compressed "
 			"page: %u, size=%zu\n", index, clen);
@@ -565,7 +565,7 @@ int zram_init_device(struct zram *zram)
 	/* zram devices sort of resembles non-rotational disks */
 	queue_flag_set_unlocked(QUEUE_FLAG_NONROT, zram->disk->queue);
 
-	zram->mem_pool = zs_create_pool("zram", GFP_NOIO | __GFP_HIGHMEM);
+	zram->mem_pool = zs_create_pool("zram", GFP_KERNEL);
 	if (!zram->mem_pool) {
 		pr_err("Error creating memory pool\n");
 		ret = -ENOMEM;
diff --git a/drivers/staging/zsmalloc/zsmalloc-main.c b/drivers/staging/zsmalloc/zsmalloc-main.c
index eb00772..f29f170 100644
--- a/drivers/staging/zsmalloc/zsmalloc-main.c
+++ b/drivers/staging/zsmalloc/zsmalloc-main.c
@@ -205,8 +205,6 @@ struct link_free {
 
 struct zs_pool {
 	struct size_class size_class[ZS_SIZE_CLASSES];
-
-	gfp_t flags;	/* allocation flags used when growing pool */
 	const char *name;
 };
 
@@ -818,7 +816,7 @@ struct zs_pool *zs_create_pool(const char *name, gfp_t flags)
 		return NULL;
 
 	ovhd_size = roundup(sizeof(*pool), PAGE_SIZE);
-	pool = kzalloc(ovhd_size, GFP_KERNEL);
+	pool = kzalloc(ovhd_size, flags);
 	if (!pool)
 		return NULL;
 
@@ -838,7 +836,6 @@ struct zs_pool *zs_create_pool(const char *name, gfp_t flags)
 
 	}
 
-	pool->flags = flags;
 	pool->name = name;
 
 	return pool;
@@ -874,7 +871,7 @@ EXPORT_SYMBOL_GPL(zs_destroy_pool);
  * otherwise 0.
  * Allocation requests with size > ZS_MAX_ALLOC_SIZE will fail.
  */
-unsigned long zs_malloc(struct zs_pool *pool, size_t size)
+unsigned long zs_malloc(struct zs_pool *pool, size_t size, gfp_t flags)
 {
 	unsigned long obj;
 	struct link_free *link;
@@ -896,7 +893,7 @@ unsigned long zs_malloc(struct zs_pool *pool, size_t size)
 
 	if (!first_page) {
 		spin_unlock(&class->lock);
-		first_page = alloc_zspage(class, pool->flags);
+		first_page = alloc_zspage(class, flags);
 		if (unlikely(!first_page))
 			return 0;
 
diff --git a/drivers/staging/zsmalloc/zsmalloc.h b/drivers/staging/zsmalloc/zsmalloc.h
index de2e8bf..907ff03 100644
--- a/drivers/staging/zsmalloc/zsmalloc.h
+++ b/drivers/staging/zsmalloc/zsmalloc.h
@@ -31,7 +31,7 @@ struct zs_pool;
 struct zs_pool *zs_create_pool(const char *name, gfp_t flags);
 void zs_destroy_pool(struct zs_pool *pool);
 
-unsigned long zs_malloc(struct zs_pool *pool, size_t size);
+unsigned long zs_malloc(struct zs_pool *pool, size_t size, gfp_t flags);
 void zs_free(struct zs_pool *pool, unsigned long obj);
 
 void *zs_map_object(struct zs_pool *pool, unsigned long handle,
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 2/4] staging: zsmalloc: remove unused pool name
  2013-01-25 17:46 [PATCH 0/4] staging: zsmalloc: various cleanups/improvments Seth Jennings
  2013-01-25 17:46 ` [PATCH 1/4] staging: zsmalloc: add gfp flags to zs_create_pool Seth Jennings
@ 2013-01-25 17:46 ` Seth Jennings
  2013-01-28  3:40   ` Minchan Kim
  2013-01-30  4:16   ` Greg Kroah-Hartman
  2013-01-25 17:46 ` [PATCH 3/4] staging: zsmalloc: add page alloc/free callbacks Seth Jennings
                   ` (2 subsequent siblings)
  4 siblings, 2 replies; 26+ messages in thread
From: Seth Jennings @ 2013-01-25 17:46 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Seth Jennings, Andrew Morton, Dan Magenheimer,
	Konrad Rzeszutek Wilk, Nitin Gupta, Minchan Kim, Robert Jennings,
	linux-mm, devel, linux-kernel

zs_create_pool() currently takes a name argument which is
never used in any useful way.

This patch removes it.

Acked-by: Nitin Gupta <ngupta@vflare.org>
Signed-off-by: Seth Jennnings <sjenning@linux.vnet.ibm.com>
---
 drivers/staging/zram/zram_drv.c          |    2 +-
 drivers/staging/zsmalloc/zsmalloc-main.c |   11 +++--------
 drivers/staging/zsmalloc/zsmalloc.h      |    2 +-
 3 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/drivers/staging/zram/zram_drv.c b/drivers/staging/zram/zram_drv.c
index 836dccf..2086682 100644
--- a/drivers/staging/zram/zram_drv.c
+++ b/drivers/staging/zram/zram_drv.c
@@ -565,7 +565,7 @@ int zram_init_device(struct zram *zram)
 	/* zram devices sort of resembles non-rotational disks */
 	queue_flag_set_unlocked(QUEUE_FLAG_NONROT, zram->disk->queue);
 
-	zram->mem_pool = zs_create_pool("zram", GFP_KERNEL);
+	zram->mem_pool = zs_create_pool(GFP_KERNEL);
 	if (!zram->mem_pool) {
 		pr_err("Error creating memory pool\n");
 		ret = -ENOMEM;
diff --git a/drivers/staging/zsmalloc/zsmalloc-main.c b/drivers/staging/zsmalloc/zsmalloc-main.c
index f29f170..711a854 100644
--- a/drivers/staging/zsmalloc/zsmalloc-main.c
+++ b/drivers/staging/zsmalloc/zsmalloc-main.c
@@ -798,8 +798,7 @@ fail:
 
 /**
  * zs_create_pool - Creates an allocation pool to work from.
- * @name: name of the pool to be created
- * @flags: allocation flags used when growing pool
+ * @flags: allocation flags used to allocate pool metadata
  *
  * This function must be called before anything when using
  * the zsmalloc allocator.
@@ -807,14 +806,11 @@ fail:
  * On success, a pointer to the newly created pool is returned,
  * otherwise NULL.
  */
-struct zs_pool *zs_create_pool(const char *name, gfp_t flags)
+struct zs_pool *zs_create_pool(gfp_t flags)
 {
 	int i, ovhd_size;
 	struct zs_pool *pool;
 
-	if (!name)
-		return NULL;
-
 	ovhd_size = roundup(sizeof(*pool), PAGE_SIZE);
 	pool = kzalloc(ovhd_size, flags);
 	if (!pool)
@@ -836,8 +832,6 @@ struct zs_pool *zs_create_pool(const char *name, gfp_t flags)
 
 	}
 
-	pool->name = name;
-
 	return pool;
 }
 EXPORT_SYMBOL_GPL(zs_create_pool);
@@ -866,6 +860,7 @@ EXPORT_SYMBOL_GPL(zs_destroy_pool);
  * zs_malloc - Allocate block of given size from pool.
  * @pool: pool to allocate from
  * @size: size of block to allocate
+ * @flags: gfp flags used when expanding the pool
  *
  * On success, handle to the allocated object is returned,
  * otherwise 0.
diff --git a/drivers/staging/zsmalloc/zsmalloc.h b/drivers/staging/zsmalloc/zsmalloc.h
index 907ff03..25a4b4d 100644
--- a/drivers/staging/zsmalloc/zsmalloc.h
+++ b/drivers/staging/zsmalloc/zsmalloc.h
@@ -28,7 +28,7 @@ enum zs_mapmode {
 
 struct zs_pool;
 
-struct zs_pool *zs_create_pool(const char *name, gfp_t flags);
+struct zs_pool *zs_create_pool(gfp_t flags);
 void zs_destroy_pool(struct zs_pool *pool);
 
 unsigned long zs_malloc(struct zs_pool *pool, size_t size, gfp_t flags);
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 3/4] staging: zsmalloc: add page alloc/free callbacks
  2013-01-25 17:46 [PATCH 0/4] staging: zsmalloc: various cleanups/improvments Seth Jennings
  2013-01-25 17:46 ` [PATCH 1/4] staging: zsmalloc: add gfp flags to zs_create_pool Seth Jennings
  2013-01-25 17:46 ` [PATCH 2/4] staging: zsmalloc: remove unused pool name Seth Jennings
@ 2013-01-25 17:46 ` Seth Jennings
  2013-01-28  3:42   ` Minchan Kim
  2013-01-25 17:46 ` [PATCH 4/4] staging: zsmalloc: make CLASS_DELTA relative to PAGE_SIZE Seth Jennings
  2013-01-28  3:47 ` [PATCH 0/4] staging: zsmalloc: various cleanups/improvments Minchan Kim
  4 siblings, 1 reply; 26+ messages in thread
From: Seth Jennings @ 2013-01-25 17:46 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Seth Jennings, Andrew Morton, Dan Magenheimer,
	Konrad Rzeszutek Wilk, Nitin Gupta, Minchan Kim, Robert Jennings,
	linux-mm, devel, linux-kernel

This patch allows users of zsmalloc to register the
allocation and free routines used by zsmalloc to obtain
more pages for the memory pool.  This allows the user
more control over zsmalloc pool policy and behavior.

If the user does not wish to control this, alloc_page() and
__free_page() are used by default.

Acked-by: Nitin Gupta <ngupta@vflare.org>
Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
---
 drivers/staging/zram/zram_drv.c          |    2 +-
 drivers/staging/zsmalloc/zsmalloc-main.c |   44 ++++++++++++++++++++++--------
 drivers/staging/zsmalloc/zsmalloc.h      |    8 +++++-
 3 files changed, 41 insertions(+), 13 deletions(-)

diff --git a/drivers/staging/zram/zram_drv.c b/drivers/staging/zram/zram_drv.c
index 2086682..32323c6 100644
--- a/drivers/staging/zram/zram_drv.c
+++ b/drivers/staging/zram/zram_drv.c
@@ -565,7 +565,7 @@ int zram_init_device(struct zram *zram)
 	/* zram devices sort of resembles non-rotational disks */
 	queue_flag_set_unlocked(QUEUE_FLAG_NONROT, zram->disk->queue);
 
-	zram->mem_pool = zs_create_pool(GFP_KERNEL);
+	zram->mem_pool = zs_create_pool(GFP_KERNEL, NULL);
 	if (!zram->mem_pool) {
 		pr_err("Error creating memory pool\n");
 		ret = -ENOMEM;
diff --git a/drivers/staging/zsmalloc/zsmalloc-main.c b/drivers/staging/zsmalloc/zsmalloc-main.c
index 711a854..12f66c3 100644
--- a/drivers/staging/zsmalloc/zsmalloc-main.c
+++ b/drivers/staging/zsmalloc/zsmalloc-main.c
@@ -205,7 +205,7 @@ struct link_free {
 
 struct zs_pool {
 	struct size_class size_class[ZS_SIZE_CLASSES];
-	const char *name;
+	struct zs_ops *ops;
 };
 
 /*
@@ -240,6 +240,21 @@ struct mapping_area {
 	enum zs_mapmode vm_mm; /* mapping mode */
 };
 
+/* default page alloc/free ops */
+struct page *zs_alloc_page(gfp_t flags)
+{
+	return alloc_page(flags);
+}
+
+void zs_free_page(struct page *page)
+{
+	__free_page(page);
+}
+
+struct zs_ops zs_default_ops = {
+	.alloc = zs_alloc_page,
+	.free = zs_free_page
+};
 
 /* per-cpu VM mapping areas for zspage accesses that cross page boundaries */
 static DEFINE_PER_CPU(struct mapping_area, zs_map_area);
@@ -476,7 +491,7 @@ static void reset_page(struct page *page)
 	reset_page_mapcount(page);
 }
 
-static void free_zspage(struct page *first_page)
+static void free_zspage(struct zs_ops *ops, struct page *first_page)
 {
 	struct page *nextp, *tmp, *head_extra;
 
@@ -486,7 +501,7 @@ static void free_zspage(struct page *first_page)
 	head_extra = (struct page *)page_private(first_page);
 
 	reset_page(first_page);
-	__free_page(first_page);
+	ops->free(first_page);
 
 	/* zspage with only 1 system page */
 	if (!head_extra)
@@ -495,10 +510,10 @@ static void free_zspage(struct page *first_page)
 	list_for_each_entry_safe(nextp, tmp, &head_extra->lru, lru) {
 		list_del(&nextp->lru);
 		reset_page(nextp);
-		__free_page(nextp);
+		ops->free(nextp);
 	}
 	reset_page(head_extra);
-	__free_page(head_extra);
+	ops->free(head_extra);
 }
 
 /* Initialize a newly allocated zspage */
@@ -550,7 +565,8 @@ static void init_zspage(struct page *first_page, struct size_class *class)
 /*
  * Allocate a zspage for the given size class
  */
-static struct page *alloc_zspage(struct size_class *class, gfp_t flags)
+static struct page *alloc_zspage(struct zs_ops *ops, struct size_class *class,
+				gfp_t flags)
 {
 	int i, error;
 	struct page *first_page = NULL, *uninitialized_var(prev_page);
@@ -570,7 +586,7 @@ static struct page *alloc_zspage(struct size_class *class, gfp_t flags)
 	for (i = 0; i < class->pages_per_zspage; i++) {
 		struct page *page;
 
-		page = alloc_page(flags);
+		page = ops->alloc(flags);
 		if (!page)
 			goto cleanup;
 
@@ -602,7 +618,7 @@ static struct page *alloc_zspage(struct size_class *class, gfp_t flags)
 
 cleanup:
 	if (unlikely(error) && first_page) {
-		free_zspage(first_page);
+		free_zspage(ops, first_page);
 		first_page = NULL;
 	}
 
@@ -799,6 +815,7 @@ fail:
 /**
  * zs_create_pool - Creates an allocation pool to work from.
  * @flags: allocation flags used to allocate pool metadata
+ * @ops: allocation/free callbacks for expanding the pool
  *
  * This function must be called before anything when using
  * the zsmalloc allocator.
@@ -806,7 +823,7 @@ fail:
  * On success, a pointer to the newly created pool is returned,
  * otherwise NULL.
  */
-struct zs_pool *zs_create_pool(gfp_t flags)
+struct zs_pool *zs_create_pool(gfp_t flags, struct zs_ops *ops)
 {
 	int i, ovhd_size;
 	struct zs_pool *pool;
@@ -832,6 +849,11 @@ struct zs_pool *zs_create_pool(gfp_t flags)
 
 	}
 
+	if (ops)
+		pool->ops = ops;
+	else
+		pool->ops = &zs_default_ops;
+
 	return pool;
 }
 EXPORT_SYMBOL_GPL(zs_create_pool);
@@ -888,7 +910,7 @@ unsigned long zs_malloc(struct zs_pool *pool, size_t size, gfp_t flags)
 
 	if (!first_page) {
 		spin_unlock(&class->lock);
-		first_page = alloc_zspage(class, flags);
+		first_page = alloc_zspage(pool->ops, class, flags);
 		if (unlikely(!first_page))
 			return 0;
 
@@ -954,7 +976,7 @@ void zs_free(struct zs_pool *pool, unsigned long obj)
 	spin_unlock(&class->lock);
 
 	if (fullness == ZS_EMPTY)
-		free_zspage(first_page);
+		free_zspage(pool->ops, first_page);
 }
 EXPORT_SYMBOL_GPL(zs_free);
 
diff --git a/drivers/staging/zsmalloc/zsmalloc.h b/drivers/staging/zsmalloc/zsmalloc.h
index 25a4b4d..eb6efb6 100644
--- a/drivers/staging/zsmalloc/zsmalloc.h
+++ b/drivers/staging/zsmalloc/zsmalloc.h
@@ -14,6 +14,7 @@
 #define _ZS_MALLOC_H_
 
 #include <linux/types.h>
+#include <linux/mm_types.h>
 
 /*
  * zsmalloc mapping modes
@@ -26,9 +27,14 @@ enum zs_mapmode {
 	ZS_MM_WO /* write-only (no copy-in at map time) */
 };
 
+struct zs_ops {
+	struct page * (*alloc)(gfp_t);
+	void (*free)(struct page *);
+};
+
 struct zs_pool;
 
-struct zs_pool *zs_create_pool(gfp_t flags);
+struct zs_pool *zs_create_pool(gfp_t flags, struct zs_ops *ops);
 void zs_destroy_pool(struct zs_pool *pool);
 
 unsigned long zs_malloc(struct zs_pool *pool, size_t size, gfp_t flags);
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 4/4] staging: zsmalloc: make CLASS_DELTA relative to PAGE_SIZE
  2013-01-25 17:46 [PATCH 0/4] staging: zsmalloc: various cleanups/improvments Seth Jennings
                   ` (2 preceding siblings ...)
  2013-01-25 17:46 ` [PATCH 3/4] staging: zsmalloc: add page alloc/free callbacks Seth Jennings
@ 2013-01-25 17:46 ` Seth Jennings
  2013-01-28  3:44   ` Minchan Kim
  2013-01-28  3:47 ` [PATCH 0/4] staging: zsmalloc: various cleanups/improvments Minchan Kim
  4 siblings, 1 reply; 26+ messages in thread
From: Seth Jennings @ 2013-01-25 17:46 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Seth Jennings, Andrew Morton, Dan Magenheimer,
	Konrad Rzeszutek Wilk, Nitin Gupta, Minchan Kim, Robert Jennings,
	linux-mm, devel, linux-kernel

Right now ZS_SIZE_CLASS_DELTA is hardcoded to be 16.  This
creates 254 classes for systems with 4k pages. However, on
PPC64 with 64k pages, it creates 4095 classes which is far
too many.

This patch makes ZS_SIZE_CLASS_DELTA relative to PAGE_SIZE
so that regardless of the page size, there will be the same
number of classes.

Acked-by: Nitin Gupta <ngupta@vflare.org>
Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
---
 drivers/staging/zsmalloc/zsmalloc-main.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/zsmalloc/zsmalloc-main.c b/drivers/staging/zsmalloc/zsmalloc-main.c
index 12f66c3..13018b7 100644
--- a/drivers/staging/zsmalloc/zsmalloc-main.c
+++ b/drivers/staging/zsmalloc/zsmalloc-main.c
@@ -141,7 +141,7 @@
  *  ZS_MIN_ALLOC_SIZE and ZS_SIZE_CLASS_DELTA must be multiple of ZS_ALIGN
  *  (reason above)
  */
-#define ZS_SIZE_CLASS_DELTA	16
+#define ZS_SIZE_CLASS_DELTA	(PAGE_SIZE >> 8)
 #define ZS_SIZE_CLASSES		((ZS_MAX_ALLOC_SIZE - ZS_MIN_ALLOC_SIZE) / \
 					ZS_SIZE_CLASS_DELTA + 1)
 
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* Re: [PATCH 1/4] staging: zsmalloc: add gfp flags to zs_create_pool
  2013-01-25 17:46 ` [PATCH 1/4] staging: zsmalloc: add gfp flags to zs_create_pool Seth Jennings
@ 2013-01-28  3:39   ` Minchan Kim
  2013-01-28 15:16     ` Konrad Rzeszutek Wilk
  2013-01-28 17:01     ` Seth Jennings
  0 siblings, 2 replies; 26+ messages in thread
From: Minchan Kim @ 2013-01-28  3:39 UTC (permalink / raw)
  To: Seth Jennings
  Cc: Greg Kroah-Hartman, Andrew Morton, Dan Magenheimer,
	Konrad Rzeszutek Wilk, Nitin Gupta, Robert Jennings, linux-mm,
	devel, linux-kernel

Hi Seth,

On Fri, Jan 25, 2013 at 11:46:15AM -0600, Seth Jennings wrote:
> zs_create_pool() currently takes a gfp flags argument
> that is used when growing the memory pool.  However
> it is not used in allocating the metadata for the pool
> itself.  That is currently hardcoded to GFP_KERNEL.
> 
> zswap calls zs_create_pool() at swapon time which is done
> in atomic context, resulting in a "might sleep" warning.
> 
> This patch changes the meaning of the flags argument in
> zs_create_pool() to mean the flags for the metadata allocation,
> and adds a flags argument to zs_malloc that will be used for
> memory pool growth if required.

As I mentioned, I'm not strongly against with this patch but it
should be last resort in case of not being able to address
frontswap's init routine's dependency with swap_lock.

I sent a patch and am waiting reply of Konrand or Dan.
If we can fix frontswap, it would be better rather than
changing zsmalloc.

> 
> Acked-by: Nitin Gupta <ngupta@vflare.org>
> Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
> ---
>  drivers/staging/zram/zram_drv.c          |    4 ++--
>  drivers/staging/zsmalloc/zsmalloc-main.c |    9 +++------
>  drivers/staging/zsmalloc/zsmalloc.h      |    2 +-
>  3 files changed, 6 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/staging/zram/zram_drv.c b/drivers/staging/zram/zram_drv.c
> index 6762b99..836dccf 100644
> --- a/drivers/staging/zram/zram_drv.c
> +++ b/drivers/staging/zram/zram_drv.c
> @@ -325,7 +325,7 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
>  		clen = PAGE_SIZE;
>  	}
>  
> -	handle = zs_malloc(zram->mem_pool, clen);
> +	handle = zs_malloc(zram->mem_pool, clen, GFP_NOIO | __GFP_HIGHMEM);
>  	if (!handle) {
>  		pr_info("Error allocating memory for compressed "
>  			"page: %u, size=%zu\n", index, clen);
> @@ -565,7 +565,7 @@ int zram_init_device(struct zram *zram)
>  	/* zram devices sort of resembles non-rotational disks */
>  	queue_flag_set_unlocked(QUEUE_FLAG_NONROT, zram->disk->queue);
>  
> -	zram->mem_pool = zs_create_pool("zram", GFP_NOIO | __GFP_HIGHMEM);
> +	zram->mem_pool = zs_create_pool("zram", GFP_KERNEL);
>  	if (!zram->mem_pool) {
>  		pr_err("Error creating memory pool\n");
>  		ret = -ENOMEM;
> diff --git a/drivers/staging/zsmalloc/zsmalloc-main.c b/drivers/staging/zsmalloc/zsmalloc-main.c
> index eb00772..f29f170 100644
> --- a/drivers/staging/zsmalloc/zsmalloc-main.c
> +++ b/drivers/staging/zsmalloc/zsmalloc-main.c
> @@ -205,8 +205,6 @@ struct link_free {
>  
>  struct zs_pool {
>  	struct size_class size_class[ZS_SIZE_CLASSES];
> -
> -	gfp_t flags;	/* allocation flags used when growing pool */
>  	const char *name;
>  };
>  
> @@ -818,7 +816,7 @@ struct zs_pool *zs_create_pool(const char *name, gfp_t flags)
>  		return NULL;
>  
>  	ovhd_size = roundup(sizeof(*pool), PAGE_SIZE);
> -	pool = kzalloc(ovhd_size, GFP_KERNEL);
> +	pool = kzalloc(ovhd_size, flags);
>  	if (!pool)
>  		return NULL;
>  
> @@ -838,7 +836,6 @@ struct zs_pool *zs_create_pool(const char *name, gfp_t flags)
>  
>  	}
>  
> -	pool->flags = flags;
>  	pool->name = name;
>  
>  	return pool;
> @@ -874,7 +871,7 @@ EXPORT_SYMBOL_GPL(zs_destroy_pool);
>   * otherwise 0.
>   * Allocation requests with size > ZS_MAX_ALLOC_SIZE will fail.
>   */
> -unsigned long zs_malloc(struct zs_pool *pool, size_t size)
> +unsigned long zs_malloc(struct zs_pool *pool, size_t size, gfp_t flags)
>  {
>  	unsigned long obj;
>  	struct link_free *link;
> @@ -896,7 +893,7 @@ unsigned long zs_malloc(struct zs_pool *pool, size_t size)
>  
>  	if (!first_page) {
>  		spin_unlock(&class->lock);
> -		first_page = alloc_zspage(class, pool->flags);
> +		first_page = alloc_zspage(class, flags);
>  		if (unlikely(!first_page))
>  			return 0;
>  
> diff --git a/drivers/staging/zsmalloc/zsmalloc.h b/drivers/staging/zsmalloc/zsmalloc.h
> index de2e8bf..907ff03 100644
> --- a/drivers/staging/zsmalloc/zsmalloc.h
> +++ b/drivers/staging/zsmalloc/zsmalloc.h
> @@ -31,7 +31,7 @@ struct zs_pool;
>  struct zs_pool *zs_create_pool(const char *name, gfp_t flags);
>  void zs_destroy_pool(struct zs_pool *pool);
>  
> -unsigned long zs_malloc(struct zs_pool *pool, size_t size);
> +unsigned long zs_malloc(struct zs_pool *pool, size_t size, gfp_t flags);
>  void zs_free(struct zs_pool *pool, unsigned long obj);
>  
>  void *zs_map_object(struct zs_pool *pool, unsigned long handle,
> -- 
> 1.7.9.5
> 
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org.  For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

-- 
Kind regards,
Minchan Kim

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 2/4] staging: zsmalloc: remove unused pool name
  2013-01-25 17:46 ` [PATCH 2/4] staging: zsmalloc: remove unused pool name Seth Jennings
@ 2013-01-28  3:40   ` Minchan Kim
  2013-01-30  4:16   ` Greg Kroah-Hartman
  1 sibling, 0 replies; 26+ messages in thread
From: Minchan Kim @ 2013-01-28  3:40 UTC (permalink / raw)
  To: Seth Jennings
  Cc: Greg Kroah-Hartman, Andrew Morton, Dan Magenheimer,
	Konrad Rzeszutek Wilk, Nitin Gupta, Robert Jennings, linux-mm,
	devel, linux-kernel

On Fri, Jan 25, 2013 at 11:46:16AM -0600, Seth Jennings wrote:
> zs_create_pool() currently takes a name argument which is
> never used in any useful way.
> 
> This patch removes it.
> 
> Acked-by: Nitin Gupta <ngupta@vflare.org>
> Signed-off-by: Seth Jennnings <sjenning@linux.vnet.ibm.com>
Acked-by: Minchan Kim <minchan@kernel.org>

-- 
Kind regards,
Minchan Kim

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 3/4] staging: zsmalloc: add page alloc/free callbacks
  2013-01-25 17:46 ` [PATCH 3/4] staging: zsmalloc: add page alloc/free callbacks Seth Jennings
@ 2013-01-28  3:42   ` Minchan Kim
  0 siblings, 0 replies; 26+ messages in thread
From: Minchan Kim @ 2013-01-28  3:42 UTC (permalink / raw)
  To: Seth Jennings
  Cc: Greg Kroah-Hartman, Andrew Morton, Dan Magenheimer,
	Konrad Rzeszutek Wilk, Nitin Gupta, Robert Jennings, linux-mm,
	devel, linux-kernel

On Sat, Jan 26, 2013 at 2:46 AM, Seth Jennings
<sjenning@linux.vnet.ibm.com> wrote:
> This patch allows users of zsmalloc to register the
> allocation and free routines used by zsmalloc to obtain
> more pages for the memory pool.  This allows the user
> more control over zsmalloc pool policy and behavior.
>
> If the user does not wish to control this, alloc_page() and
> __free_page() are used by default.
>
> Acked-by: Nitin Gupta <ngupta@vflare.org>
> Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
Acked-by: Minchan Kim <minchan@kernel.org>

-- 
Kind regards,
Minchan Kim

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 4/4] staging: zsmalloc: make CLASS_DELTA relative to PAGE_SIZE
  2013-01-25 17:46 ` [PATCH 4/4] staging: zsmalloc: make CLASS_DELTA relative to PAGE_SIZE Seth Jennings
@ 2013-01-28  3:44   ` Minchan Kim
  0 siblings, 0 replies; 26+ messages in thread
From: Minchan Kim @ 2013-01-28  3:44 UTC (permalink / raw)
  To: Seth Jennings
  Cc: Greg Kroah-Hartman, Andrew Morton, Dan Magenheimer,
	Konrad Rzeszutek Wilk, Nitin Gupta, Robert Jennings, linux-mm,
	devel, linux-kernel

On Fri, Jan 25, 2013 at 11:46:18AM -0600, Seth Jennings wrote:
> Right now ZS_SIZE_CLASS_DELTA is hardcoded to be 16.  This
> creates 254 classes for systems with 4k pages. However, on
> PPC64 with 64k pages, it creates 4095 classes which is far
> too many.
> 
> This patch makes ZS_SIZE_CLASS_DELTA relative to PAGE_SIZE
> so that regardless of the page size, there will be the same
> number of classes.
> 
> Acked-by: Nitin Gupta <ngupta@vflare.org>
> Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
Acked-by: Minchan Kim <minchan@kernel.org>

-- 
Kind regards,
Minchan Kim

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 0/4] staging: zsmalloc: various cleanups/improvments
  2013-01-25 17:46 [PATCH 0/4] staging: zsmalloc: various cleanups/improvments Seth Jennings
                   ` (3 preceding siblings ...)
  2013-01-25 17:46 ` [PATCH 4/4] staging: zsmalloc: make CLASS_DELTA relative to PAGE_SIZE Seth Jennings
@ 2013-01-28  3:47 ` Minchan Kim
  2013-01-28 17:07   ` Seth Jennings
  2013-01-30  4:17   ` Greg Kroah-Hartman
  4 siblings, 2 replies; 26+ messages in thread
From: Minchan Kim @ 2013-01-28  3:47 UTC (permalink / raw)
  To: Seth Jennings
  Cc: Greg Kroah-Hartman, Andrew Morton, Dan Magenheimer,
	Konrad Rzeszutek Wilk, Nitin Gupta, Robert Jennings, linux-mm,
	devel, linux-kernel

Hi Seth,

On Fri, Jan 25, 2013 at 11:46:14AM -0600, Seth Jennings wrote:
> These patches are the first 4 patches of the zswap patchset I
> sent out previously.  Some recent commits to zsmalloc and
> zcache in staging-next forced a rebase. While I was at it, Nitin
> (zsmalloc maintainer) requested I break these 4 patches out from
> the zswap patchset, since they stand on their own.

[2/4] and [4/4] is okay to merge current zsmalloc in staging but
[1/4] and [3/4] is dependent on zswap so it should be part of
zswap patchset.

> 
> All are already Acked-by Nitin.
> 
> Based on staging-next as of today.
> 
> Seth Jennings (4):
>   staging: zsmalloc: add gfp flags to zs_create_pool
>   staging: zsmalloc: remove unused pool name
>   staging: zsmalloc: add page alloc/free callbacks
>   staging: zsmalloc: make CLASS_DELTA relative to PAGE_SIZE
> 
>  drivers/staging/zram/zram_drv.c          |    4 +-
>  drivers/staging/zsmalloc/zsmalloc-main.c |   60 ++++++++++++++++++------------
>  drivers/staging/zsmalloc/zsmalloc.h      |   10 ++++-
>  3 files changed, 47 insertions(+), 27 deletions(-)
> 
> -- 
> 1.7.9.5
> 
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org.  For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

-- 
Kind regards,
Minchan Kim

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 1/4] staging: zsmalloc: add gfp flags to zs_create_pool
  2013-01-28  3:39   ` Minchan Kim
@ 2013-01-28 15:16     ` Konrad Rzeszutek Wilk
  2013-01-28 23:33       ` Minchan Kim
  2013-01-28 17:01     ` Seth Jennings
  1 sibling, 1 reply; 26+ messages in thread
From: Konrad Rzeszutek Wilk @ 2013-01-28 15:16 UTC (permalink / raw)
  To: Minchan Kim
  Cc: Seth Jennings, Greg Kroah-Hartman, Andrew Morton,
	Dan Magenheimer, Nitin Gupta, Robert Jennings, linux-mm, devel,
	linux-kernel

On Mon, Jan 28, 2013 at 12:39:44PM +0900, Minchan Kim wrote:
> Hi Seth,
> 
> On Fri, Jan 25, 2013 at 11:46:15AM -0600, Seth Jennings wrote:
> > zs_create_pool() currently takes a gfp flags argument
> > that is used when growing the memory pool.  However
> > it is not used in allocating the metadata for the pool
> > itself.  That is currently hardcoded to GFP_KERNEL.
> > 
> > zswap calls zs_create_pool() at swapon time which is done
> > in atomic context, resulting in a "might sleep" warning.
> > 
> > This patch changes the meaning of the flags argument in
> > zs_create_pool() to mean the flags for the metadata allocation,
> > and adds a flags argument to zs_malloc that will be used for
> > memory pool growth if required.
> 
> As I mentioned, I'm not strongly against with this patch but it
> should be last resort in case of not being able to address
> frontswap's init routine's dependency with swap_lock.
> 
> I sent a patch and am waiting reply of Konrand or Dan.
> If we can fix frontswap, it would be better rather than
> changing zsmalloc.

Could you point me to the subject/title of it please? Thanks.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 1/4] staging: zsmalloc: add gfp flags to zs_create_pool
  2013-01-28  3:39   ` Minchan Kim
  2013-01-28 15:16     ` Konrad Rzeszutek Wilk
@ 2013-01-28 17:01     ` Seth Jennings
  2013-01-28 23:38       ` Minchan Kim
  1 sibling, 1 reply; 26+ messages in thread
From: Seth Jennings @ 2013-01-28 17:01 UTC (permalink / raw)
  To: Minchan Kim
  Cc: Greg Kroah-Hartman, Andrew Morton, Dan Magenheimer,
	Konrad Rzeszutek Wilk, Nitin Gupta, Robert Jennings, linux-mm,
	devel, linux-kernel

On 01/27/2013 09:39 PM, Minchan Kim wrote:
> Hi Seth,
> 
> On Fri, Jan 25, 2013 at 11:46:15AM -0600, Seth Jennings wrote:
>> zs_create_pool() currently takes a gfp flags argument
>> that is used when growing the memory pool.  However
>> it is not used in allocating the metadata for the pool
>> itself.  That is currently hardcoded to GFP_KERNEL.
>>
>> zswap calls zs_create_pool() at swapon time which is done
>> in atomic context, resulting in a "might sleep" warning.
>>
>> This patch changes the meaning of the flags argument in
>> zs_create_pool() to mean the flags for the metadata allocation,
>> and adds a flags argument to zs_malloc that will be used for
>> memory pool growth if required.
> 
> As I mentioned, I'm not strongly against with this patch but it
> should be last resort in case of not being able to address
> frontswap's init routine's dependency with swap_lock.
> 
> I sent a patch and am waiting reply of Konrand or Dan.
> If we can fix frontswap, it would be better rather than
> changing zsmalloc.

I agree that moving the call to frontswap_init() out of the swap_lock
would be a good thing.  However, it doesn't mean that we still
shouldn't allow the users to control the gfp mask for the allocation
done by zs_create_pool(). While moving the frontswap_init() outside
the lock removes the _need_ for this patch, I think that is it good
API design to allow the user to specify the gfp mask.

Seth


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 0/4] staging: zsmalloc: various cleanups/improvments
  2013-01-28  3:47 ` [PATCH 0/4] staging: zsmalloc: various cleanups/improvments Minchan Kim
@ 2013-01-28 17:07   ` Seth Jennings
  2013-01-28 23:44     ` Minchan Kim
  2013-01-30  4:17   ` Greg Kroah-Hartman
  1 sibling, 1 reply; 26+ messages in thread
From: Seth Jennings @ 2013-01-28 17:07 UTC (permalink / raw)
  To: Minchan Kim
  Cc: Greg Kroah-Hartman, Andrew Morton, Dan Magenheimer,
	Konrad Rzeszutek Wilk, Nitin Gupta, Robert Jennings, linux-mm,
	devel, linux-kernel

On 01/27/2013 09:47 PM, Minchan Kim wrote:
> Hi Seth,
> 
> On Fri, Jan 25, 2013 at 11:46:14AM -0600, Seth Jennings wrote:
>> These patches are the first 4 patches of the zswap patchset I
>> sent out previously.  Some recent commits to zsmalloc and
>> zcache in staging-next forced a rebase. While I was at it, Nitin
>> (zsmalloc maintainer) requested I break these 4 patches out from
>> the zswap patchset, since they stand on their own.
> 
> [2/4] and [4/4] is okay to merge current zsmalloc in staging but
> [1/4] and [3/4] is dependent on zswap so it should be part of
> zswap patchset.

Just to clarify, patches 1 and 3 are _not_ dependent on zswap.  They
just introduce changes that are only needed by zswap.

Seth


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 1/4] staging: zsmalloc: add gfp flags to zs_create_pool
  2013-01-28 15:16     ` Konrad Rzeszutek Wilk
@ 2013-01-28 23:33       ` Minchan Kim
  0 siblings, 0 replies; 26+ messages in thread
From: Minchan Kim @ 2013-01-28 23:33 UTC (permalink / raw)
  To: Konrad Rzeszutek Wilk
  Cc: Seth Jennings, Greg Kroah-Hartman, Andrew Morton,
	Dan Magenheimer, Nitin Gupta, Robert Jennings, linux-mm, devel,
	linux-kernel

On Mon, Jan 28, 2013 at 10:16:38AM -0500, Konrad Rzeszutek Wilk wrote:
> On Mon, Jan 28, 2013 at 12:39:44PM +0900, Minchan Kim wrote:
> > Hi Seth,
> > 
> > On Fri, Jan 25, 2013 at 11:46:15AM -0600, Seth Jennings wrote:
> > > zs_create_pool() currently takes a gfp flags argument
> > > that is used when growing the memory pool.  However
> > > it is not used in allocating the metadata for the pool
> > > itself.  That is currently hardcoded to GFP_KERNEL.
> > > 
> > > zswap calls zs_create_pool() at swapon time which is done
> > > in atomic context, resulting in a "might sleep" warning.
> > > 
> > > This patch changes the meaning of the flags argument in
> > > zs_create_pool() to mean the flags for the metadata allocation,
> > > and adds a flags argument to zs_malloc that will be used for
> > > memory pool growth if required.
> > 
> > As I mentioned, I'm not strongly against with this patch but it
> > should be last resort in case of not being able to address
> > frontswap's init routine's dependency with swap_lock.
> > 
> > I sent a patch and am waiting reply of Konrand or Dan.
> > If we can fix frontswap, it would be better rather than
> > changing zsmalloc.
> 
> Could you point me to the subject/title of it please? Thanks.

I am very happy if you review it.

https://lkml.org/lkml/2013/1/27/262

Thanks.

> 
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org.  For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

-- 
Kind regards,
Minchan Kim

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 1/4] staging: zsmalloc: add gfp flags to zs_create_pool
  2013-01-28 17:01     ` Seth Jennings
@ 2013-01-28 23:38       ` Minchan Kim
  0 siblings, 0 replies; 26+ messages in thread
From: Minchan Kim @ 2013-01-28 23:38 UTC (permalink / raw)
  To: Seth Jennings
  Cc: Greg Kroah-Hartman, Andrew Morton, Dan Magenheimer,
	Konrad Rzeszutek Wilk, Nitin Gupta, Robert Jennings, linux-mm,
	devel, linux-kernel

On Mon, Jan 28, 2013 at 11:01:28AM -0600, Seth Jennings wrote:
> On 01/27/2013 09:39 PM, Minchan Kim wrote:
> > Hi Seth,
> > 
> > On Fri, Jan 25, 2013 at 11:46:15AM -0600, Seth Jennings wrote:
> >> zs_create_pool() currently takes a gfp flags argument
> >> that is used when growing the memory pool.  However
> >> it is not used in allocating the metadata for the pool
> >> itself.  That is currently hardcoded to GFP_KERNEL.
> >>
> >> zswap calls zs_create_pool() at swapon time which is done
> >> in atomic context, resulting in a "might sleep" warning.
> >>
> >> This patch changes the meaning of the flags argument in
> >> zs_create_pool() to mean the flags for the metadata allocation,
> >> and adds a flags argument to zs_malloc that will be used for
> >> memory pool growth if required.
> > 
> > As I mentioned, I'm not strongly against with this patch but it
> > should be last resort in case of not being able to address
> > frontswap's init routine's dependency with swap_lock.
> > 
> > I sent a patch and am waiting reply of Konrand or Dan.
> > If we can fix frontswap, it would be better rather than
> > changing zsmalloc.
> 
> I agree that moving the call to frontswap_init() out of the swap_lock
> would be a good thing.  However, it doesn't mean that we still
> shouldn't allow the users to control the gfp mask for the allocation
> done by zs_create_pool(). While moving the frontswap_init() outside
> the lock removes the _need_ for this patch, I think that is it good
> API design to allow the user to specify the gfp mask.

I agree but we can do it when we have needs.
If we can remove swap_lock dependency of frontswap, your needs would go away
so we could add gfp argument next time if someone give us their needs.

> 
> Seth
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/

-- 
Kind regards,
Minchan Kim

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 0/4] staging: zsmalloc: various cleanups/improvments
  2013-01-28 17:07   ` Seth Jennings
@ 2013-01-28 23:44     ` Minchan Kim
  0 siblings, 0 replies; 26+ messages in thread
From: Minchan Kim @ 2013-01-28 23:44 UTC (permalink / raw)
  To: Seth Jennings
  Cc: Greg Kroah-Hartman, Andrew Morton, Dan Magenheimer,
	Konrad Rzeszutek Wilk, Nitin Gupta, Robert Jennings, linux-mm,
	devel, linux-kernel

On Mon, Jan 28, 2013 at 11:07:10AM -0600, Seth Jennings wrote:
> On 01/27/2013 09:47 PM, Minchan Kim wrote:
> > Hi Seth,
> > 
> > On Fri, Jan 25, 2013 at 11:46:14AM -0600, Seth Jennings wrote:
> >> These patches are the first 4 patches of the zswap patchset I
> >> sent out previously.  Some recent commits to zsmalloc and
> >> zcache in staging-next forced a rebase. While I was at it, Nitin
> >> (zsmalloc maintainer) requested I break these 4 patches out from
> >> the zswap patchset, since they stand on their own.
> > 
> > [2/4] and [4/4] is okay to merge current zsmalloc in staging but
> > [1/4] and [3/4] is dependent on zswap so it should be part of
> > zswap patchset.
> 
> Just to clarify, patches 1 and 3 are _not_ dependent on zswap.  They
> just introduce changes that are only needed by zswap.

I don't think so. If zswap might be not merged, we don't need [1, 3]
at the moment. You could argue that [1, 3] make zsmalloc more flexible
and I agree. BUT I want it when we have needs. It would be not too late.
So [1,3] should be part of zswap patchset.

> 
> Seth
> 
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org.  For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

-- 
Kind regards,
Minchan Kim

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 2/4] staging: zsmalloc: remove unused pool name
  2013-01-25 17:46 ` [PATCH 2/4] staging: zsmalloc: remove unused pool name Seth Jennings
  2013-01-28  3:40   ` Minchan Kim
@ 2013-01-30  4:16   ` Greg Kroah-Hartman
  2013-01-30 15:36     ` [PATCH] " Seth Jennings
  1 sibling, 1 reply; 26+ messages in thread
From: Greg Kroah-Hartman @ 2013-01-30  4:16 UTC (permalink / raw)
  To: Seth Jennings
  Cc: devel, Dan Magenheimer, Konrad Rzeszutek Wilk, linux-kernel,
	linux-mm, Minchan Kim, Andrew Morton, Robert Jennings,
	Nitin Gupta

On Fri, Jan 25, 2013 at 11:46:16AM -0600, Seth Jennings wrote:
> zs_create_pool() currently takes a name argument which is
> never used in any useful way.
> 
> This patch removes it.
> 
> Acked-by: Nitin Gupta <ngupta@vflare.org>
> Acked-by: Minchan Kim <minchan@kernel.org>
> Signed-off-by: Seth Jennnings <sjenning@linux.vnet.ibm.com>
> Acked-by: Dan Magenheimer <dan.magenheimer@oracle.com>
> ---
>  drivers/staging/zram/zram_drv.c          |    2 +-
>  drivers/staging/zsmalloc/zsmalloc-main.c |   11 +++--------
>  drivers/staging/zsmalloc/zsmalloc.h      |    2 +-
>  3 files changed, 5 insertions(+), 10 deletions(-)

As I'm not taking patch 1/4, this patch doesn't apply, sorry.

greg k-h

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 0/4] staging: zsmalloc: various cleanups/improvments
  2013-01-28  3:47 ` [PATCH 0/4] staging: zsmalloc: various cleanups/improvments Minchan Kim
  2013-01-28 17:07   ` Seth Jennings
@ 2013-01-30  4:17   ` Greg Kroah-Hartman
  1 sibling, 0 replies; 26+ messages in thread
From: Greg Kroah-Hartman @ 2013-01-30  4:17 UTC (permalink / raw)
  To: Minchan Kim
  Cc: Seth Jennings, devel, Dan Magenheimer, Konrad Rzeszutek Wilk,
	linux-kernel, linux-mm, Andrew Morton, Robert Jennings,
	Nitin Gupta

On Mon, Jan 28, 2013 at 12:47:40PM +0900, Minchan Kim wrote:
> Hi Seth,
> 
> On Fri, Jan 25, 2013 at 11:46:14AM -0600, Seth Jennings wrote:
> > These patches are the first 4 patches of the zswap patchset I
> > sent out previously.  Some recent commits to zsmalloc and
> > zcache in staging-next forced a rebase. While I was at it, Nitin
> > (zsmalloc maintainer) requested I break these 4 patches out from
> > the zswap patchset, since they stand on their own.
> 
> [2/4] and [4/4] is okay to merge current zsmalloc in staging but
> [1/4] and [3/4] is dependent on zswap so it should be part of
> zswap patchset.

I tried to apply patches 2 and 4, but 2 didn't work, so I only applied
4/4.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH] staging: zsmalloc: remove unused pool name
  2013-01-30  4:16   ` Greg Kroah-Hartman
@ 2013-01-30 15:36     ` Seth Jennings
  2013-01-30 15:41       ` Seth Jennings
  0 siblings, 1 reply; 26+ messages in thread
From: Seth Jennings @ 2013-01-30 15:36 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Seth Jennings, Andrew Morton, Dan Magenheimer,
	Konrad Rzeszutek Wilk, Nitin Gupta, Minchan Kim, Robert Jennings,
	linux-mm, devel, linux-kernel

zs_create_pool() currently takes a name argument which is
never used in any useful way.

This patch removes it.

Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
---
Greg, this patch is 2/4 that didn't apply before. It is rebased
on your staging tree as of this morning.

 drivers/staging/zram/zram_drv.c          |  2 +-
 drivers/staging/zsmalloc/zsmalloc-main.c | 10 ++--------
 drivers/staging/zsmalloc/zsmalloc.h      |  2 +-
 3 files changed, 4 insertions(+), 10 deletions(-)

diff --git a/drivers/staging/zram/zram_drv.c b/drivers/staging/zram/zram_drv.c
index 77a3f0d..941b7c6 100644
--- a/drivers/staging/zram/zram_drv.c
+++ b/drivers/staging/zram/zram_drv.c
@@ -575,7 +575,7 @@ int zram_init_device(struct zram *zram)
 	/* zram devices sort of resembles non-rotational disks */
 	queue_flag_set_unlocked(QUEUE_FLAG_NONROT, zram->disk->queue);
 
-	zram->mem_pool = zs_create_pool("zram", GFP_NOIO | __GFP_HIGHMEM);
+	zram->mem_pool = zs_create_pool(GFP_NOIO | __GFP_HIGHMEM);
 	if (!zram->mem_pool) {
 		pr_err("Error creating memory pool\n");
 		ret = -ENOMEM;
diff --git a/drivers/staging/zsmalloc/zsmalloc-main.c b/drivers/staging/zsmalloc/zsmalloc-main.c
index 4666609..06f73a9 100644
--- a/drivers/staging/zsmalloc/zsmalloc-main.c
+++ b/drivers/staging/zsmalloc/zsmalloc-main.c
@@ -207,7 +207,6 @@ struct zs_pool {
 	struct size_class size_class[ZS_SIZE_CLASSES];
 
 	gfp_t flags;	/* allocation flags used when growing pool */
-	const char *name;
 };
 
 /*
@@ -798,8 +797,7 @@ fail:
 
 /**
  * zs_create_pool - Creates an allocation pool to work from.
- * @name: name of the pool to be created
- * @flags: allocation flags used when growing pool
+ * @flags: allocation flags used to allocate pool metadata
  *
  * This function must be called before anything when using
  * the zsmalloc allocator.
@@ -807,14 +805,11 @@ fail:
  * On success, a pointer to the newly created pool is returned,
  * otherwise NULL.
  */
-struct zs_pool *zs_create_pool(const char *name, gfp_t flags)
+struct zs_pool *zs_create_pool(gfp_t flags)
 {
 	int i, ovhd_size;
 	struct zs_pool *pool;
 
-	if (!name)
-		return NULL;
-
 	ovhd_size = roundup(sizeof(*pool), PAGE_SIZE);
 	pool = kzalloc(ovhd_size, GFP_KERNEL);
 	if (!pool)
@@ -837,7 +832,6 @@ struct zs_pool *zs_create_pool(const char *name, gfp_t flags)
 	}
 
 	pool->flags = flags;
-	pool->name = name;
 
 	return pool;
 }
diff --git a/drivers/staging/zsmalloc/zsmalloc.h b/drivers/staging/zsmalloc/zsmalloc.h
index de2e8bf..46dbd05 100644
--- a/drivers/staging/zsmalloc/zsmalloc.h
+++ b/drivers/staging/zsmalloc/zsmalloc.h
@@ -28,7 +28,7 @@ enum zs_mapmode {
 
 struct zs_pool;
 
-struct zs_pool *zs_create_pool(const char *name, gfp_t flags);
+struct zs_pool *zs_create_pool(gfp_t flags);
 void zs_destroy_pool(struct zs_pool *pool);
 
 unsigned long zs_malloc(struct zs_pool *pool, size_t size);
-- 
1.8.1.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* Re: [PATCH] staging: zsmalloc: remove unused pool name
  2013-01-30 15:36     ` [PATCH] " Seth Jennings
@ 2013-01-30 15:41       ` Seth Jennings
  2013-01-30 17:21         ` Greg Kroah-Hartman
  0 siblings, 1 reply; 26+ messages in thread
From: Seth Jennings @ 2013-01-30 15:41 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Andrew Morton, Dan Magenheimer, Konrad Rzeszutek Wilk,
	Nitin Gupta, Minchan Kim, Robert Jennings, linux-mm, devel,
	linux-kernel

On 01/30/2013 09:36 AM, Seth Jennings wrote:> zs_create_pool()
currently takes a name argument which is
> never used in any useful way.
>
> This patch removes it.
>
> Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>

Crud, forgot the Acks...

Acked-by: Nitin Gupta <ngupta@vflare.org>
Acked-by: Rik van Riel <riel@redhat.com>

Thanks,
Seth


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] staging: zsmalloc: remove unused pool name
  2013-01-30 15:41       ` Seth Jennings
@ 2013-01-30 17:21         ` Greg Kroah-Hartman
  2013-01-30 17:29           ` Konrad Rzeszutek Wilk
  2013-01-30 17:33           ` Seth Jennings
  0 siblings, 2 replies; 26+ messages in thread
From: Greg Kroah-Hartman @ 2013-01-30 17:21 UTC (permalink / raw)
  To: Seth Jennings
  Cc: devel, Dan Magenheimer, Konrad Rzeszutek Wilk, linux-kernel,
	linux-mm, Minchan Kim, Andrew Morton, Robert Jennings,
	Nitin Gupta

On Wed, Jan 30, 2013 at 09:41:55AM -0600, Seth Jennings wrote:
> On 01/30/2013 09:36 AM, Seth Jennings wrote:> zs_create_pool()
> currently takes a name argument which is
> > never used in any useful way.
> >
> > This patch removes it.
> >
> > Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
> 
> Crud, forgot the Acks...
> 
> Acked-by: Nitin Gupta <ngupta@vflare.org>
> Acked-by: Rik van Riel <riel@redhat.com>

{sigh} you just made me have to edit your patch by hand, you now owe me
a beer...


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] staging: zsmalloc: remove unused pool name
  2013-01-30 17:21         ` Greg Kroah-Hartman
@ 2013-01-30 17:29           ` Konrad Rzeszutek Wilk
  2013-01-31  5:32             ` Greg Kroah-Hartman
  2013-01-30 17:33           ` Seth Jennings
  1 sibling, 1 reply; 26+ messages in thread
From: Konrad Rzeszutek Wilk @ 2013-01-30 17:29 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Seth Jennings, devel, Dan Magenheimer, linux-kernel, linux-mm,
	Minchan Kim, Andrew Morton, Robert Jennings, Nitin Gupta

On Wed, Jan 30, 2013 at 06:21:59PM +0100, Greg Kroah-Hartman wrote:
> On Wed, Jan 30, 2013 at 09:41:55AM -0600, Seth Jennings wrote:
> > On 01/30/2013 09:36 AM, Seth Jennings wrote:> zs_create_pool()
> > currently takes a name argument which is
> > > never used in any useful way.
> > >
> > > This patch removes it.
> > >
> > > Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
> > 
> > Crud, forgot the Acks...
> > 
> > Acked-by: Nitin Gupta <ngupta@vflare.org>
> > Acked-by: Rik van Riel <riel@redhat.com>
> 
> {sigh} you just made me have to edit your patch by hand, you now owe me
> a beer...
> 
Should we codify that :-)


diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
index c379a2a..f879c60 100644
--- a/Documentation/SubmittingPatches
+++ b/Documentation/SubmittingPatches
@@ -94,6 +94,7 @@ includes updates for subsystem X.  Please apply."
 The maintainer will thank you if you write your patch description in a
 form which can be easily pulled into Linux's source code management
 system, git, as a "commit log".  See #15, below.
+If the maintainer has to hand-edit your patch, you owe them a beer.
 
 If your description starts to get long, that's a sign that you probably
 need to split up your patch.  See #3, next.

^ permalink raw reply related	[flat|nested] 26+ messages in thread

* Re: [PATCH] staging: zsmalloc: remove unused pool name
  2013-01-30 17:21         ` Greg Kroah-Hartman
  2013-01-30 17:29           ` Konrad Rzeszutek Wilk
@ 2013-01-30 17:33           ` Seth Jennings
  1 sibling, 0 replies; 26+ messages in thread
From: Seth Jennings @ 2013-01-30 17:33 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: devel, Dan Magenheimer, Konrad Rzeszutek Wilk, linux-kernel,
	linux-mm, Minchan Kim, Andrew Morton, Robert Jennings,
	Nitin Gupta

On 01/30/2013 11:21 AM, Greg Kroah-Hartman wrote:
> On Wed, Jan 30, 2013 at 09:41:55AM -0600, Seth Jennings wrote:
>> On 01/30/2013 09:36 AM, Seth Jennings wrote:> zs_create_pool()
>> currently takes a name argument which is
>>> never used in any useful way.
>>>
>>> This patch removes it.
>>>
>>> Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
>>
>> Crud, forgot the Acks...
>>
>> Acked-by: Nitin Gupta <ngupta@vflare.org>
>> Acked-by: Rik van Riel <riel@redhat.com>
> 
> {sigh} you just made me have to edit your patch by hand, you now owe me
> a beer...
> 

Now I owe you a beer and a keyboard.

https://plus.google.com/111049168280159033135/posts/YqyTxk3ujZ8

I'll try to get my act together.

Thanks,
Seth


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] staging: zsmalloc: remove unused pool name
  2013-01-30 17:29           ` Konrad Rzeszutek Wilk
@ 2013-01-31  5:32             ` Greg Kroah-Hartman
  2013-02-01  2:11               ` Konrad Rzeszutek Wilk
  0 siblings, 1 reply; 26+ messages in thread
From: Greg Kroah-Hartman @ 2013-01-31  5:32 UTC (permalink / raw)
  To: Konrad Rzeszutek Wilk
  Cc: Seth Jennings, devel, Dan Magenheimer, linux-kernel, linux-mm,
	Minchan Kim, Andrew Morton, Robert Jennings, Nitin Gupta

On Wed, Jan 30, 2013 at 12:29:57PM -0500, Konrad Rzeszutek Wilk wrote:
> On Wed, Jan 30, 2013 at 06:21:59PM +0100, Greg Kroah-Hartman wrote:
> > On Wed, Jan 30, 2013 at 09:41:55AM -0600, Seth Jennings wrote:
> > > On 01/30/2013 09:36 AM, Seth Jennings wrote:> zs_create_pool()
> > > currently takes a name argument which is
> > > > never used in any useful way.
> > > >
> > > > This patch removes it.
> > > >
> > > > Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
> > > 
> > > Crud, forgot the Acks...
> > > 
> > > Acked-by: Nitin Gupta <ngupta@vflare.org>
> > > Acked-by: Rik van Riel <riel@redhat.com>
> > 
> > {sigh} you just made me have to edit your patch by hand, you now owe me
> > a beer...
> > 
> Should we codify that :-)
> 
> 
> diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
> index c379a2a..f879c60 100644
> --- a/Documentation/SubmittingPatches
> +++ b/Documentation/SubmittingPatches
> @@ -94,6 +94,7 @@ includes updates for subsystem X.  Please apply."
>  The maintainer will thank you if you write your patch description in a
>  form which can be easily pulled into Linux's source code management
>  system, git, as a "commit log".  See #15, below.
> +If the maintainer has to hand-edit your patch, you owe them a beer.
>  
>  If your description starts to get long, that's a sign that you probably
>  need to split up your patch.  See #3, next.

Yes we do need to codify this, but let's be fair, not everyone likes
beer:

diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
index c379a2a..d1bec01 100644
--- a/Documentation/SubmittingPatches
+++ b/Documentation/SubmittingPatches
@@ -93,7 +93,9 @@ includes updates for subsystem X.  Please apply."
 
 The maintainer will thank you if you write your patch description in a
 form which can be easily pulled into Linux's source code management
-system, git, as a "commit log".  See #15, below.
+system, git, as a "commit log".  See #15, below.  If the maintainer has
+to hand-edit your patch, you owe them the beverage of their choice the
+next time you see them.
 
 If your description starts to get long, that's a sign that you probably
 need to split up your patch.  See #3, next.

^ permalink raw reply related	[flat|nested] 26+ messages in thread

* Re: [PATCH] staging: zsmalloc: remove unused pool name
  2013-01-31  5:32             ` Greg Kroah-Hartman
@ 2013-02-01  2:11               ` Konrad Rzeszutek Wilk
  0 siblings, 0 replies; 26+ messages in thread
From: Konrad Rzeszutek Wilk @ 2013-02-01  2:11 UTC (permalink / raw)
  To: Greg Kroah-Hartman, torvalds
  Cc: Seth Jennings, devel, Dan Magenheimer, linux-kernel, linux-mm,
	Minchan Kim, Andrew Morton, Robert Jennings, Nitin Gupta

> > > {sigh} you just made me have to edit your patch by hand, you now owe me
> > > a beer...
> > > 
> > Should we codify that :-)
> > 
> > 
> > diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
> > index c379a2a..f879c60 100644
> > --- a/Documentation/SubmittingPatches
> > +++ b/Documentation/SubmittingPatches
> > @@ -94,6 +94,7 @@ includes updates for subsystem X.  Please apply."
> >  The maintainer will thank you if you write your patch description in a
> >  form which can be easily pulled into Linux's source code management
> >  system, git, as a "commit log".  See #15, below.
> > +If the maintainer has to hand-edit your patch, you owe them a beer.
> >  
> >  If your description starts to get long, that's a sign that you probably
> >  need to split up your patch.  See #3, next.
> 
> Yes we do need to codify this, but let's be fair, not everyone likes
> beer:
> 
> diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
> index c379a2a..d1bec01 100644
> --- a/Documentation/SubmittingPatches
> +++ b/Documentation/SubmittingPatches
> @@ -93,7 +93,9 @@ includes updates for subsystem X.  Please apply."
>  
>  The maintainer will thank you if you write your patch description in a
>  form which can be easily pulled into Linux's source code management
> -system, git, as a "commit log".  See #15, below.
> +system, git, as a "commit log".  See #15, below.  If the maintainer has
> +to hand-edit your patch, you owe them the beverage of their choice the
> +next time you see them.
>  
>  If your description starts to get long, that's a sign that you probably
>  need to split up your patch.  See #3, next.

Does that mean you owe Linus a whiskey bottle since you didn't properly
sign this patch :-)

^ permalink raw reply	[flat|nested] 26+ messages in thread

* RE: [PATCH 0/4] staging: zsmalloc: various cleanups/improvments
       [not found] <<1359135978-15119-1-git-send-email-sjenning@linux.vnet.ibm.com>
@ 2013-01-25 23:33 ` Dan Magenheimer
  0 siblings, 0 replies; 26+ messages in thread
From: Dan Magenheimer @ 2013-01-25 23:33 UTC (permalink / raw)
  To: Seth Jennings, Greg Kroah-Hartman
  Cc: Andrew Morton, Dan Magenheimer, Konrad Rzeszutek Wilk,
	Nitin Gupta, Minchan Kim, Robert Jennings, linux-mm, devel,
	linux-kernel

> From: Seth Jennings [mailto:sjenning@linux.vnet.ibm.com]
> Subject: [PATCH 0/4] staging: zsmalloc: various cleanups/improvments
> 
> These patches are the first 4 patches of the zswap patchset I
> sent out previously.  Some recent commits to zsmalloc and
> zcache in staging-next forced a rebase. While I was at it, Nitin
> (zsmalloc maintainer) requested I break these 4 patches out from
> the zswap patchset, since they stand on their own.
> 
> All are already Acked-by Nitin.
> 
> Based on staging-next as of today.
> 
> Seth Jennings (4):
>   staging: zsmalloc: add gfp flags to zs_create_pool
>   staging: zsmalloc: remove unused pool name
>   staging: zsmalloc: add page alloc/free callbacks
>   staging: zsmalloc: make CLASS_DELTA relative to PAGE_SIZE
> 
>  drivers/staging/zram/zram_drv.c          |    4 +-
>  drivers/staging/zsmalloc/zsmalloc-main.c |   60 ++++++++++++++++++------------
>  drivers/staging/zsmalloc/zsmalloc.h      |   10 ++++-
>  3 files changed, 47 insertions(+), 27 deletions(-)

FWIW, please add my ack to all the patches.  I'm happy
to see zsmalloc move forward.   I'm a bit skeptical
that it will ever be capable of doing everything we
would like it to do, but am eager to see if it can.

Acked-by: Dan Magenheimer <dan.magenheimer@oracle.com>

^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2013-02-01  2:12 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-01-25 17:46 [PATCH 0/4] staging: zsmalloc: various cleanups/improvments Seth Jennings
2013-01-25 17:46 ` [PATCH 1/4] staging: zsmalloc: add gfp flags to zs_create_pool Seth Jennings
2013-01-28  3:39   ` Minchan Kim
2013-01-28 15:16     ` Konrad Rzeszutek Wilk
2013-01-28 23:33       ` Minchan Kim
2013-01-28 17:01     ` Seth Jennings
2013-01-28 23:38       ` Minchan Kim
2013-01-25 17:46 ` [PATCH 2/4] staging: zsmalloc: remove unused pool name Seth Jennings
2013-01-28  3:40   ` Minchan Kim
2013-01-30  4:16   ` Greg Kroah-Hartman
2013-01-30 15:36     ` [PATCH] " Seth Jennings
2013-01-30 15:41       ` Seth Jennings
2013-01-30 17:21         ` Greg Kroah-Hartman
2013-01-30 17:29           ` Konrad Rzeszutek Wilk
2013-01-31  5:32             ` Greg Kroah-Hartman
2013-02-01  2:11               ` Konrad Rzeszutek Wilk
2013-01-30 17:33           ` Seth Jennings
2013-01-25 17:46 ` [PATCH 3/4] staging: zsmalloc: add page alloc/free callbacks Seth Jennings
2013-01-28  3:42   ` Minchan Kim
2013-01-25 17:46 ` [PATCH 4/4] staging: zsmalloc: make CLASS_DELTA relative to PAGE_SIZE Seth Jennings
2013-01-28  3:44   ` Minchan Kim
2013-01-28  3:47 ` [PATCH 0/4] staging: zsmalloc: various cleanups/improvments Minchan Kim
2013-01-28 17:07   ` Seth Jennings
2013-01-28 23:44     ` Minchan Kim
2013-01-30  4:17   ` Greg Kroah-Hartman
     [not found] <<1359135978-15119-1-git-send-email-sjenning@linux.vnet.ibm.com>
2013-01-25 23:33 ` Dan Magenheimer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).