aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/zram
diff options
context:
space:
mode:
authorSeth Jennings <sjenning@linux.vnet.ibm.com>2012-07-02 17:15:52 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-07-09 14:35:00 -0400
commitb74185108668ef966e663878adbad65e03bfcb43 (patch)
tree39e367491f761ba93fbddc56a93f353b021552cc /drivers/staging/zram
parent166cfda752ca22eb6912614993b85f9a997dbd8f (diff)
staging: zsmalloc: add mapping modes
This patch improves mapping performance in zsmalloc by getting usage information from the user in the form of a "mapping mode" and using it to avoid unnecessary copying for objects that span pages. Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/zram')
-rw-r--r--drivers/staging/zram/zram_drv.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/staging/zram/zram_drv.c b/drivers/staging/zram/zram_drv.c
index 706cb625aae..653b074035f 100644
--- a/drivers/staging/zram/zram_drv.c
+++ b/drivers/staging/zram/zram_drv.c
@@ -220,7 +220,8 @@ static int zram_bvec_read(struct zram *zram, struct bio_vec *bvec,
220 uncmem = user_mem; 220 uncmem = user_mem;
221 clen = PAGE_SIZE; 221 clen = PAGE_SIZE;
222 222
223 cmem = zs_map_object(zram->mem_pool, zram->table[index].handle); 223 cmem = zs_map_object(zram->mem_pool, zram->table[index].handle,
224 ZS_MM_RO);
224 225
225 ret = lzo1x_decompress_safe(cmem, zram->table[index].size, 226 ret = lzo1x_decompress_safe(cmem, zram->table[index].size,
226 uncmem, &clen); 227 uncmem, &clen);
@@ -258,7 +259,7 @@ static int zram_read_before_write(struct zram *zram, char *mem, u32 index)
258 return 0; 259 return 0;
259 } 260 }
260 261
261 cmem = zs_map_object(zram->mem_pool, handle); 262 cmem = zs_map_object(zram->mem_pool, handle, ZS_MM_RO);
262 ret = lzo1x_decompress_safe(cmem, zram->table[index].size, 263 ret = lzo1x_decompress_safe(cmem, zram->table[index].size,
263 mem, &clen); 264 mem, &clen);
264 zs_unmap_object(zram->mem_pool, handle); 265 zs_unmap_object(zram->mem_pool, handle);
@@ -351,7 +352,7 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
351 ret = -ENOMEM; 352 ret = -ENOMEM;
352 goto out; 353 goto out;
353 } 354 }
354 cmem = zs_map_object(zram->mem_pool, handle); 355 cmem = zs_map_object(zram->mem_pool, handle, ZS_MM_WO);
355 356
356 memcpy(cmem, src, clen); 357 memcpy(cmem, src, clen);
357 358