2 * Compressed RAM block device
4 * Copyright (C) 2008, 2009, 2010 Nitin Gupta
5 * 2012, 2013 Minchan Kim
7 * This code is released using a dual license strategy: BSD/GPL
8 * You can choose the licence that better fits your requirements.
10 * Released under the terms of 3-clause BSD License
11 * Released under the terms of GNU General Public License Version 2.0
15 #define KMSG_COMPONENT "zram"
16 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
18 #include <linux/module.h>
19 #include <linux/kernel.h>
20 #include <linux/bio.h>
21 #include <linux/bitops.h>
22 #include <linux/blkdev.h>
23 #include <linux/buffer_head.h>
24 #include <linux/device.h>
25 #include <linux/genhd.h>
26 #include <linux/highmem.h>
27 #include <linux/slab.h>
28 #include <linux/backing-dev.h>
29 #include <linux/string.h>
30 #include <linux/vmalloc.h>
31 #include <linux/err.h>
32 #include <linux/idr.h>
33 #include <linux/sysfs.h>
34 #include <linux/debugfs.h>
35 #include <linux/cpuhotplug.h>
39 static DEFINE_IDR(zram_index_idr
);
40 /* idr index must be protected */
41 static DEFINE_MUTEX(zram_index_mutex
);
43 static int zram_major
;
44 static const char *default_compressor
= "lzo";
46 /* Module params (documentation at end) */
47 static unsigned int num_devices
= 1;
49 * Pages that compress to sizes equals or greater than this are stored
50 * uncompressed in memory.
52 static size_t huge_class_size
;
54 static void zram_free_page(struct zram
*zram
, size_t index
);
56 static void zram_slot_lock(struct zram
*zram
, u32 index
)
58 bit_spin_lock(ZRAM_LOCK
, &zram
->table
[index
].value
);
61 static void zram_slot_unlock(struct zram
*zram
, u32 index
)
63 bit_spin_unlock(ZRAM_LOCK
, &zram
->table
[index
].value
);
66 static inline bool init_done(struct zram
*zram
)
68 return zram
->disksize
;
71 static inline bool zram_allocated(struct zram
*zram
, u32 index
)
74 return (zram
->table
[index
].value
>> (ZRAM_FLAG_SHIFT
+ 1)) ||
75 zram
->table
[index
].handle
;
78 static inline struct zram
*dev_to_zram(struct device
*dev
)
80 return (struct zram
*)dev_to_disk(dev
)->private_data
;
83 static unsigned long zram_get_handle(struct zram
*zram
, u32 index
)
85 return zram
->table
[index
].handle
;
88 static void zram_set_handle(struct zram
*zram
, u32 index
, unsigned long handle
)
90 zram
->table
[index
].handle
= handle
;
93 /* flag operations require table entry bit_spin_lock() being held */
94 static bool zram_test_flag(struct zram
*zram
, u32 index
,
95 enum zram_pageflags flag
)
97 return zram
->table
[index
].value
& BIT(flag
);
100 static void zram_set_flag(struct zram
*zram
, u32 index
,
101 enum zram_pageflags flag
)
103 zram
->table
[index
].value
|= BIT(flag
);
106 static void zram_clear_flag(struct zram
*zram
, u32 index
,
107 enum zram_pageflags flag
)
109 zram
->table
[index
].value
&= ~BIT(flag
);
112 static inline void zram_set_element(struct zram
*zram
, u32 index
,
113 unsigned long element
)
115 zram
->table
[index
].element
= element
;
118 static unsigned long zram_get_element(struct zram
*zram
, u32 index
)
120 return zram
->table
[index
].element
;
123 static size_t zram_get_obj_size(struct zram
*zram
, u32 index
)
125 return zram
->table
[index
].value
& (BIT(ZRAM_FLAG_SHIFT
) - 1);
128 static void zram_set_obj_size(struct zram
*zram
,
129 u32 index
, size_t size
)
131 unsigned long flags
= zram
->table
[index
].value
>> ZRAM_FLAG_SHIFT
;
133 zram
->table
[index
].value
= (flags
<< ZRAM_FLAG_SHIFT
) | size
;
136 #if PAGE_SIZE != 4096
137 static inline bool is_partial_io(struct bio_vec
*bvec
)
139 return bvec
->bv_len
!= PAGE_SIZE
;
142 static inline bool is_partial_io(struct bio_vec
*bvec
)
149 * Check if request is within bounds and aligned on zram logical blocks.
151 static inline bool valid_io_request(struct zram
*zram
,
152 sector_t start
, unsigned int size
)
156 /* unaligned request */
157 if (unlikely(start
& (ZRAM_SECTOR_PER_LOGICAL_BLOCK
- 1)))
159 if (unlikely(size
& (ZRAM_LOGICAL_BLOCK_SIZE
- 1)))
162 end
= start
+ (size
>> SECTOR_SHIFT
);
163 bound
= zram
->disksize
>> SECTOR_SHIFT
;
164 /* out of range range */
165 if (unlikely(start
>= bound
|| end
> bound
|| start
> end
))
168 /* I/O request is valid */
172 static void update_position(u32
*index
, int *offset
, struct bio_vec
*bvec
)
174 *index
+= (*offset
+ bvec
->bv_len
) / PAGE_SIZE
;
175 *offset
= (*offset
+ bvec
->bv_len
) % PAGE_SIZE
;
178 static inline void update_used_max(struct zram
*zram
,
179 const unsigned long pages
)
181 unsigned long old_max
, cur_max
;
183 old_max
= atomic_long_read(&zram
->stats
.max_used_pages
);
188 old_max
= atomic_long_cmpxchg(
189 &zram
->stats
.max_used_pages
, cur_max
, pages
);
190 } while (old_max
!= cur_max
);
193 static inline void zram_fill_page(void *ptr
, unsigned long len
,
196 WARN_ON_ONCE(!IS_ALIGNED(len
, sizeof(unsigned long)));
197 memset_l(ptr
, value
, len
/ sizeof(unsigned long));
200 static bool page_same_filled(void *ptr
, unsigned long *element
)
206 page
= (unsigned long *)ptr
;
209 for (pos
= 1; pos
< PAGE_SIZE
/ sizeof(*page
); pos
++) {
210 if (val
!= page
[pos
])
219 static ssize_t
initstate_show(struct device
*dev
,
220 struct device_attribute
*attr
, char *buf
)
223 struct zram
*zram
= dev_to_zram(dev
);
225 down_read(&zram
->init_lock
);
226 val
= init_done(zram
);
227 up_read(&zram
->init_lock
);
229 return scnprintf(buf
, PAGE_SIZE
, "%u\n", val
);
232 static ssize_t
disksize_show(struct device
*dev
,
233 struct device_attribute
*attr
, char *buf
)
235 struct zram
*zram
= dev_to_zram(dev
);
237 return scnprintf(buf
, PAGE_SIZE
, "%llu\n", zram
->disksize
);
240 static ssize_t
mem_limit_store(struct device
*dev
,
241 struct device_attribute
*attr
, const char *buf
, size_t len
)
245 struct zram
*zram
= dev_to_zram(dev
);
247 limit
= memparse(buf
, &tmp
);
248 if (buf
== tmp
) /* no chars parsed, invalid input */
251 down_write(&zram
->init_lock
);
252 zram
->limit_pages
= PAGE_ALIGN(limit
) >> PAGE_SHIFT
;
253 up_write(&zram
->init_lock
);
258 static ssize_t
mem_used_max_store(struct device
*dev
,
259 struct device_attribute
*attr
, const char *buf
, size_t len
)
263 struct zram
*zram
= dev_to_zram(dev
);
265 err
= kstrtoul(buf
, 10, &val
);
269 down_read(&zram
->init_lock
);
270 if (init_done(zram
)) {
271 atomic_long_set(&zram
->stats
.max_used_pages
,
272 zs_get_total_pages(zram
->mem_pool
));
274 up_read(&zram
->init_lock
);
279 #ifdef CONFIG_ZRAM_WRITEBACK
280 static bool zram_wb_enabled(struct zram
*zram
)
282 return zram
->backing_dev
;
285 static void reset_bdev(struct zram
*zram
)
287 struct block_device
*bdev
;
289 if (!zram_wb_enabled(zram
))
293 if (zram
->old_block_size
)
294 set_blocksize(bdev
, zram
->old_block_size
);
295 blkdev_put(bdev
, FMODE_READ
|FMODE_WRITE
|FMODE_EXCL
);
296 /* hope filp_close flush all of IO */
297 filp_close(zram
->backing_dev
, NULL
);
298 zram
->backing_dev
= NULL
;
299 zram
->old_block_size
= 0;
302 kvfree(zram
->bitmap
);
306 static ssize_t
backing_dev_show(struct device
*dev
,
307 struct device_attribute
*attr
, char *buf
)
309 struct zram
*zram
= dev_to_zram(dev
);
310 struct file
*file
= zram
->backing_dev
;
314 down_read(&zram
->init_lock
);
315 if (!zram_wb_enabled(zram
)) {
316 memcpy(buf
, "none\n", 5);
317 up_read(&zram
->init_lock
);
321 p
= file_path(file
, buf
, PAGE_SIZE
- 1);
328 memmove(buf
, p
, ret
);
331 up_read(&zram
->init_lock
);
335 static ssize_t
backing_dev_store(struct device
*dev
,
336 struct device_attribute
*attr
, const char *buf
, size_t len
)
339 struct file
*backing_dev
= NULL
;
341 struct address_space
*mapping
;
342 unsigned int bitmap_sz
, old_block_size
= 0;
343 unsigned long nr_pages
, *bitmap
= NULL
;
344 struct block_device
*bdev
= NULL
;
346 struct zram
*zram
= dev_to_zram(dev
);
348 file_name
= kmalloc(PATH_MAX
, GFP_KERNEL
);
352 down_write(&zram
->init_lock
);
353 if (init_done(zram
)) {
354 pr_info("Can't setup backing device for initialized device\n");
359 strlcpy(file_name
, buf
, len
);
361 backing_dev
= filp_open(file_name
, O_RDWR
|O_LARGEFILE
, 0);
362 if (IS_ERR(backing_dev
)) {
363 err
= PTR_ERR(backing_dev
);
368 mapping
= backing_dev
->f_mapping
;
369 inode
= mapping
->host
;
371 /* Support only block device in this moment */
372 if (!S_ISBLK(inode
->i_mode
)) {
377 bdev
= bdgrab(I_BDEV(inode
));
378 err
= blkdev_get(bdev
, FMODE_READ
| FMODE_WRITE
| FMODE_EXCL
, zram
);
382 nr_pages
= i_size_read(inode
) >> PAGE_SHIFT
;
383 bitmap_sz
= BITS_TO_LONGS(nr_pages
) * sizeof(long);
384 bitmap
= kvzalloc(bitmap_sz
, GFP_KERNEL
);
390 old_block_size
= block_size(bdev
);
391 err
= set_blocksize(bdev
, PAGE_SIZE
);
396 spin_lock_init(&zram
->bitmap_lock
);
398 zram
->old_block_size
= old_block_size
;
400 zram
->backing_dev
= backing_dev
;
401 zram
->bitmap
= bitmap
;
402 zram
->nr_pages
= nr_pages
;
403 up_write(&zram
->init_lock
);
405 pr_info("setup backing device %s\n", file_name
);
414 blkdev_put(bdev
, FMODE_READ
| FMODE_WRITE
| FMODE_EXCL
);
417 filp_close(backing_dev
, NULL
);
419 up_write(&zram
->init_lock
);
426 static unsigned long get_entry_bdev(struct zram
*zram
)
430 spin_lock(&zram
->bitmap_lock
);
431 /* skip 0 bit to confuse zram.handle = 0 */
432 entry
= find_next_zero_bit(zram
->bitmap
, zram
->nr_pages
, 1);
433 if (entry
== zram
->nr_pages
) {
434 spin_unlock(&zram
->bitmap_lock
);
438 set_bit(entry
, zram
->bitmap
);
439 spin_unlock(&zram
->bitmap_lock
);
444 static void put_entry_bdev(struct zram
*zram
, unsigned long entry
)
448 spin_lock(&zram
->bitmap_lock
);
449 was_set
= test_and_clear_bit(entry
, zram
->bitmap
);
450 spin_unlock(&zram
->bitmap_lock
);
451 WARN_ON_ONCE(!was_set
);
454 static void zram_page_end_io(struct bio
*bio
)
456 struct page
*page
= bio_first_page_all(bio
);
458 page_endio(page
, op_is_write(bio_op(bio
)),
459 blk_status_to_errno(bio
->bi_status
));
464 * Returns 1 if the submission is successful.
466 static int read_from_bdev_async(struct zram
*zram
, struct bio_vec
*bvec
,
467 unsigned long entry
, struct bio
*parent
)
471 bio
= bio_alloc(GFP_ATOMIC
, 1);
475 bio
->bi_iter
.bi_sector
= entry
* (PAGE_SIZE
>> 9);
476 bio_set_dev(bio
, zram
->bdev
);
477 if (!bio_add_page(bio
, bvec
->bv_page
, bvec
->bv_len
, bvec
->bv_offset
)) {
483 bio
->bi_opf
= REQ_OP_READ
;
484 bio
->bi_end_io
= zram_page_end_io
;
486 bio
->bi_opf
= parent
->bi_opf
;
487 bio_chain(bio
, parent
);
495 struct work_struct work
;
501 #if PAGE_SIZE != 4096
502 static void zram_sync_read(struct work_struct
*work
)
505 struct zram_work
*zw
= container_of(work
, struct zram_work
, work
);
506 struct zram
*zram
= zw
->zram
;
507 unsigned long entry
= zw
->entry
;
508 struct bio
*bio
= zw
->bio
;
510 read_from_bdev_async(zram
, &bvec
, entry
, bio
);
514 * Block layer want one ->make_request_fn to be active at a time
515 * so if we use chained IO with parent IO in same context,
516 * it's a deadlock. To avoid, it, it uses worker thread context.
518 static int read_from_bdev_sync(struct zram
*zram
, struct bio_vec
*bvec
,
519 unsigned long entry
, struct bio
*bio
)
521 struct zram_work work
;
527 INIT_WORK_ONSTACK(&work
.work
, zram_sync_read
);
528 queue_work(system_unbound_wq
, &work
.work
);
529 flush_work(&work
.work
);
530 destroy_work_on_stack(&work
.work
);
535 static int read_from_bdev_sync(struct zram
*zram
, struct bio_vec
*bvec
,
536 unsigned long entry
, struct bio
*bio
)
543 static int read_from_bdev(struct zram
*zram
, struct bio_vec
*bvec
,
544 unsigned long entry
, struct bio
*parent
, bool sync
)
547 return read_from_bdev_sync(zram
, bvec
, entry
, parent
);
549 return read_from_bdev_async(zram
, bvec
, entry
, parent
);
552 static int write_to_bdev(struct zram
*zram
, struct bio_vec
*bvec
,
553 u32 index
, struct bio
*parent
,
554 unsigned long *pentry
)
559 bio
= bio_alloc(GFP_ATOMIC
, 1);
563 entry
= get_entry_bdev(zram
);
569 bio
->bi_iter
.bi_sector
= entry
* (PAGE_SIZE
>> 9);
570 bio_set_dev(bio
, zram
->bdev
);
571 if (!bio_add_page(bio
, bvec
->bv_page
, bvec
->bv_len
,
574 put_entry_bdev(zram
, entry
);
579 bio
->bi_opf
= REQ_OP_WRITE
| REQ_SYNC
;
580 bio
->bi_end_io
= zram_page_end_io
;
582 bio
->bi_opf
= parent
->bi_opf
;
583 bio_chain(bio
, parent
);
592 static void zram_wb_clear(struct zram
*zram
, u32 index
)
596 zram_clear_flag(zram
, index
, ZRAM_WB
);
597 entry
= zram_get_element(zram
, index
);
598 zram_set_element(zram
, index
, 0);
599 put_entry_bdev(zram
, entry
);
603 static bool zram_wb_enabled(struct zram
*zram
) { return false; }
604 static inline void reset_bdev(struct zram
*zram
) {};
605 static int write_to_bdev(struct zram
*zram
, struct bio_vec
*bvec
,
606 u32 index
, struct bio
*parent
,
607 unsigned long *pentry
)
613 static int read_from_bdev(struct zram
*zram
, struct bio_vec
*bvec
,
614 unsigned long entry
, struct bio
*parent
, bool sync
)
618 static void zram_wb_clear(struct zram
*zram
, u32 index
) {}
621 #ifdef CONFIG_ZRAM_MEMORY_TRACKING
623 static struct dentry
*zram_debugfs_root
;
625 static void zram_debugfs_create(void)
627 zram_debugfs_root
= debugfs_create_dir("zram", NULL
);
630 static void zram_debugfs_destroy(void)
632 debugfs_remove_recursive(zram_debugfs_root
);
635 static void zram_accessed(struct zram
*zram
, u32 index
)
637 zram
->table
[index
].ac_time
= ktime_get_boottime();
640 static void zram_reset_access(struct zram
*zram
, u32 index
)
642 zram
->table
[index
].ac_time
= 0;
645 static ssize_t
read_block_state(struct file
*file
, char __user
*buf
,
646 size_t count
, loff_t
*ppos
)
649 ssize_t index
, written
= 0;
650 struct zram
*zram
= file
->private_data
;
651 unsigned long nr_pages
= zram
->disksize
>> PAGE_SHIFT
;
652 struct timespec64 ts
;
654 kbuf
= kvmalloc(count
, GFP_KERNEL
);
658 down_read(&zram
->init_lock
);
659 if (!init_done(zram
)) {
660 up_read(&zram
->init_lock
);
665 for (index
= *ppos
; index
< nr_pages
; index
++) {
668 zram_slot_lock(zram
, index
);
669 if (!zram_allocated(zram
, index
))
672 ts
= ktime_to_timespec64(zram
->table
[index
].ac_time
);
673 copied
= snprintf(kbuf
+ written
, count
,
674 "%12zd %12lld.%06lu %c%c%c\n",
675 index
, (s64
)ts
.tv_sec
,
676 ts
.tv_nsec
/ NSEC_PER_USEC
,
677 zram_test_flag(zram
, index
, ZRAM_SAME
) ? 's' : '.',
678 zram_test_flag(zram
, index
, ZRAM_WB
) ? 'w' : '.',
679 zram_test_flag(zram
, index
, ZRAM_HUGE
) ? 'h' : '.');
681 if (count
< copied
) {
682 zram_slot_unlock(zram
, index
);
688 zram_slot_unlock(zram
, index
);
692 up_read(&zram
->init_lock
);
693 if (copy_to_user(buf
, kbuf
, written
))
700 static const struct file_operations proc_zram_block_state_op
= {
702 .read
= read_block_state
,
703 .llseek
= default_llseek
,
706 static void zram_debugfs_register(struct zram
*zram
)
708 if (!zram_debugfs_root
)
711 zram
->debugfs_dir
= debugfs_create_dir(zram
->disk
->disk_name
,
713 debugfs_create_file("block_state", 0400, zram
->debugfs_dir
,
714 zram
, &proc_zram_block_state_op
);
717 static void zram_debugfs_unregister(struct zram
*zram
)
719 debugfs_remove_recursive(zram
->debugfs_dir
);
722 static void zram_debugfs_create(void) {};
723 static void zram_debugfs_destroy(void) {};
724 static void zram_accessed(struct zram
*zram
, u32 index
) {};
725 static void zram_reset_access(struct zram
*zram
, u32 index
) {};
726 static void zram_debugfs_register(struct zram
*zram
) {};
727 static void zram_debugfs_unregister(struct zram
*zram
) {};
731 * We switched to per-cpu streams and this attr is not needed anymore.
732 * However, we will keep it around for some time, because:
733 * a) we may revert per-cpu streams in the future
734 * b) it's visible to user space and we need to follow our 2 years
735 * retirement rule; but we already have a number of 'soon to be
736 * altered' attrs, so max_comp_streams need to wait for the next
739 static ssize_t
max_comp_streams_show(struct device
*dev
,
740 struct device_attribute
*attr
, char *buf
)
742 return scnprintf(buf
, PAGE_SIZE
, "%d\n", num_online_cpus());
745 static ssize_t
max_comp_streams_store(struct device
*dev
,
746 struct device_attribute
*attr
, const char *buf
, size_t len
)
751 static ssize_t
comp_algorithm_show(struct device
*dev
,
752 struct device_attribute
*attr
, char *buf
)
755 struct zram
*zram
= dev_to_zram(dev
);
757 down_read(&zram
->init_lock
);
758 sz
= zcomp_available_show(zram
->compressor
, buf
);
759 up_read(&zram
->init_lock
);
764 static ssize_t
comp_algorithm_store(struct device
*dev
,
765 struct device_attribute
*attr
, const char *buf
, size_t len
)
767 struct zram
*zram
= dev_to_zram(dev
);
768 char compressor
[ARRAY_SIZE(zram
->compressor
)];
771 strlcpy(compressor
, buf
, sizeof(compressor
));
772 /* ignore trailing newline */
773 sz
= strlen(compressor
);
774 if (sz
> 0 && compressor
[sz
- 1] == '\n')
775 compressor
[sz
- 1] = 0x00;
777 if (!zcomp_available_algorithm(compressor
))
780 down_write(&zram
->init_lock
);
781 if (init_done(zram
)) {
782 up_write(&zram
->init_lock
);
783 pr_info("Can't change algorithm for initialized device\n");
787 strcpy(zram
->compressor
, compressor
);
788 up_write(&zram
->init_lock
);
792 static ssize_t
compact_store(struct device
*dev
,
793 struct device_attribute
*attr
, const char *buf
, size_t len
)
795 struct zram
*zram
= dev_to_zram(dev
);
797 down_read(&zram
->init_lock
);
798 if (!init_done(zram
)) {
799 up_read(&zram
->init_lock
);
803 zs_compact(zram
->mem_pool
);
804 up_read(&zram
->init_lock
);
809 static ssize_t
io_stat_show(struct device
*dev
,
810 struct device_attribute
*attr
, char *buf
)
812 struct zram
*zram
= dev_to_zram(dev
);
815 down_read(&zram
->init_lock
);
816 ret
= scnprintf(buf
, PAGE_SIZE
,
817 "%8llu %8llu %8llu %8llu\n",
818 (u64
)atomic64_read(&zram
->stats
.failed_reads
),
819 (u64
)atomic64_read(&zram
->stats
.failed_writes
),
820 (u64
)atomic64_read(&zram
->stats
.invalid_io
),
821 (u64
)atomic64_read(&zram
->stats
.notify_free
));
822 up_read(&zram
->init_lock
);
827 static ssize_t
mm_stat_show(struct device
*dev
,
828 struct device_attribute
*attr
, char *buf
)
830 struct zram
*zram
= dev_to_zram(dev
);
831 struct zs_pool_stats pool_stats
;
832 u64 orig_size
, mem_used
= 0;
836 memset(&pool_stats
, 0x00, sizeof(struct zs_pool_stats
));
838 down_read(&zram
->init_lock
);
839 if (init_done(zram
)) {
840 mem_used
= zs_get_total_pages(zram
->mem_pool
);
841 zs_pool_stats(zram
->mem_pool
, &pool_stats
);
844 orig_size
= atomic64_read(&zram
->stats
.pages_stored
);
845 max_used
= atomic_long_read(&zram
->stats
.max_used_pages
);
847 ret
= scnprintf(buf
, PAGE_SIZE
,
848 "%8llu %8llu %8llu %8lu %8ld %8llu %8lu %8llu\n",
849 orig_size
<< PAGE_SHIFT
,
850 (u64
)atomic64_read(&zram
->stats
.compr_data_size
),
851 mem_used
<< PAGE_SHIFT
,
852 zram
->limit_pages
<< PAGE_SHIFT
,
853 max_used
<< PAGE_SHIFT
,
854 (u64
)atomic64_read(&zram
->stats
.same_pages
),
855 pool_stats
.pages_compacted
,
856 (u64
)atomic64_read(&zram
->stats
.huge_pages
));
857 up_read(&zram
->init_lock
);
862 static ssize_t
debug_stat_show(struct device
*dev
,
863 struct device_attribute
*attr
, char *buf
)
866 struct zram
*zram
= dev_to_zram(dev
);
869 down_read(&zram
->init_lock
);
870 ret
= scnprintf(buf
, PAGE_SIZE
,
871 "version: %d\n%8llu\n",
873 (u64
)atomic64_read(&zram
->stats
.writestall
));
874 up_read(&zram
->init_lock
);
879 static DEVICE_ATTR_RO(io_stat
);
880 static DEVICE_ATTR_RO(mm_stat
);
881 static DEVICE_ATTR_RO(debug_stat
);
883 static void zram_meta_free(struct zram
*zram
, u64 disksize
)
885 size_t num_pages
= disksize
>> PAGE_SHIFT
;
888 /* Free all pages that are still in this zram device */
889 for (index
= 0; index
< num_pages
; index
++)
890 zram_free_page(zram
, index
);
892 zs_destroy_pool(zram
->mem_pool
);
896 static bool zram_meta_alloc(struct zram
*zram
, u64 disksize
)
900 num_pages
= disksize
>> PAGE_SHIFT
;
901 zram
->table
= vzalloc(array_size(num_pages
, sizeof(*zram
->table
)));
905 zram
->mem_pool
= zs_create_pool(zram
->disk
->disk_name
);
906 if (!zram
->mem_pool
) {
911 if (!huge_class_size
)
912 huge_class_size
= zs_huge_class_size(zram
->mem_pool
);
917 * To protect concurrent access to the same index entry,
918 * caller should hold this table index entry's bit_spinlock to
919 * indicate this index entry is accessing.
921 static void zram_free_page(struct zram
*zram
, size_t index
)
923 unsigned long handle
;
925 zram_reset_access(zram
, index
);
927 if (zram_test_flag(zram
, index
, ZRAM_HUGE
)) {
928 zram_clear_flag(zram
, index
, ZRAM_HUGE
);
929 atomic64_dec(&zram
->stats
.huge_pages
);
932 if (zram_wb_enabled(zram
) && zram_test_flag(zram
, index
, ZRAM_WB
)) {
933 zram_wb_clear(zram
, index
);
934 atomic64_dec(&zram
->stats
.pages_stored
);
939 * No memory is allocated for same element filled pages.
940 * Simply clear same page flag.
942 if (zram_test_flag(zram
, index
, ZRAM_SAME
)) {
943 zram_clear_flag(zram
, index
, ZRAM_SAME
);
944 zram_set_element(zram
, index
, 0);
945 atomic64_dec(&zram
->stats
.same_pages
);
946 atomic64_dec(&zram
->stats
.pages_stored
);
950 handle
= zram_get_handle(zram
, index
);
954 zs_free(zram
->mem_pool
, handle
);
956 atomic64_sub(zram_get_obj_size(zram
, index
),
957 &zram
->stats
.compr_data_size
);
958 atomic64_dec(&zram
->stats
.pages_stored
);
960 zram_set_handle(zram
, index
, 0);
961 zram_set_obj_size(zram
, index
, 0);
964 static int __zram_bvec_read(struct zram
*zram
, struct page
*page
, u32 index
,
965 struct bio
*bio
, bool partial_io
)
968 unsigned long handle
;
972 if (zram_wb_enabled(zram
)) {
973 zram_slot_lock(zram
, index
);
974 if (zram_test_flag(zram
, index
, ZRAM_WB
)) {
977 zram_slot_unlock(zram
, index
);
980 bvec
.bv_len
= PAGE_SIZE
;
982 return read_from_bdev(zram
, &bvec
,
983 zram_get_element(zram
, index
),
986 zram_slot_unlock(zram
, index
);
989 zram_slot_lock(zram
, index
);
990 handle
= zram_get_handle(zram
, index
);
991 if (!handle
|| zram_test_flag(zram
, index
, ZRAM_SAME
)) {
995 value
= handle
? zram_get_element(zram
, index
) : 0;
996 mem
= kmap_atomic(page
);
997 zram_fill_page(mem
, PAGE_SIZE
, value
);
999 zram_slot_unlock(zram
, index
);
1003 size
= zram_get_obj_size(zram
, index
);
1005 src
= zs_map_object(zram
->mem_pool
, handle
, ZS_MM_RO
);
1006 if (size
== PAGE_SIZE
) {
1007 dst
= kmap_atomic(page
);
1008 memcpy(dst
, src
, PAGE_SIZE
);
1012 struct zcomp_strm
*zstrm
= zcomp_stream_get(zram
->comp
);
1014 dst
= kmap_atomic(page
);
1015 ret
= zcomp_decompress(zstrm
, src
, size
, dst
);
1017 zcomp_stream_put(zram
->comp
);
1019 zs_unmap_object(zram
->mem_pool
, handle
);
1020 zram_slot_unlock(zram
, index
);
1022 /* Should NEVER happen. Return bio error if it does. */
1024 pr_err("Decompression failed! err=%d, page=%u\n", ret
, index
);
1029 static int zram_bvec_read(struct zram
*zram
, struct bio_vec
*bvec
,
1030 u32 index
, int offset
, struct bio
*bio
)
1035 page
= bvec
->bv_page
;
1036 if (is_partial_io(bvec
)) {
1037 /* Use a temporary buffer to decompress the page */
1038 page
= alloc_page(GFP_NOIO
|__GFP_HIGHMEM
);
1043 ret
= __zram_bvec_read(zram
, page
, index
, bio
, is_partial_io(bvec
));
1047 if (is_partial_io(bvec
)) {
1048 void *dst
= kmap_atomic(bvec
->bv_page
);
1049 void *src
= kmap_atomic(page
);
1051 memcpy(dst
+ bvec
->bv_offset
, src
+ offset
, bvec
->bv_len
);
1056 if (is_partial_io(bvec
))
1062 static int __zram_bvec_write(struct zram
*zram
, struct bio_vec
*bvec
,
1063 u32 index
, struct bio
*bio
)
1066 unsigned long alloced_pages
;
1067 unsigned long handle
= 0;
1068 unsigned int comp_len
= 0;
1069 void *src
, *dst
, *mem
;
1070 struct zcomp_strm
*zstrm
;
1071 struct page
*page
= bvec
->bv_page
;
1072 unsigned long element
= 0;
1073 enum zram_pageflags flags
= 0;
1074 bool allow_wb
= true;
1076 mem
= kmap_atomic(page
);
1077 if (page_same_filled(mem
, &element
)) {
1079 /* Free memory associated with this sector now. */
1081 atomic64_inc(&zram
->stats
.same_pages
);
1087 zstrm
= zcomp_stream_get(zram
->comp
);
1088 src
= kmap_atomic(page
);
1089 ret
= zcomp_compress(zstrm
, src
, &comp_len
);
1092 if (unlikely(ret
)) {
1093 zcomp_stream_put(zram
->comp
);
1094 pr_err("Compression failed! err=%d\n", ret
);
1095 zs_free(zram
->mem_pool
, handle
);
1099 if (unlikely(comp_len
>= huge_class_size
)) {
1100 comp_len
= PAGE_SIZE
;
1101 if (zram_wb_enabled(zram
) && allow_wb
) {
1102 zcomp_stream_put(zram
->comp
);
1103 ret
= write_to_bdev(zram
, bvec
, index
, bio
, &element
);
1110 goto compress_again
;
1115 * handle allocation has 2 paths:
1116 * a) fast path is executed with preemption disabled (for
1117 * per-cpu streams) and has __GFP_DIRECT_RECLAIM bit clear,
1118 * since we can't sleep;
1119 * b) slow path enables preemption and attempts to allocate
1120 * the page with __GFP_DIRECT_RECLAIM bit set. we have to
1121 * put per-cpu compression stream and, thus, to re-do
1122 * the compression once handle is allocated.
1124 * if we have a 'non-null' handle here then we are coming
1125 * from the slow path and handle has already been allocated.
1128 handle
= zs_malloc(zram
->mem_pool
, comp_len
,
1129 __GFP_KSWAPD_RECLAIM
|
1134 zcomp_stream_put(zram
->comp
);
1135 atomic64_inc(&zram
->stats
.writestall
);
1136 handle
= zs_malloc(zram
->mem_pool
, comp_len
,
1137 GFP_NOIO
| __GFP_HIGHMEM
|
1140 goto compress_again
;
1144 alloced_pages
= zs_get_total_pages(zram
->mem_pool
);
1145 update_used_max(zram
, alloced_pages
);
1147 if (zram
->limit_pages
&& alloced_pages
> zram
->limit_pages
) {
1148 zcomp_stream_put(zram
->comp
);
1149 zs_free(zram
->mem_pool
, handle
);
1153 dst
= zs_map_object(zram
->mem_pool
, handle
, ZS_MM_WO
);
1155 src
= zstrm
->buffer
;
1156 if (comp_len
== PAGE_SIZE
)
1157 src
= kmap_atomic(page
);
1158 memcpy(dst
, src
, comp_len
);
1159 if (comp_len
== PAGE_SIZE
)
1162 zcomp_stream_put(zram
->comp
);
1163 zs_unmap_object(zram
->mem_pool
, handle
);
1164 atomic64_add(comp_len
, &zram
->stats
.compr_data_size
);
1167 * Free memory associated with this sector
1168 * before overwriting unused sectors.
1170 zram_slot_lock(zram
, index
);
1171 zram_free_page(zram
, index
);
1173 if (comp_len
== PAGE_SIZE
) {
1174 zram_set_flag(zram
, index
, ZRAM_HUGE
);
1175 atomic64_inc(&zram
->stats
.huge_pages
);
1179 zram_set_flag(zram
, index
, flags
);
1180 zram_set_element(zram
, index
, element
);
1182 zram_set_handle(zram
, index
, handle
);
1183 zram_set_obj_size(zram
, index
, comp_len
);
1185 zram_slot_unlock(zram
, index
);
1188 atomic64_inc(&zram
->stats
.pages_stored
);
1192 static int zram_bvec_write(struct zram
*zram
, struct bio_vec
*bvec
,
1193 u32 index
, int offset
, struct bio
*bio
)
1196 struct page
*page
= NULL
;
1201 if (is_partial_io(bvec
)) {
1204 * This is a partial IO. We need to read the full page
1205 * before to write the changes.
1207 page
= alloc_page(GFP_NOIO
|__GFP_HIGHMEM
);
1211 ret
= __zram_bvec_read(zram
, page
, index
, bio
, true);
1215 src
= kmap_atomic(bvec
->bv_page
);
1216 dst
= kmap_atomic(page
);
1217 memcpy(dst
+ offset
, src
+ bvec
->bv_offset
, bvec
->bv_len
);
1222 vec
.bv_len
= PAGE_SIZE
;
1226 ret
= __zram_bvec_write(zram
, &vec
, index
, bio
);
1228 if (is_partial_io(bvec
))
1234 * zram_bio_discard - handler on discard request
1235 * @index: physical block index in PAGE_SIZE units
1236 * @offset: byte offset within physical block
1238 static void zram_bio_discard(struct zram
*zram
, u32 index
,
1239 int offset
, struct bio
*bio
)
1241 size_t n
= bio
->bi_iter
.bi_size
;
1244 * zram manages data in physical block size units. Because logical block
1245 * size isn't identical with physical block size on some arch, we
1246 * could get a discard request pointing to a specific offset within a
1247 * certain physical block. Although we can handle this request by
1248 * reading that physiclal block and decompressing and partially zeroing
1249 * and re-compressing and then re-storing it, this isn't reasonable
1250 * because our intent with a discard request is to save memory. So
1251 * skipping this logical block is appropriate here.
1254 if (n
<= (PAGE_SIZE
- offset
))
1257 n
-= (PAGE_SIZE
- offset
);
1261 while (n
>= PAGE_SIZE
) {
1262 zram_slot_lock(zram
, index
);
1263 zram_free_page(zram
, index
);
1264 zram_slot_unlock(zram
, index
);
1265 atomic64_inc(&zram
->stats
.notify_free
);
1272 * Returns errno if it has some problem. Otherwise return 0 or 1.
1273 * Returns 0 if IO request was done synchronously
1274 * Returns 1 if IO request was successfully submitted.
1276 static int zram_bvec_rw(struct zram
*zram
, struct bio_vec
*bvec
, u32 index
,
1277 int offset
, bool is_write
, struct bio
*bio
)
1279 unsigned long start_time
= jiffies
;
1280 int rw_acct
= is_write
? REQ_OP_WRITE
: REQ_OP_READ
;
1281 struct request_queue
*q
= zram
->disk
->queue
;
1284 generic_start_io_acct(q
, rw_acct
, bvec
->bv_len
>> SECTOR_SHIFT
,
1285 &zram
->disk
->part0
);
1288 atomic64_inc(&zram
->stats
.num_reads
);
1289 ret
= zram_bvec_read(zram
, bvec
, index
, offset
, bio
);
1290 flush_dcache_page(bvec
->bv_page
);
1292 atomic64_inc(&zram
->stats
.num_writes
);
1293 ret
= zram_bvec_write(zram
, bvec
, index
, offset
, bio
);
1296 generic_end_io_acct(q
, rw_acct
, &zram
->disk
->part0
, start_time
);
1298 zram_slot_lock(zram
, index
);
1299 zram_accessed(zram
, index
);
1300 zram_slot_unlock(zram
, index
);
1302 if (unlikely(ret
< 0)) {
1304 atomic64_inc(&zram
->stats
.failed_reads
);
1306 atomic64_inc(&zram
->stats
.failed_writes
);
1312 static void __zram_make_request(struct zram
*zram
, struct bio
*bio
)
1316 struct bio_vec bvec
;
1317 struct bvec_iter iter
;
1319 index
= bio
->bi_iter
.bi_sector
>> SECTORS_PER_PAGE_SHIFT
;
1320 offset
= (bio
->bi_iter
.bi_sector
&
1321 (SECTORS_PER_PAGE
- 1)) << SECTOR_SHIFT
;
1323 switch (bio_op(bio
)) {
1324 case REQ_OP_DISCARD
:
1325 case REQ_OP_WRITE_ZEROES
:
1326 zram_bio_discard(zram
, index
, offset
, bio
);
1333 bio_for_each_segment(bvec
, bio
, iter
) {
1334 struct bio_vec bv
= bvec
;
1335 unsigned int unwritten
= bvec
.bv_len
;
1338 bv
.bv_len
= min_t(unsigned int, PAGE_SIZE
- offset
,
1340 if (zram_bvec_rw(zram
, &bv
, index
, offset
,
1341 op_is_write(bio_op(bio
)), bio
) < 0)
1344 bv
.bv_offset
+= bv
.bv_len
;
1345 unwritten
-= bv
.bv_len
;
1347 update_position(&index
, &offset
, &bv
);
1348 } while (unwritten
);
1359 * Handler function for all zram I/O requests.
1361 static blk_qc_t
zram_make_request(struct request_queue
*queue
, struct bio
*bio
)
1363 struct zram
*zram
= queue
->queuedata
;
1365 if (!valid_io_request(zram
, bio
->bi_iter
.bi_sector
,
1366 bio
->bi_iter
.bi_size
)) {
1367 atomic64_inc(&zram
->stats
.invalid_io
);
1371 __zram_make_request(zram
, bio
);
1372 return BLK_QC_T_NONE
;
1376 return BLK_QC_T_NONE
;
1379 static void zram_slot_free_notify(struct block_device
*bdev
,
1380 unsigned long index
)
1384 zram
= bdev
->bd_disk
->private_data
;
1386 zram_slot_lock(zram
, index
);
1387 zram_free_page(zram
, index
);
1388 zram_slot_unlock(zram
, index
);
1389 atomic64_inc(&zram
->stats
.notify_free
);
1392 static int zram_rw_page(struct block_device
*bdev
, sector_t sector
,
1393 struct page
*page
, bool is_write
)
1400 if (PageTransHuge(page
))
1402 zram
= bdev
->bd_disk
->private_data
;
1404 if (!valid_io_request(zram
, sector
, PAGE_SIZE
)) {
1405 atomic64_inc(&zram
->stats
.invalid_io
);
1410 index
= sector
>> SECTORS_PER_PAGE_SHIFT
;
1411 offset
= (sector
& (SECTORS_PER_PAGE
- 1)) << SECTOR_SHIFT
;
1414 bv
.bv_len
= PAGE_SIZE
;
1417 ret
= zram_bvec_rw(zram
, &bv
, index
, offset
, is_write
, NULL
);
1420 * If I/O fails, just return error(ie, non-zero) without
1421 * calling page_endio.
1422 * It causes resubmit the I/O with bio request by upper functions
1423 * of rw_page(e.g., swap_readpage, __swap_writepage) and
1424 * bio->bi_end_io does things to handle the error
1425 * (e.g., SetPageError, set_page_dirty and extra works).
1427 if (unlikely(ret
< 0))
1432 page_endio(page
, is_write
, 0);
1443 static void zram_reset_device(struct zram
*zram
)
1448 down_write(&zram
->init_lock
);
1450 zram
->limit_pages
= 0;
1452 if (!init_done(zram
)) {
1453 up_write(&zram
->init_lock
);
1458 disksize
= zram
->disksize
;
1461 set_capacity(zram
->disk
, 0);
1462 part_stat_set_all(&zram
->disk
->part0
, 0);
1464 up_write(&zram
->init_lock
);
1465 /* I/O operation under all of CPU are done so let's free */
1466 zram_meta_free(zram
, disksize
);
1467 memset(&zram
->stats
, 0, sizeof(zram
->stats
));
1468 zcomp_destroy(comp
);
1472 static ssize_t
disksize_store(struct device
*dev
,
1473 struct device_attribute
*attr
, const char *buf
, size_t len
)
1477 struct zram
*zram
= dev_to_zram(dev
);
1480 disksize
= memparse(buf
, NULL
);
1484 down_write(&zram
->init_lock
);
1485 if (init_done(zram
)) {
1486 pr_info("Cannot change disksize for initialized device\n");
1491 disksize
= PAGE_ALIGN(disksize
);
1492 if (!zram_meta_alloc(zram
, disksize
)) {
1497 comp
= zcomp_create(zram
->compressor
);
1499 pr_err("Cannot initialise %s compressing backend\n",
1501 err
= PTR_ERR(comp
);
1506 zram
->disksize
= disksize
;
1507 set_capacity(zram
->disk
, zram
->disksize
>> SECTOR_SHIFT
);
1509 revalidate_disk(zram
->disk
);
1510 up_write(&zram
->init_lock
);
1515 zram_meta_free(zram
, disksize
);
1517 up_write(&zram
->init_lock
);
1521 static ssize_t
reset_store(struct device
*dev
,
1522 struct device_attribute
*attr
, const char *buf
, size_t len
)
1525 unsigned short do_reset
;
1527 struct block_device
*bdev
;
1529 ret
= kstrtou16(buf
, 10, &do_reset
);
1536 zram
= dev_to_zram(dev
);
1537 bdev
= bdget_disk(zram
->disk
, 0);
1541 mutex_lock(&bdev
->bd_mutex
);
1542 /* Do not reset an active device or claimed device */
1543 if (bdev
->bd_openers
|| zram
->claim
) {
1544 mutex_unlock(&bdev
->bd_mutex
);
1549 /* From now on, anyone can't open /dev/zram[0-9] */
1551 mutex_unlock(&bdev
->bd_mutex
);
1553 /* Make sure all the pending I/O are finished */
1555 zram_reset_device(zram
);
1556 revalidate_disk(zram
->disk
);
1559 mutex_lock(&bdev
->bd_mutex
);
1560 zram
->claim
= false;
1561 mutex_unlock(&bdev
->bd_mutex
);
1566 static int zram_open(struct block_device
*bdev
, fmode_t mode
)
1571 WARN_ON(!mutex_is_locked(&bdev
->bd_mutex
));
1573 zram
= bdev
->bd_disk
->private_data
;
1574 /* zram was claimed to reset so open request fails */
1581 static const struct block_device_operations zram_devops
= {
1583 .swap_slot_free_notify
= zram_slot_free_notify
,
1584 .rw_page
= zram_rw_page
,
1585 .owner
= THIS_MODULE
1588 static DEVICE_ATTR_WO(compact
);
1589 static DEVICE_ATTR_RW(disksize
);
1590 static DEVICE_ATTR_RO(initstate
);
1591 static DEVICE_ATTR_WO(reset
);
1592 static DEVICE_ATTR_WO(mem_limit
);
1593 static DEVICE_ATTR_WO(mem_used_max
);
1594 static DEVICE_ATTR_RW(max_comp_streams
);
1595 static DEVICE_ATTR_RW(comp_algorithm
);
1596 #ifdef CONFIG_ZRAM_WRITEBACK
1597 static DEVICE_ATTR_RW(backing_dev
);
1600 static struct attribute
*zram_disk_attrs
[] = {
1601 &dev_attr_disksize
.attr
,
1602 &dev_attr_initstate
.attr
,
1603 &dev_attr_reset
.attr
,
1604 &dev_attr_compact
.attr
,
1605 &dev_attr_mem_limit
.attr
,
1606 &dev_attr_mem_used_max
.attr
,
1607 &dev_attr_max_comp_streams
.attr
,
1608 &dev_attr_comp_algorithm
.attr
,
1609 #ifdef CONFIG_ZRAM_WRITEBACK
1610 &dev_attr_backing_dev
.attr
,
1612 &dev_attr_io_stat
.attr
,
1613 &dev_attr_mm_stat
.attr
,
1614 &dev_attr_debug_stat
.attr
,
1618 static const struct attribute_group zram_disk_attr_group
= {
1619 .attrs
= zram_disk_attrs
,
1623 * Allocate and initialize new zram device. the function returns
1624 * '>= 0' device_id upon success, and negative value otherwise.
1626 static int zram_add(void)
1629 struct request_queue
*queue
;
1632 zram
= kzalloc(sizeof(struct zram
), GFP_KERNEL
);
1636 ret
= idr_alloc(&zram_index_idr
, zram
, 0, 0, GFP_KERNEL
);
1641 init_rwsem(&zram
->init_lock
);
1643 queue
= blk_alloc_queue(GFP_KERNEL
);
1645 pr_err("Error allocating disk queue for device %d\n",
1651 blk_queue_make_request(queue
, zram_make_request
);
1653 /* gendisk structure */
1654 zram
->disk
= alloc_disk(1);
1656 pr_err("Error allocating disk structure for device %d\n",
1659 goto out_free_queue
;
1662 zram
->disk
->major
= zram_major
;
1663 zram
->disk
->first_minor
= device_id
;
1664 zram
->disk
->fops
= &zram_devops
;
1665 zram
->disk
->queue
= queue
;
1666 zram
->disk
->queue
->queuedata
= zram
;
1667 zram
->disk
->private_data
= zram
;
1668 snprintf(zram
->disk
->disk_name
, 16, "zram%d", device_id
);
1670 /* Actual capacity set using syfs (/sys/block/zram<id>/disksize */
1671 set_capacity(zram
->disk
, 0);
1672 /* zram devices sort of resembles non-rotational disks */
1673 blk_queue_flag_set(QUEUE_FLAG_NONROT
, zram
->disk
->queue
);
1674 blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM
, zram
->disk
->queue
);
1677 * To ensure that we always get PAGE_SIZE aligned
1678 * and n*PAGE_SIZED sized I/O requests.
1680 blk_queue_physical_block_size(zram
->disk
->queue
, PAGE_SIZE
);
1681 blk_queue_logical_block_size(zram
->disk
->queue
,
1682 ZRAM_LOGICAL_BLOCK_SIZE
);
1683 blk_queue_io_min(zram
->disk
->queue
, PAGE_SIZE
);
1684 blk_queue_io_opt(zram
->disk
->queue
, PAGE_SIZE
);
1685 zram
->disk
->queue
->limits
.discard_granularity
= PAGE_SIZE
;
1686 blk_queue_max_discard_sectors(zram
->disk
->queue
, UINT_MAX
);
1687 blk_queue_flag_set(QUEUE_FLAG_DISCARD
, zram
->disk
->queue
);
1690 * zram_bio_discard() will clear all logical blocks if logical block
1691 * size is identical with physical block size(PAGE_SIZE). But if it is
1692 * different, we will skip discarding some parts of logical blocks in
1693 * the part of the request range which isn't aligned to physical block
1694 * size. So we can't ensure that all discarded logical blocks are
1697 if (ZRAM_LOGICAL_BLOCK_SIZE
== PAGE_SIZE
)
1698 blk_queue_max_write_zeroes_sectors(zram
->disk
->queue
, UINT_MAX
);
1700 zram
->disk
->queue
->backing_dev_info
->capabilities
|=
1701 (BDI_CAP_STABLE_WRITES
| BDI_CAP_SYNCHRONOUS_IO
);
1702 add_disk(zram
->disk
);
1704 ret
= sysfs_create_group(&disk_to_dev(zram
->disk
)->kobj
,
1705 &zram_disk_attr_group
);
1707 pr_err("Error creating sysfs group for device %d\n",
1711 strlcpy(zram
->compressor
, default_compressor
, sizeof(zram
->compressor
));
1713 zram_debugfs_register(zram
);
1714 pr_info("Added device: %s\n", zram
->disk
->disk_name
);
1718 del_gendisk(zram
->disk
);
1719 put_disk(zram
->disk
);
1721 blk_cleanup_queue(queue
);
1723 idr_remove(&zram_index_idr
, device_id
);
1729 static int zram_remove(struct zram
*zram
)
1731 struct block_device
*bdev
;
1733 bdev
= bdget_disk(zram
->disk
, 0);
1737 mutex_lock(&bdev
->bd_mutex
);
1738 if (bdev
->bd_openers
|| zram
->claim
) {
1739 mutex_unlock(&bdev
->bd_mutex
);
1745 mutex_unlock(&bdev
->bd_mutex
);
1747 zram_debugfs_unregister(zram
);
1749 * Remove sysfs first, so no one will perform a disksize
1750 * store while we destroy the devices. This also helps during
1751 * hot_remove -- zram_reset_device() is the last holder of
1752 * ->init_lock, no later/concurrent disksize_store() or any
1753 * other sysfs handlers are possible.
1755 sysfs_remove_group(&disk_to_dev(zram
->disk
)->kobj
,
1756 &zram_disk_attr_group
);
1758 /* Make sure all the pending I/O are finished */
1760 zram_reset_device(zram
);
1763 pr_info("Removed device: %s\n", zram
->disk
->disk_name
);
1765 del_gendisk(zram
->disk
);
1766 blk_cleanup_queue(zram
->disk
->queue
);
1767 put_disk(zram
->disk
);
1772 /* zram-control sysfs attributes */
1775 * NOTE: hot_add attribute is not the usual read-only sysfs attribute. In a
1776 * sense that reading from this file does alter the state of your system -- it
1777 * creates a new un-initialized zram device and returns back this device's
1778 * device_id (or an error code if it fails to create a new device).
1780 static ssize_t
hot_add_show(struct class *class,
1781 struct class_attribute
*attr
,
1786 mutex_lock(&zram_index_mutex
);
1788 mutex_unlock(&zram_index_mutex
);
1792 return scnprintf(buf
, PAGE_SIZE
, "%d\n", ret
);
1794 static CLASS_ATTR_RO(hot_add
);
1796 static ssize_t
hot_remove_store(struct class *class,
1797 struct class_attribute
*attr
,
1804 /* dev_id is gendisk->first_minor, which is `int' */
1805 ret
= kstrtoint(buf
, 10, &dev_id
);
1811 mutex_lock(&zram_index_mutex
);
1813 zram
= idr_find(&zram_index_idr
, dev_id
);
1815 ret
= zram_remove(zram
);
1817 idr_remove(&zram_index_idr
, dev_id
);
1822 mutex_unlock(&zram_index_mutex
);
1823 return ret
? ret
: count
;
1825 static CLASS_ATTR_WO(hot_remove
);
1827 static struct attribute
*zram_control_class_attrs
[] = {
1828 &class_attr_hot_add
.attr
,
1829 &class_attr_hot_remove
.attr
,
1832 ATTRIBUTE_GROUPS(zram_control_class
);
1834 static struct class zram_control_class
= {
1835 .name
= "zram-control",
1836 .owner
= THIS_MODULE
,
1837 .class_groups
= zram_control_class_groups
,
1840 static int zram_remove_cb(int id
, void *ptr
, void *data
)
1846 static void destroy_devices(void)
1848 class_unregister(&zram_control_class
);
1849 idr_for_each(&zram_index_idr
, &zram_remove_cb
, NULL
);
1850 zram_debugfs_destroy();
1851 idr_destroy(&zram_index_idr
);
1852 unregister_blkdev(zram_major
, "zram");
1853 cpuhp_remove_multi_state(CPUHP_ZCOMP_PREPARE
);
1856 static int __init
zram_init(void)
1860 ret
= cpuhp_setup_state_multi(CPUHP_ZCOMP_PREPARE
, "block/zram:prepare",
1861 zcomp_cpu_up_prepare
, zcomp_cpu_dead
);
1865 ret
= class_register(&zram_control_class
);
1867 pr_err("Unable to register zram-control class\n");
1868 cpuhp_remove_multi_state(CPUHP_ZCOMP_PREPARE
);
1872 zram_debugfs_create();
1873 zram_major
= register_blkdev(0, "zram");
1874 if (zram_major
<= 0) {
1875 pr_err("Unable to get major number\n");
1876 class_unregister(&zram_control_class
);
1877 cpuhp_remove_multi_state(CPUHP_ZCOMP_PREPARE
);
1881 while (num_devices
!= 0) {
1882 mutex_lock(&zram_index_mutex
);
1884 mutex_unlock(&zram_index_mutex
);
1897 static void __exit
zram_exit(void)
1902 module_init(zram_init
);
1903 module_exit(zram_exit
);
1905 module_param(num_devices
, uint
, 0);
1906 MODULE_PARM_DESC(num_devices
, "Number of pre-created zram devices");
1908 MODULE_LICENSE("Dual BSD/GPL");
1909 MODULE_AUTHOR("Nitin Gupta <ngupta@vflare.org>");
1910 MODULE_DESCRIPTION("Compressed RAM Block Device");