summaryrefslogtreecommitdiffstats
path: root/drivers/block
diff options
context:
space:
mode:
authorMinchan Kim <minchan@kernel.org>2017-05-03 17:55:47 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-05-03 18:52:11 -0400
commitbeb6602cf87abee547b2692031185111f625153a (patch)
treedceb4508ddb5ed80f7cd2ee25d00448f01bc9f98 /drivers/block
parent86c49814d449ebc51c7d455ac8e3d17b9fa702eb (diff)
zram: remove zram_meta structure
It's redundant now. Instead, remove it and use zram structure directly. Link: http://lkml.kernel.org/r/1492052365-16169-5-git-send-email-minchan@kernel.org Signed-off-by: Minchan Kim <minchan@kernel.org> Cc: Hannes Reinecke <hare@suse.com> Cc: Johannes Thumshirn <jthumshirn@suse.de> Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/block')
-rw-r--r--drivers/block/zram/zram_drv.c189
-rw-r--r--drivers/block/zram/zram_drv.h6
2 files changed, 78 insertions, 117 deletions
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index aac48ff69618..c674d23539b1 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -58,46 +58,46 @@ static inline struct zram *dev_to_zram(struct device *dev)
58} 58}
59 59
60/* flag operations require table entry bit_spin_lock() being held */ 60/* flag operations require table entry bit_spin_lock() being held */
61static int zram_test_flag(struct zram_meta *meta, u32 index, 61static int zram_test_flag(struct zram *zram, u32 index,
62 enum zram_pageflags flag) 62 enum zram_pageflags flag)
63{ 63{
64 return meta->table[index].value & BIT(flag); 64 return zram->table[index].value & BIT(flag);
65} 65}
66 66
67static void zram_set_flag(struct zram_meta *meta, u32 index, 67static void zram_set_flag(struct zram *zram, u32 index,
68 enum zram_pageflags flag) 68 enum zram_pageflags flag)
69{ 69{
70 meta->table[index].value |= BIT(flag); 70 zram->table[index].value |= BIT(flag);
71} 71}
72 72
73static void zram_clear_flag(struct zram_meta *meta, u32 index, 73static void zram_clear_flag(struct zram *zram, u32 index,
74 enum zram_pageflags flag) 74 enum zram_pageflags flag)
75{ 75{
76 meta->table[index].value &= ~BIT(flag); 76 zram->table[index].value &= ~BIT(flag);
77} 77}
78 78
79static inline void zram_set_element(struct zram_meta *meta, u32 index, 79static inline void zram_set_element(struct zram *zram, u32 index,
80 unsigned long element) 80 unsigned long element)
81{ 81{
82 meta->table[index].element = element; 82 zram->table[index].element = element;
83} 83}
84 84
85static inline void zram_clear_element(struct zram_meta *meta, u32 index) 85static inline void zram_clear_element(struct zram *zram, u32 index)
86{ 86{
87 meta->table[index].element = 0; 87 zram->table[index].element = 0;
88} 88}
89 89
90static size_t zram_get_obj_size(struct zram_meta *meta, u32 index) 90static size_t zram_get_obj_size(struct zram *zram, u32 index)
91{ 91{
92 return meta->table[index].value & (BIT(ZRAM_FLAG_SHIFT) - 1); 92 return zram->table[index].value & (BIT(ZRAM_FLAG_SHIFT) - 1);
93} 93}
94 94
95static void zram_set_obj_size(struct zram_meta *meta, 95static void zram_set_obj_size(struct zram *zram,
96 u32 index, size_t size) 96 u32 index, size_t size)
97{ 97{
98 unsigned long flags = meta->table[index].value >> ZRAM_FLAG_SHIFT; 98 unsigned long flags = zram->table[index].value >> ZRAM_FLAG_SHIFT;
99 99
100 meta->table[index].value = (flags << ZRAM_FLAG_SHIFT) | size; 100 zram->table[index].value = (flags << ZRAM_FLAG_SHIFT) | size;
101} 101}
102 102
103#if PAGE_SIZE != 4096 103#if PAGE_SIZE != 4096
@@ -250,9 +250,8 @@ static ssize_t mem_used_max_store(struct device *dev,
250 250
251 down_read(&zram->init_lock); 251 down_read(&zram->init_lock);
252 if (init_done(zram)) { 252 if (init_done(zram)) {
253 struct zram_meta *meta = zram->meta;
254 atomic_long_set(&zram->stats.max_used_pages, 253 atomic_long_set(&zram->stats.max_used_pages,
255 zs_get_total_pages(meta->mem_pool)); 254 zs_get_total_pages(zram->mem_pool));
256 } 255 }
257 up_read(&zram->init_lock); 256 up_read(&zram->init_lock);
258 257
@@ -325,7 +324,6 @@ static ssize_t compact_store(struct device *dev,
325 struct device_attribute *attr, const char *buf, size_t len) 324 struct device_attribute *attr, const char *buf, size_t len)
326{ 325{
327 struct zram *zram = dev_to_zram(dev); 326 struct zram *zram = dev_to_zram(dev);
328 struct zram_meta *meta;
329 327
330 down_read(&zram->init_lock); 328 down_read(&zram->init_lock);
331 if (!init_done(zram)) { 329 if (!init_done(zram)) {
@@ -333,8 +331,7 @@ static ssize_t compact_store(struct device *dev,
333 return -EINVAL; 331 return -EINVAL;
334 } 332 }
335 333
336 meta = zram->meta; 334 zs_compact(zram->mem_pool);
337 zs_compact(meta->mem_pool);
338 up_read(&zram->init_lock); 335 up_read(&zram->init_lock);
339 336
340 return len; 337 return len;
@@ -371,8 +368,8 @@ static ssize_t mm_stat_show(struct device *dev,
371 368
372 down_read(&zram->init_lock); 369 down_read(&zram->init_lock);
373 if (init_done(zram)) { 370 if (init_done(zram)) {
374 mem_used = zs_get_total_pages(zram->meta->mem_pool); 371 mem_used = zs_get_total_pages(zram->mem_pool);
375 zs_pool_stats(zram->meta->mem_pool, &pool_stats); 372 zs_pool_stats(zram->mem_pool, &pool_stats);
376 } 373 }
377 374
378 orig_size = atomic64_read(&zram->stats.pages_stored); 375 orig_size = atomic64_read(&zram->stats.pages_stored);
@@ -415,32 +412,26 @@ static DEVICE_ATTR_RO(debug_stat);
415 412
416static void zram_slot_lock(struct zram *zram, u32 index) 413static void zram_slot_lock(struct zram *zram, u32 index)
417{ 414{
418 struct zram_meta *meta = zram->meta; 415 bit_spin_lock(ZRAM_ACCESS, &zram->table[index].value);
419
420 bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value);
421} 416}
422 417
423static void zram_slot_unlock(struct zram *zram, u32 index) 418static void zram_slot_unlock(struct zram *zram, u32 index)
424{ 419{
425 struct zram_meta *meta = zram->meta; 420 bit_spin_unlock(ZRAM_ACCESS, &zram->table[index].value);
426
427 bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value);
428} 421}
429 422
430static bool zram_same_page_read(struct zram *zram, u32 index, 423static bool zram_same_page_read(struct zram *zram, u32 index,
431 struct page *page, 424 struct page *page,
432 unsigned int offset, unsigned int len) 425 unsigned int offset, unsigned int len)
433{ 426{
434 struct zram_meta *meta = zram->meta;
435
436 zram_slot_lock(zram, index); 427 zram_slot_lock(zram, index);
437 if (unlikely(!meta->table[index].handle) || 428 if (unlikely(!zram->table[index].handle) ||
438 zram_test_flag(meta, index, ZRAM_SAME)) { 429 zram_test_flag(zram, index, ZRAM_SAME)) {
439 void *mem; 430 void *mem;
440 431
441 zram_slot_unlock(zram, index); 432 zram_slot_unlock(zram, index);
442 mem = kmap_atomic(page); 433 mem = kmap_atomic(page);
443 zram_fill_page(mem + offset, len, meta->table[index].element); 434 zram_fill_page(mem + offset, len, zram->table[index].element);
444 kunmap_atomic(mem); 435 kunmap_atomic(mem);
445 return true; 436 return true;
446 } 437 }
@@ -456,14 +447,12 @@ static bool zram_same_page_write(struct zram *zram, u32 index,
456 void *mem = kmap_atomic(page); 447 void *mem = kmap_atomic(page);
457 448
458 if (page_same_filled(mem, &element)) { 449 if (page_same_filled(mem, &element)) {
459 struct zram_meta *meta = zram->meta;
460
461 kunmap_atomic(mem); 450 kunmap_atomic(mem);
462 /* Free memory associated with this sector now. */ 451 /* Free memory associated with this sector now. */
463 zram_slot_lock(zram, index); 452 zram_slot_lock(zram, index);
464 zram_free_page(zram, index); 453 zram_free_page(zram, index);
465 zram_set_flag(meta, index, ZRAM_SAME); 454 zram_set_flag(zram, index, ZRAM_SAME);
466 zram_set_element(meta, index, element); 455 zram_set_element(zram, index, element);
467 zram_slot_unlock(zram, index); 456 zram_slot_unlock(zram, index);
468 457
469 atomic64_inc(&zram->stats.same_pages); 458 atomic64_inc(&zram->stats.same_pages);
@@ -474,56 +463,44 @@ static bool zram_same_page_write(struct zram *zram, u32 index,
474 return false; 463 return false;
475} 464}
476 465
477static void zram_meta_free(struct zram_meta *meta, u64 disksize) 466static void zram_meta_free(struct zram *zram, u64 disksize)
478{ 467{
479 size_t num_pages = disksize >> PAGE_SHIFT; 468 size_t num_pages = disksize >> PAGE_SHIFT;
480 size_t index; 469 size_t index;
481 470
482 /* Free all pages that are still in this zram device */ 471 /* Free all pages that are still in this zram device */
483 for (index = 0; index < num_pages; index++) { 472 for (index = 0; index < num_pages; index++) {
484 unsigned long handle = meta->table[index].handle; 473 unsigned long handle = zram->table[index].handle;
485 /* 474 /*
486 * No memory is allocated for same element filled pages. 475 * No memory is allocated for same element filled pages.
487 * Simply clear same page flag. 476 * Simply clear same page flag.
488 */ 477 */
489 if (!handle || zram_test_flag(meta, index, ZRAM_SAME)) 478 if (!handle || zram_test_flag(zram, index, ZRAM_SAME))
490 continue; 479 continue;
491 480
492 zs_free(meta->mem_pool, handle); 481 zs_free(zram->mem_pool, handle);
493 } 482 }
494 483
495 zs_destroy_pool(meta->mem_pool); 484 zs_destroy_pool(zram->mem_pool);
496 vfree(meta->table); 485 vfree(zram->table);
497 kfree(meta);
498} 486}
499 487
500static struct zram_meta *zram_meta_alloc(char *pool_name, u64 disksize) 488static bool zram_meta_alloc(struct zram *zram, u64 disksize)
501{ 489{
502 size_t num_pages; 490 size_t num_pages;
503 struct zram_meta *meta = kmalloc(sizeof(*meta), GFP_KERNEL);
504
505 if (!meta)
506 return NULL;
507 491
508 num_pages = disksize >> PAGE_SHIFT; 492 num_pages = disksize >> PAGE_SHIFT;
509 meta->table = vzalloc(num_pages * sizeof(*meta->table)); 493 zram->table = vzalloc(num_pages * sizeof(*zram->table));
510 if (!meta->table) { 494 if (!zram->table)
511 pr_err("Error allocating zram address table\n"); 495 return false;
512 goto out_error;
513 }
514 496
515 meta->mem_pool = zs_create_pool(pool_name); 497 zram->mem_pool = zs_create_pool(zram->disk->disk_name);
516 if (!meta->mem_pool) { 498 if (!zram->mem_pool) {
517 pr_err("Error creating memory pool\n"); 499 vfree(zram->table);
518 goto out_error; 500 return false;
519 } 501 }
520 502
521 return meta; 503 return true;
522
523out_error:
524 vfree(meta->table);
525 kfree(meta);
526 return NULL;
527} 504}
528 505
529/* 506/*
@@ -533,16 +510,15 @@ out_error:
533 */ 510 */
534static void zram_free_page(struct zram *zram, size_t index) 511static void zram_free_page(struct zram *zram, size_t index)
535{ 512{
536 struct zram_meta *meta = zram->meta; 513 unsigned long handle = zram->table[index].handle;
537 unsigned long handle = meta->table[index].handle;
538 514
539 /* 515 /*
540 * No memory is allocated for same element filled pages. 516 * No memory is allocated for same element filled pages.
541 * Simply clear same page flag. 517 * Simply clear same page flag.
542 */ 518 */
543 if (zram_test_flag(meta, index, ZRAM_SAME)) { 519 if (zram_test_flag(zram, index, ZRAM_SAME)) {
544 zram_clear_flag(meta, index, ZRAM_SAME); 520 zram_clear_flag(zram, index, ZRAM_SAME);
545 zram_clear_element(meta, index); 521 zram_clear_element(zram, index);
546 atomic64_dec(&zram->stats.same_pages); 522 atomic64_dec(&zram->stats.same_pages);
547 return; 523 return;
548 } 524 }
@@ -550,14 +526,14 @@ static void zram_free_page(struct zram *zram, size_t index)
550 if (!handle) 526 if (!handle)
551 return; 527 return;
552 528
553 zs_free(meta->mem_pool, handle); 529 zs_free(zram->mem_pool, handle);
554 530
555 atomic64_sub(zram_get_obj_size(meta, index), 531 atomic64_sub(zram_get_obj_size(zram, index),
556 &zram->stats.compr_data_size); 532 &zram->stats.compr_data_size);
557 atomic64_dec(&zram->stats.pages_stored); 533 atomic64_dec(&zram->stats.pages_stored);
558 534
559 meta->table[index].handle = 0; 535 zram->table[index].handle = 0;
560 zram_set_obj_size(meta, index, 0); 536 zram_set_obj_size(zram, index, 0);
561} 537}
562 538
563static int zram_decompress_page(struct zram *zram, struct page *page, u32 index) 539static int zram_decompress_page(struct zram *zram, struct page *page, u32 index)
@@ -566,16 +542,15 @@ static int zram_decompress_page(struct zram *zram, struct page *page, u32 index)
566 unsigned long handle; 542 unsigned long handle;
567 unsigned int size; 543 unsigned int size;
568 void *src, *dst; 544 void *src, *dst;
569 struct zram_meta *meta = zram->meta;
570 545
571 if (zram_same_page_read(zram, index, page, 0, PAGE_SIZE)) 546 if (zram_same_page_read(zram, index, page, 0, PAGE_SIZE))
572 return 0; 547 return 0;
573 548
574 zram_slot_lock(zram, index); 549 zram_slot_lock(zram, index);
575 handle = meta->table[index].handle; 550 handle = zram->table[index].handle;
576 size = zram_get_obj_size(meta, index); 551 size = zram_get_obj_size(zram, index);
577 552
578 src = zs_map_object(meta->mem_pool, handle, ZS_MM_RO); 553 src = zs_map_object(zram->mem_pool, handle, ZS_MM_RO);
579 if (size == PAGE_SIZE) { 554 if (size == PAGE_SIZE) {
580 dst = kmap_atomic(page); 555 dst = kmap_atomic(page);
581 memcpy(dst, src, PAGE_SIZE); 556 memcpy(dst, src, PAGE_SIZE);
@@ -589,7 +564,7 @@ static int zram_decompress_page(struct zram *zram, struct page *page, u32 index)
589 kunmap_atomic(dst); 564 kunmap_atomic(dst);
590 zcomp_stream_put(zram->comp); 565 zcomp_stream_put(zram->comp);
591 } 566 }
592 zs_unmap_object(meta->mem_pool, handle); 567 zs_unmap_object(zram->mem_pool, handle);
593 zram_slot_unlock(zram, index); 568 zram_slot_unlock(zram, index);
594 569
595 /* Should NEVER happen. Return bio error if it does. */ 570 /* Should NEVER happen. Return bio error if it does. */
@@ -641,7 +616,6 @@ static int zram_compress(struct zram *zram, struct zcomp_strm **zstrm,
641 void *src; 616 void *src;
642 unsigned long alloced_pages; 617 unsigned long alloced_pages;
643 unsigned long handle = 0; 618 unsigned long handle = 0;
644 struct zram_meta *meta = zram->meta;
645 619
646compress_again: 620compress_again:
647 src = kmap_atomic(page); 621 src = kmap_atomic(page);
@@ -651,7 +625,7 @@ compress_again:
651 if (unlikely(ret)) { 625 if (unlikely(ret)) {
652 pr_err("Compression failed! err=%d\n", ret); 626 pr_err("Compression failed! err=%d\n", ret);
653 if (handle) 627 if (handle)
654 zs_free(meta->mem_pool, handle); 628 zs_free(zram->mem_pool, handle);
655 return ret; 629 return ret;
656 } 630 }
657 631
@@ -672,7 +646,7 @@ compress_again:
672 * from the slow path and handle has already been allocated. 646 * from the slow path and handle has already been allocated.
673 */ 647 */
674 if (!handle) 648 if (!handle)
675 handle = zs_malloc(meta->mem_pool, comp_len, 649 handle = zs_malloc(zram->mem_pool, comp_len,
676 __GFP_KSWAPD_RECLAIM | 650 __GFP_KSWAPD_RECLAIM |
677 __GFP_NOWARN | 651 __GFP_NOWARN |
678 __GFP_HIGHMEM | 652 __GFP_HIGHMEM |
@@ -680,7 +654,7 @@ compress_again:
680 if (!handle) { 654 if (!handle) {
681 zcomp_stream_put(zram->comp); 655 zcomp_stream_put(zram->comp);
682 atomic64_inc(&zram->stats.writestall); 656 atomic64_inc(&zram->stats.writestall);
683 handle = zs_malloc(meta->mem_pool, comp_len, 657 handle = zs_malloc(zram->mem_pool, comp_len,
684 GFP_NOIO | __GFP_HIGHMEM | 658 GFP_NOIO | __GFP_HIGHMEM |
685 __GFP_MOVABLE); 659 __GFP_MOVABLE);
686 *zstrm = zcomp_stream_get(zram->comp); 660 *zstrm = zcomp_stream_get(zram->comp);
@@ -689,11 +663,11 @@ compress_again:
689 return -ENOMEM; 663 return -ENOMEM;
690 } 664 }
691 665
692 alloced_pages = zs_get_total_pages(meta->mem_pool); 666 alloced_pages = zs_get_total_pages(zram->mem_pool);
693 update_used_max(zram, alloced_pages); 667 update_used_max(zram, alloced_pages);
694 668
695 if (zram->limit_pages && alloced_pages > zram->limit_pages) { 669 if (zram->limit_pages && alloced_pages > zram->limit_pages) {
696 zs_free(meta->mem_pool, handle); 670 zs_free(zram->mem_pool, handle);
697 return -ENOMEM; 671 return -ENOMEM;
698 } 672 }
699 673
@@ -709,7 +683,6 @@ static int __zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index)
709 unsigned int comp_len; 683 unsigned int comp_len;
710 void *src, *dst; 684 void *src, *dst;
711 struct zcomp_strm *zstrm; 685 struct zcomp_strm *zstrm;
712 struct zram_meta *meta = zram->meta;
713 struct page *page = bvec->bv_page; 686 struct page *page = bvec->bv_page;
714 687
715 if (zram_same_page_write(zram, index, page)) 688 if (zram_same_page_write(zram, index, page))
@@ -722,8 +695,7 @@ static int __zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index)
722 return ret; 695 return ret;
723 } 696 }
724 697
725 698 dst = zs_map_object(zram->mem_pool, handle, ZS_MM_WO);
726 dst = zs_map_object(meta->mem_pool, handle, ZS_MM_WO);
727 699
728 src = zstrm->buffer; 700 src = zstrm->buffer;
729 if (comp_len == PAGE_SIZE) 701 if (comp_len == PAGE_SIZE)
@@ -733,7 +705,7 @@ static int __zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index)
733 kunmap_atomic(src); 705 kunmap_atomic(src);
734 706
735 zcomp_stream_put(zram->comp); 707 zcomp_stream_put(zram->comp);
736 zs_unmap_object(meta->mem_pool, handle); 708 zs_unmap_object(zram->mem_pool, handle);
737 709
738 /* 710 /*
739 * Free memory associated with this sector 711 * Free memory associated with this sector
@@ -741,8 +713,8 @@ static int __zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index)
741 */ 713 */
742 zram_slot_lock(zram, index); 714 zram_slot_lock(zram, index);
743 zram_free_page(zram, index); 715 zram_free_page(zram, index);
744 meta->table[index].handle = handle; 716 zram->table[index].handle = handle;
745 zram_set_obj_size(meta, index, comp_len); 717 zram_set_obj_size(zram, index, comp_len);
746 zram_slot_unlock(zram, index); 718 zram_slot_unlock(zram, index);
747 719
748 /* Update stats */ 720 /* Update stats */
@@ -932,10 +904,8 @@ static void zram_slot_free_notify(struct block_device *bdev,
932 unsigned long index) 904 unsigned long index)
933{ 905{
934 struct zram *zram; 906 struct zram *zram;
935 struct zram_meta *meta;
936 907
937 zram = bdev->bd_disk->private_data; 908 zram = bdev->bd_disk->private_data;
938 meta = zram->meta;
939 909
940 zram_slot_lock(zram, index); 910 zram_slot_lock(zram, index);
941 zram_free_page(zram, index); 911 zram_free_page(zram, index);
@@ -983,7 +953,6 @@ out:
983 953
984static void zram_reset_device(struct zram *zram) 954static void zram_reset_device(struct zram *zram)
985{ 955{
986 struct zram_meta *meta;
987 struct zcomp *comp; 956 struct zcomp *comp;
988 u64 disksize; 957 u64 disksize;
989 958
@@ -996,7 +965,6 @@ static void zram_reset_device(struct zram *zram)
996 return; 965 return;
997 } 966 }
998 967
999 meta = zram->meta;
1000 comp = zram->comp; 968 comp = zram->comp;
1001 disksize = zram->disksize; 969 disksize = zram->disksize;
1002 970
@@ -1009,7 +977,7 @@ static void zram_reset_device(struct zram *zram)
1009 977
1010 up_write(&zram->init_lock); 978 up_write(&zram->init_lock);
1011 /* I/O operation under all of CPU are done so let's free */ 979 /* I/O operation under all of CPU are done so let's free */
1012 zram_meta_free(meta, disksize); 980 zram_meta_free(zram, disksize);
1013 zcomp_destroy(comp); 981 zcomp_destroy(comp);
1014} 982}
1015 983
@@ -1018,7 +986,6 @@ static ssize_t disksize_store(struct device *dev,
1018{ 986{
1019 u64 disksize; 987 u64 disksize;
1020 struct zcomp *comp; 988 struct zcomp *comp;
1021 struct zram_meta *meta;
1022 struct zram *zram = dev_to_zram(dev); 989 struct zram *zram = dev_to_zram(dev);
1023 int err; 990 int err;
1024 991
@@ -1026,10 +993,18 @@ static ssize_t disksize_store(struct device *dev,
1026 if (!disksize) 993 if (!disksize)
1027 return -EINVAL; 994 return -EINVAL;
1028 995
996 down_write(&zram->init_lock);
997 if (init_done(zram)) {
998 pr_info("Cannot change disksize for initialized device\n");
999 err = -EBUSY;
1000 goto out_unlock;
1001 }
1002
1029 disksize = PAGE_ALIGN(disksize); 1003 disksize = PAGE_ALIGN(disksize);
1030 meta = zram_meta_alloc(zram->disk->disk_name, disksize); 1004 if (!zram_meta_alloc(zram, disksize)) {
1031 if (!meta) 1005 err = -ENOMEM;
1032 return -ENOMEM; 1006 goto out_unlock;
1007 }
1033 1008
1034 comp = zcomp_create(zram->compressor); 1009 comp = zcomp_create(zram->compressor);
1035 if (IS_ERR(comp)) { 1010 if (IS_ERR(comp)) {
@@ -1039,14 +1014,6 @@ static ssize_t disksize_store(struct device *dev,
1039 goto out_free_meta; 1014 goto out_free_meta;
1040 } 1015 }
1041 1016
1042 down_write(&zram->init_lock);
1043 if (init_done(zram)) {
1044 pr_info("Cannot change disksize for initialized device\n");
1045 err = -EBUSY;
1046 goto out_destroy_comp;
1047 }
1048
1049 zram->meta = meta;
1050 zram->comp = comp; 1017 zram->comp = comp;
1051 zram->disksize = disksize; 1018 zram->disksize = disksize;
1052 set_capacity(zram->disk, zram->disksize >> SECTOR_SHIFT); 1019 set_capacity(zram->disk, zram->disksize >> SECTOR_SHIFT);
@@ -1055,11 +1022,10 @@ static ssize_t disksize_store(struct device *dev,
1055 1022
1056 return len; 1023 return len;
1057 1024
1058out_destroy_comp:
1059 up_write(&zram->init_lock);
1060 zcomp_destroy(comp);
1061out_free_meta: 1025out_free_meta:
1062 zram_meta_free(meta, disksize); 1026 zram_meta_free(zram, disksize);
1027out_unlock:
1028 up_write(&zram->init_lock);
1063 return err; 1029 return err;
1064} 1030}
1065 1031
@@ -1245,7 +1211,6 @@ static int zram_add(void)
1245 goto out_free_disk; 1211 goto out_free_disk;
1246 } 1212 }
1247 strlcpy(zram->compressor, default_compressor, sizeof(zram->compressor)); 1213 strlcpy(zram->compressor, default_compressor, sizeof(zram->compressor));
1248 zram->meta = NULL;
1249 1214
1250 pr_info("Added device: %s\n", zram->disk->disk_name); 1215 pr_info("Added device: %s\n", zram->disk->disk_name);
1251 return device_id; 1216 return device_id;
diff --git a/drivers/block/zram/zram_drv.h b/drivers/block/zram/zram_drv.h
index caeff51f1571..e34e44d02e3e 100644
--- a/drivers/block/zram/zram_drv.h
+++ b/drivers/block/zram/zram_drv.h
@@ -92,13 +92,9 @@ struct zram_stats {
92 atomic64_t writestall; /* no. of write slow paths */ 92 atomic64_t writestall; /* no. of write slow paths */
93}; 93};
94 94
95struct zram_meta { 95struct zram {
96 struct zram_table_entry *table; 96 struct zram_table_entry *table;
97 struct zs_pool *mem_pool; 97 struct zs_pool *mem_pool;
98};
99
100struct zram {
101 struct zram_meta *meta;
102 struct zcomp *comp; 98 struct zcomp *comp;
103 struct gendisk *disk; 99 struct gendisk *disk;
104 /* Prevent concurrent execution of device init */ 100 /* Prevent concurrent execution of device init */