1 /* 2 * Compressed RAM block device 3 * 4 * Copyright (C) 2008, 2009, 2010 Nitin Gupta 5 * 2012, 2013 Minchan Kim 6 * 7 * This code is released using a dual license strategy: BSD/GPL 8 * You can choose the licence that better fits your requirements. 9 * 10 * Released under the terms of 3-clause BSD License 11 * Released under the terms of GNU General Public License Version 2.0 12 * 13 */ 14 15 #define KMSG_COMPONENT "zram" 16 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt 17 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/cpuhotplug.h> 35 36 #include "zram_drv.h" 37 38 static DEFINE_IDR(zram_index_idr); 39 /* idr index must be protected */ 40 static DEFINE_MUTEX(zram_index_mutex); 41 42 static int zram_major; 43 static const char *default_compressor = "lzo"; 44 45 /* Module params (documentation at end) */ 46 static unsigned int num_devices = 1; 47 /* 48 * Pages that compress to sizes equals or greater than this are stored 49 * uncompressed in memory. 50 */ 51 static size_t huge_class_size; 52 53 static void zram_free_page(struct zram *zram, size_t index); 54 55 static inline bool init_done(struct zram *zram) 56 { 57 return zram->disksize; 58 } 59 60 static inline struct zram *dev_to_zram(struct device *dev) 61 { 62 return (struct zram *)dev_to_disk(dev)->private_data; 63 } 64 65 static unsigned long zram_get_handle(struct zram *zram, u32 index) 66 { 67 return zram->table[index].handle; 68 } 69 70 static void zram_set_handle(struct zram *zram, u32 index, unsigned long handle) 71 { 72 zram->table[index].handle = handle; 73 } 74 75 /* flag operations require table entry bit_spin_lock() being held */ 76 static int zram_test_flag(struct zram *zram, u32 index, 77 enum zram_pageflags flag) 78 { 79 return zram->table[index].value & BIT(flag); 80 } 81 82 static void zram_set_flag(struct zram *zram, u32 index, 83 enum zram_pageflags flag) 84 { 85 zram->table[index].value |= BIT(flag); 86 } 87 88 static void zram_clear_flag(struct zram *zram, u32 index, 89 enum zram_pageflags flag) 90 { 91 zram->table[index].value &= ~BIT(flag); 92 } 93 94 static inline void zram_set_element(struct zram *zram, u32 index, 95 unsigned long element) 96 { 97 zram->table[index].element = element; 98 } 99 100 static unsigned long zram_get_element(struct zram *zram, u32 index) 101 { 102 return zram->table[index].element; 103 } 104 105 static size_t zram_get_obj_size(struct zram *zram, u32 index) 106 { 107 return zram->table[index].value & (BIT(ZRAM_FLAG_SHIFT) - 1); 108 } 109 110 static void zram_set_obj_size(struct zram *zram, 111 u32 index, size_t size) 112 { 113 unsigned long flags = zram->table[index].value >> ZRAM_FLAG_SHIFT; 114 115 zram->table[index].value = (flags << ZRAM_FLAG_SHIFT) | size; 116 } 117 118 #if PAGE_SIZE != 4096 119 static inline bool is_partial_io(struct bio_vec *bvec) 120 { 121 return bvec->bv_len != PAGE_SIZE; 122 } 123 #else 124 static inline bool is_partial_io(struct bio_vec *bvec) 125 { 126 return false; 127 } 128 #endif 129 130 /* 131 * Check if request is within bounds and aligned on zram logical blocks. 132 */ 133 static inline bool valid_io_request(struct zram *zram, 134 sector_t start, unsigned int size) 135 { 136 u64 end, bound; 137 138 /* unaligned request */ 139 if (unlikely(start & (ZRAM_SECTOR_PER_LOGICAL_BLOCK - 1))) 140 return false; 141 if (unlikely(size & (ZRAM_LOGICAL_BLOCK_SIZE - 1))) 142 return false; 143 144 end = start + (size >> SECTOR_SHIFT); 145 bound = zram->disksize >> SECTOR_SHIFT; 146 /* out of range range */ 147 if (unlikely(start >= bound || end > bound || start > end)) 148 return false; 149 150 /* I/O request is valid */ 151 return true; 152 } 153 154 static void update_position(u32 *index, int *offset, struct bio_vec *bvec) 155 { 156 *index += (*offset + bvec->bv_len) / PAGE_SIZE; 157 *offset = (*offset + bvec->bv_len) % PAGE_SIZE; 158 } 159 160 static inline void update_used_max(struct zram *zram, 161 const unsigned long pages) 162 { 163 unsigned long old_max, cur_max; 164 165 old_max = atomic_long_read(&zram->stats.max_used_pages); 166 167 do { 168 cur_max = old_max; 169 if (pages > cur_max) 170 old_max = atomic_long_cmpxchg( 171 &zram->stats.max_used_pages, cur_max, pages); 172 } while (old_max != cur_max); 173 } 174 175 static inline void zram_fill_page(void *ptr, unsigned long len, 176 unsigned long value) 177 { 178 WARN_ON_ONCE(!IS_ALIGNED(len, sizeof(unsigned long))); 179 memset_l(ptr, value, len / sizeof(unsigned long)); 180 } 181 182 static bool page_same_filled(void *ptr, unsigned long *element) 183 { 184 unsigned int pos; 185 unsigned long *page; 186 unsigned long val; 187 188 page = (unsigned long *)ptr; 189 val = page[0]; 190 191 for (pos = 1; pos < PAGE_SIZE / sizeof(*page); pos++) { 192 if (val != page[pos]) 193 return false; 194 } 195 196 *element = val; 197 198 return true; 199 } 200 201 static ssize_t initstate_show(struct device *dev, 202 struct device_attribute *attr, char *buf) 203 { 204 u32 val; 205 struct zram *zram = dev_to_zram(dev); 206 207 down_read(&zram->init_lock); 208 val = init_done(zram); 209 up_read(&zram->init_lock); 210 211 return scnprintf(buf, PAGE_SIZE, "%u\n", val); 212 } 213 214 static ssize_t disksize_show(struct device *dev, 215 struct device_attribute *attr, char *buf) 216 { 217 struct zram *zram = dev_to_zram(dev); 218 219 return scnprintf(buf, PAGE_SIZE, "%llu\n", zram->disksize); 220 } 221 222 static ssize_t mem_limit_store(struct device *dev, 223 struct device_attribute *attr, const char *buf, size_t len) 224 { 225 u64 limit; 226 char *tmp; 227 struct zram *zram = dev_to_zram(dev); 228 229 limit = memparse(buf, &tmp); 230 if (buf == tmp) /* no chars parsed, invalid input */ 231 return -EINVAL; 232 233 down_write(&zram->init_lock); 234 zram->limit_pages = PAGE_ALIGN(limit) >> PAGE_SHIFT; 235 up_write(&zram->init_lock); 236 237 return len; 238 } 239 240 static ssize_t mem_used_max_store(struct device *dev, 241 struct device_attribute *attr, const char *buf, size_t len) 242 { 243 int err; 244 unsigned long val; 245 struct zram *zram = dev_to_zram(dev); 246 247 err = kstrtoul(buf, 10, &val); 248 if (err || val != 0) 249 return -EINVAL; 250 251 down_read(&zram->init_lock); 252 if (init_done(zram)) { 253 atomic_long_set(&zram->stats.max_used_pages, 254 zs_get_total_pages(zram->mem_pool)); 255 } 256 up_read(&zram->init_lock); 257 258 return len; 259 } 260 261 #ifdef CONFIG_ZRAM_WRITEBACK 262 static bool zram_wb_enabled(struct zram *zram) 263 { 264 return zram->backing_dev; 265 } 266 267 static void reset_bdev(struct zram *zram) 268 { 269 struct block_device *bdev; 270 271 if (!zram_wb_enabled(zram)) 272 return; 273 274 bdev = zram->bdev; 275 if (zram->old_block_size) 276 set_blocksize(bdev, zram->old_block_size); 277 blkdev_put(bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL); 278 /* hope filp_close flush all of IO */ 279 filp_close(zram->backing_dev, NULL); 280 zram->backing_dev = NULL; 281 zram->old_block_size = 0; 282 zram->bdev = NULL; 283 284 kvfree(zram->bitmap); 285 zram->bitmap = NULL; 286 } 287 288 static ssize_t backing_dev_show(struct device *dev, 289 struct device_attribute *attr, char *buf) 290 { 291 struct zram *zram = dev_to_zram(dev); 292 struct file *file = zram->backing_dev; 293 char *p; 294 ssize_t ret; 295 296 down_read(&zram->init_lock); 297 if (!zram_wb_enabled(zram)) { 298 memcpy(buf, "none\n", 5); 299 up_read(&zram->init_lock); 300 return 5; 301 } 302 303 p = file_path(file, buf, PAGE_SIZE - 1); 304 if (IS_ERR(p)) { 305 ret = PTR_ERR(p); 306 goto out; 307 } 308 309 ret = strlen(p); 310 memmove(buf, p, ret); 311 buf[ret++] = '\n'; 312 out: 313 up_read(&zram->init_lock); 314 return ret; 315 } 316 317 static ssize_t backing_dev_store(struct device *dev, 318 struct device_attribute *attr, const char *buf, size_t len) 319 { 320 char *file_name; 321 struct file *backing_dev = NULL; 322 struct inode *inode; 323 struct address_space *mapping; 324 unsigned int bitmap_sz, old_block_size = 0; 325 unsigned long nr_pages, *bitmap = NULL; 326 struct block_device *bdev = NULL; 327 int err; 328 struct zram *zram = dev_to_zram(dev); 329 330 file_name = kmalloc(PATH_MAX, GFP_KERNEL); 331 if (!file_name) 332 return -ENOMEM; 333 334 down_write(&zram->init_lock); 335 if (init_done(zram)) { 336 pr_info("Can't setup backing device for initialized device\n"); 337 err = -EBUSY; 338 goto out; 339 } 340 341 strlcpy(file_name, buf, len); 342 343 backing_dev = filp_open(file_name, O_RDWR|O_LARGEFILE, 0); 344 if (IS_ERR(backing_dev)) { 345 err = PTR_ERR(backing_dev); 346 backing_dev = NULL; 347 goto out; 348 } 349 350 mapping = backing_dev->f_mapping; 351 inode = mapping->host; 352 353 /* Support only block device in this moment */ 354 if (!S_ISBLK(inode->i_mode)) { 355 err = -ENOTBLK; 356 goto out; 357 } 358 359 bdev = bdgrab(I_BDEV(inode)); 360 err = blkdev_get(bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL, zram); 361 if (err < 0) 362 goto out; 363 364 nr_pages = i_size_read(inode) >> PAGE_SHIFT; 365 bitmap_sz = BITS_TO_LONGS(nr_pages) * sizeof(long); 366 bitmap = kvzalloc(bitmap_sz, GFP_KERNEL); 367 if (!bitmap) { 368 err = -ENOMEM; 369 goto out; 370 } 371 372 old_block_size = block_size(bdev); 373 err = set_blocksize(bdev, PAGE_SIZE); 374 if (err) 375 goto out; 376 377 reset_bdev(zram); 378 spin_lock_init(&zram->bitmap_lock); 379 380 zram->old_block_size = old_block_size; 381 zram->bdev = bdev; 382 zram->backing_dev = backing_dev; 383 zram->bitmap = bitmap; 384 zram->nr_pages = nr_pages; 385 up_write(&zram->init_lock); 386 387 pr_info("setup backing device %s\n", file_name); 388 kfree(file_name); 389 390 return len; 391 out: 392 if (bitmap) 393 kvfree(bitmap); 394 395 if (bdev) 396 blkdev_put(bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL); 397 398 if (backing_dev) 399 filp_close(backing_dev, NULL); 400 401 up_write(&zram->init_lock); 402 403 kfree(file_name); 404 405 return err; 406 } 407 408 static unsigned long get_entry_bdev(struct zram *zram) 409 { 410 unsigned long entry; 411 412 spin_lock(&zram->bitmap_lock); 413 /* skip 0 bit to confuse zram.handle = 0 */ 414 entry = find_next_zero_bit(zram->bitmap, zram->nr_pages, 1); 415 if (entry == zram->nr_pages) { 416 spin_unlock(&zram->bitmap_lock); 417 return 0; 418 } 419 420 set_bit(entry, zram->bitmap); 421 spin_unlock(&zram->bitmap_lock); 422 423 return entry; 424 } 425 426 static void put_entry_bdev(struct zram *zram, unsigned long entry) 427 { 428 int was_set; 429 430 spin_lock(&zram->bitmap_lock); 431 was_set = test_and_clear_bit(entry, zram->bitmap); 432 spin_unlock(&zram->bitmap_lock); 433 WARN_ON_ONCE(!was_set); 434 } 435 436 static void zram_page_end_io(struct bio *bio) 437 { 438 struct page *page = bio_first_page_all(bio); 439 440 page_endio(page, op_is_write(bio_op(bio)), 441 blk_status_to_errno(bio->bi_status)); 442 bio_put(bio); 443 } 444 445 /* 446 * Returns 1 if the submission is successful. 447 */ 448 static int read_from_bdev_async(struct zram *zram, struct bio_vec *bvec, 449 unsigned long entry, struct bio *parent) 450 { 451 struct bio *bio; 452 453 bio = bio_alloc(GFP_ATOMIC, 1); 454 if (!bio) 455 return -ENOMEM; 456 457 bio->bi_iter.bi_sector = entry * (PAGE_SIZE >> 9); 458 bio_set_dev(bio, zram->bdev); 459 if (!bio_add_page(bio, bvec->bv_page, bvec->bv_len, bvec->bv_offset)) { 460 bio_put(bio); 461 return -EIO; 462 } 463 464 if (!parent) { 465 bio->bi_opf = REQ_OP_READ; 466 bio->bi_end_io = zram_page_end_io; 467 } else { 468 bio->bi_opf = parent->bi_opf; 469 bio_chain(bio, parent); 470 } 471 472 submit_bio(bio); 473 return 1; 474 } 475 476 struct zram_work { 477 struct work_struct work; 478 struct zram *zram; 479 unsigned long entry; 480 struct bio *bio; 481 }; 482 483 #if PAGE_SIZE != 4096 484 static void zram_sync_read(struct work_struct *work) 485 { 486 struct bio_vec bvec; 487 struct zram_work *zw = container_of(work, struct zram_work, work); 488 struct zram *zram = zw->zram; 489 unsigned long entry = zw->entry; 490 struct bio *bio = zw->bio; 491 492 read_from_bdev_async(zram, &bvec, entry, bio); 493 } 494 495 /* 496 * Block layer want one ->make_request_fn to be active at a time 497 * so if we use chained IO with parent IO in same context, 498 * it's a deadlock. To avoid, it, it uses worker thread context. 499 */ 500 static int read_from_bdev_sync(struct zram *zram, struct bio_vec *bvec, 501 unsigned long entry, struct bio *bio) 502 { 503 struct zram_work work; 504 505 work.zram = zram; 506 work.entry = entry; 507 work.bio = bio; 508 509 INIT_WORK_ONSTACK(&work.work, zram_sync_read); 510 queue_work(system_unbound_wq, &work.work); 511 flush_work(&work.work); 512 destroy_work_on_stack(&work.work); 513 514 return 1; 515 } 516 #else 517 static int read_from_bdev_sync(struct zram *zram, struct bio_vec *bvec, 518 unsigned long entry, struct bio *bio) 519 { 520 WARN_ON(1); 521 return -EIO; 522 } 523 #endif 524 525 static int read_from_bdev(struct zram *zram, struct bio_vec *bvec, 526 unsigned long entry, struct bio *parent, bool sync) 527 { 528 if (sync) 529 return read_from_bdev_sync(zram, bvec, entry, parent); 530 else 531 return read_from_bdev_async(zram, bvec, entry, parent); 532 } 533 534 static int write_to_bdev(struct zram *zram, struct bio_vec *bvec, 535 u32 index, struct bio *parent, 536 unsigned long *pentry) 537 { 538 struct bio *bio; 539 unsigned long entry; 540 541 bio = bio_alloc(GFP_ATOMIC, 1); 542 if (!bio) 543 return -ENOMEM; 544 545 entry = get_entry_bdev(zram); 546 if (!entry) { 547 bio_put(bio); 548 return -ENOSPC; 549 } 550 551 bio->bi_iter.bi_sector = entry * (PAGE_SIZE >> 9); 552 bio_set_dev(bio, zram->bdev); 553 if (!bio_add_page(bio, bvec->bv_page, bvec->bv_len, 554 bvec->bv_offset)) { 555 bio_put(bio); 556 put_entry_bdev(zram, entry); 557 return -EIO; 558 } 559 560 if (!parent) { 561 bio->bi_opf = REQ_OP_WRITE | REQ_SYNC; 562 bio->bi_end_io = zram_page_end_io; 563 } else { 564 bio->bi_opf = parent->bi_opf; 565 bio_chain(bio, parent); 566 } 567 568 submit_bio(bio); 569 *pentry = entry; 570 571 return 0; 572 } 573 574 static void zram_wb_clear(struct zram *zram, u32 index) 575 { 576 unsigned long entry; 577 578 zram_clear_flag(zram, index, ZRAM_WB); 579 entry = zram_get_element(zram, index); 580 zram_set_element(zram, index, 0); 581 put_entry_bdev(zram, entry); 582 } 583 584 #else 585 static bool zram_wb_enabled(struct zram *zram) { return false; } 586 static inline void reset_bdev(struct zram *zram) {}; 587 static int write_to_bdev(struct zram *zram, struct bio_vec *bvec, 588 u32 index, struct bio *parent, 589 unsigned long *pentry) 590 591 { 592 return -EIO; 593 } 594 595 static int read_from_bdev(struct zram *zram, struct bio_vec *bvec, 596 unsigned long entry, struct bio *parent, bool sync) 597 { 598 return -EIO; 599 } 600 static void zram_wb_clear(struct zram *zram, u32 index) {} 601 #endif 602 603 604 /* 605 * We switched to per-cpu streams and this attr is not needed anymore. 606 * However, we will keep it around for some time, because: 607 * a) we may revert per-cpu streams in the future 608 * b) it's visible to user space and we need to follow our 2 years 609 * retirement rule; but we already have a number of 'soon to be 610 * altered' attrs, so max_comp_streams need to wait for the next 611 * layoff cycle. 612 */ 613 static ssize_t max_comp_streams_show(struct device *dev, 614 struct device_attribute *attr, char *buf) 615 { 616 return scnprintf(buf, PAGE_SIZE, "%d\n", num_online_cpus()); 617 } 618 619 static ssize_t max_comp_streams_store(struct device *dev, 620 struct device_attribute *attr, const char *buf, size_t len) 621 { 622 return len; 623 } 624 625 static ssize_t comp_algorithm_show(struct device *dev, 626 struct device_attribute *attr, char *buf) 627 { 628 size_t sz; 629 struct zram *zram = dev_to_zram(dev); 630 631 down_read(&zram->init_lock); 632 sz = zcomp_available_show(zram->compressor, buf); 633 up_read(&zram->init_lock); 634 635 return sz; 636 } 637 638 static ssize_t comp_algorithm_store(struct device *dev, 639 struct device_attribute *attr, const char *buf, size_t len) 640 { 641 struct zram *zram = dev_to_zram(dev); 642 char compressor[ARRAY_SIZE(zram->compressor)]; 643 size_t sz; 644 645 strlcpy(compressor, buf, sizeof(compressor)); 646 /* ignore trailing newline */ 647 sz = strlen(compressor); 648 if (sz > 0 && compressor[sz - 1] == '\n') 649 compressor[sz - 1] = 0x00; 650 651 if (!zcomp_available_algorithm(compressor)) 652 return -EINVAL; 653 654 down_write(&zram->init_lock); 655 if (init_done(zram)) { 656 up_write(&zram->init_lock); 657 pr_info("Can't change algorithm for initialized device\n"); 658 return -EBUSY; 659 } 660 661 strcpy(zram->compressor, compressor); 662 up_write(&zram->init_lock); 663 return len; 664 } 665 666 static ssize_t compact_store(struct device *dev, 667 struct device_attribute *attr, const char *buf, size_t len) 668 { 669 struct zram *zram = dev_to_zram(dev); 670 671 down_read(&zram->init_lock); 672 if (!init_done(zram)) { 673 up_read(&zram->init_lock); 674 return -EINVAL; 675 } 676 677 zs_compact(zram->mem_pool); 678 up_read(&zram->init_lock); 679 680 return len; 681 } 682 683 static ssize_t io_stat_show(struct device *dev, 684 struct device_attribute *attr, char *buf) 685 { 686 struct zram *zram = dev_to_zram(dev); 687 ssize_t ret; 688 689 down_read(&zram->init_lock); 690 ret = scnprintf(buf, PAGE_SIZE, 691 "%8llu %8llu %8llu %8llu\n", 692 (u64)atomic64_read(&zram->stats.failed_reads), 693 (u64)atomic64_read(&zram->stats.failed_writes), 694 (u64)atomic64_read(&zram->stats.invalid_io), 695 (u64)atomic64_read(&zram->stats.notify_free)); 696 up_read(&zram->init_lock); 697 698 return ret; 699 } 700 701 static ssize_t mm_stat_show(struct device *dev, 702 struct device_attribute *attr, char *buf) 703 { 704 struct zram *zram = dev_to_zram(dev); 705 struct zs_pool_stats pool_stats; 706 u64 orig_size, mem_used = 0; 707 long max_used; 708 ssize_t ret; 709 710 memset(&pool_stats, 0x00, sizeof(struct zs_pool_stats)); 711 712 down_read(&zram->init_lock); 713 if (init_done(zram)) { 714 mem_used = zs_get_total_pages(zram->mem_pool); 715 zs_pool_stats(zram->mem_pool, &pool_stats); 716 } 717 718 orig_size = atomic64_read(&zram->stats.pages_stored); 719 max_used = atomic_long_read(&zram->stats.max_used_pages); 720 721 ret = scnprintf(buf, PAGE_SIZE, 722 "%8llu %8llu %8llu %8lu %8ld %8llu %8lu\n", 723 orig_size << PAGE_SHIFT, 724 (u64)atomic64_read(&zram->stats.compr_data_size), 725 mem_used << PAGE_SHIFT, 726 zram->limit_pages << PAGE_SHIFT, 727 max_used << PAGE_SHIFT, 728 (u64)atomic64_read(&zram->stats.same_pages), 729 pool_stats.pages_compacted); 730 up_read(&zram->init_lock); 731 732 return ret; 733 } 734 735 static ssize_t debug_stat_show(struct device *dev, 736 struct device_attribute *attr, char *buf) 737 { 738 int version = 1; 739 struct zram *zram = dev_to_zram(dev); 740 ssize_t ret; 741 742 down_read(&zram->init_lock); 743 ret = scnprintf(buf, PAGE_SIZE, 744 "version: %d\n%8llu\n", 745 version, 746 (u64)atomic64_read(&zram->stats.writestall)); 747 up_read(&zram->init_lock); 748 749 return ret; 750 } 751 752 static DEVICE_ATTR_RO(io_stat); 753 static DEVICE_ATTR_RO(mm_stat); 754 static DEVICE_ATTR_RO(debug_stat); 755 756 static void zram_slot_lock(struct zram *zram, u32 index) 757 { 758 bit_spin_lock(ZRAM_ACCESS, &zram->table[index].value); 759 } 760 761 static void zram_slot_unlock(struct zram *zram, u32 index) 762 { 763 bit_spin_unlock(ZRAM_ACCESS, &zram->table[index].value); 764 } 765 766 static void zram_meta_free(struct zram *zram, u64 disksize) 767 { 768 size_t num_pages = disksize >> PAGE_SHIFT; 769 size_t index; 770 771 /* Free all pages that are still in this zram device */ 772 for (index = 0; index < num_pages; index++) 773 zram_free_page(zram, index); 774 775 zs_destroy_pool(zram->mem_pool); 776 vfree(zram->table); 777 } 778 779 static bool zram_meta_alloc(struct zram *zram, u64 disksize) 780 { 781 size_t num_pages; 782 783 num_pages = disksize >> PAGE_SHIFT; 784 zram->table = vzalloc(num_pages * sizeof(*zram->table)); 785 if (!zram->table) 786 return false; 787 788 zram->mem_pool = zs_create_pool(zram->disk->disk_name); 789 if (!zram->mem_pool) { 790 vfree(zram->table); 791 return false; 792 } 793 794 if (!huge_class_size) 795 huge_class_size = zs_huge_class_size(zram->mem_pool); 796 return true; 797 } 798 799 /* 800 * To protect concurrent access to the same index entry, 801 * caller should hold this table index entry's bit_spinlock to 802 * indicate this index entry is accessing. 803 */ 804 static void zram_free_page(struct zram *zram, size_t index) 805 { 806 unsigned long handle; 807 808 if (zram_wb_enabled(zram) && zram_test_flag(zram, index, ZRAM_WB)) { 809 zram_wb_clear(zram, index); 810 atomic64_dec(&zram->stats.pages_stored); 811 return; 812 } 813 814 /* 815 * No memory is allocated for same element filled pages. 816 * Simply clear same page flag. 817 */ 818 if (zram_test_flag(zram, index, ZRAM_SAME)) { 819 zram_clear_flag(zram, index, ZRAM_SAME); 820 zram_set_element(zram, index, 0); 821 atomic64_dec(&zram->stats.same_pages); 822 atomic64_dec(&zram->stats.pages_stored); 823 return; 824 } 825 826 handle = zram_get_handle(zram, index); 827 if (!handle) 828 return; 829 830 zs_free(zram->mem_pool, handle); 831 832 atomic64_sub(zram_get_obj_size(zram, index), 833 &zram->stats.compr_data_size); 834 atomic64_dec(&zram->stats.pages_stored); 835 836 zram_set_handle(zram, index, 0); 837 zram_set_obj_size(zram, index, 0); 838 } 839 840 static int __zram_bvec_read(struct zram *zram, struct page *page, u32 index, 841 struct bio *bio, bool partial_io) 842 { 843 int ret; 844 unsigned long handle; 845 unsigned int size; 846 void *src, *dst; 847 848 if (zram_wb_enabled(zram)) { 849 zram_slot_lock(zram, index); 850 if (zram_test_flag(zram, index, ZRAM_WB)) { 851 struct bio_vec bvec; 852 853 zram_slot_unlock(zram, index); 854 855 bvec.bv_page = page; 856 bvec.bv_len = PAGE_SIZE; 857 bvec.bv_offset = 0; 858 return read_from_bdev(zram, &bvec, 859 zram_get_element(zram, index), 860 bio, partial_io); 861 } 862 zram_slot_unlock(zram, index); 863 } 864 865 zram_slot_lock(zram, index); 866 handle = zram_get_handle(zram, index); 867 if (!handle || zram_test_flag(zram, index, ZRAM_SAME)) { 868 unsigned long value; 869 void *mem; 870 871 value = handle ? zram_get_element(zram, index) : 0; 872 mem = kmap_atomic(page); 873 zram_fill_page(mem, PAGE_SIZE, value); 874 kunmap_atomic(mem); 875 zram_slot_unlock(zram, index); 876 return 0; 877 } 878 879 size = zram_get_obj_size(zram, index); 880 881 src = zs_map_object(zram->mem_pool, handle, ZS_MM_RO); 882 if (size == PAGE_SIZE) { 883 dst = kmap_atomic(page); 884 memcpy(dst, src, PAGE_SIZE); 885 kunmap_atomic(dst); 886 ret = 0; 887 } else { 888 struct zcomp_strm *zstrm = zcomp_stream_get(zram->comp); 889 890 dst = kmap_atomic(page); 891 ret = zcomp_decompress(zstrm, src, size, dst); 892 kunmap_atomic(dst); 893 zcomp_stream_put(zram->comp); 894 } 895 zs_unmap_object(zram->mem_pool, handle); 896 zram_slot_unlock(zram, index); 897 898 /* Should NEVER happen. Return bio error if it does. */ 899 if (unlikely(ret)) 900 pr_err("Decompression failed! err=%d, page=%u\n", ret, index); 901 902 return ret; 903 } 904 905 static int zram_bvec_read(struct zram *zram, struct bio_vec *bvec, 906 u32 index, int offset, struct bio *bio) 907 { 908 int ret; 909 struct page *page; 910 911 page = bvec->bv_page; 912 if (is_partial_io(bvec)) { 913 /* Use a temporary buffer to decompress the page */ 914 page = alloc_page(GFP_NOIO|__GFP_HIGHMEM); 915 if (!page) 916 return -ENOMEM; 917 } 918 919 ret = __zram_bvec_read(zram, page, index, bio, is_partial_io(bvec)); 920 if (unlikely(ret)) 921 goto out; 922 923 if (is_partial_io(bvec)) { 924 void *dst = kmap_atomic(bvec->bv_page); 925 void *src = kmap_atomic(page); 926 927 memcpy(dst + bvec->bv_offset, src + offset, bvec->bv_len); 928 kunmap_atomic(src); 929 kunmap_atomic(dst); 930 } 931 out: 932 if (is_partial_io(bvec)) 933 __free_page(page); 934 935 return ret; 936 } 937 938 static int __zram_bvec_write(struct zram *zram, struct bio_vec *bvec, 939 u32 index, struct bio *bio) 940 { 941 int ret = 0; 942 unsigned long alloced_pages; 943 unsigned long handle = 0; 944 unsigned int comp_len = 0; 945 void *src, *dst, *mem; 946 struct zcomp_strm *zstrm; 947 struct page *page = bvec->bv_page; 948 unsigned long element = 0; 949 enum zram_pageflags flags = 0; 950 bool allow_wb = true; 951 952 mem = kmap_atomic(page); 953 if (page_same_filled(mem, &element)) { 954 kunmap_atomic(mem); 955 /* Free memory associated with this sector now. */ 956 flags = ZRAM_SAME; 957 atomic64_inc(&zram->stats.same_pages); 958 goto out; 959 } 960 kunmap_atomic(mem); 961 962 compress_again: 963 zstrm = zcomp_stream_get(zram->comp); 964 src = kmap_atomic(page); 965 ret = zcomp_compress(zstrm, src, &comp_len); 966 kunmap_atomic(src); 967 968 if (unlikely(ret)) { 969 zcomp_stream_put(zram->comp); 970 pr_err("Compression failed! err=%d\n", ret); 971 zs_free(zram->mem_pool, handle); 972 return ret; 973 } 974 975 if (unlikely(comp_len >= huge_class_size)) { 976 if (zram_wb_enabled(zram) && allow_wb) { 977 zcomp_stream_put(zram->comp); 978 ret = write_to_bdev(zram, bvec, index, bio, &element); 979 if (!ret) { 980 flags = ZRAM_WB; 981 ret = 1; 982 goto out; 983 } 984 allow_wb = false; 985 goto compress_again; 986 } 987 comp_len = PAGE_SIZE; 988 } 989 990 /* 991 * handle allocation has 2 paths: 992 * a) fast path is executed with preemption disabled (for 993 * per-cpu streams) and has __GFP_DIRECT_RECLAIM bit clear, 994 * since we can't sleep; 995 * b) slow path enables preemption and attempts to allocate 996 * the page with __GFP_DIRECT_RECLAIM bit set. we have to 997 * put per-cpu compression stream and, thus, to re-do 998 * the compression once handle is allocated. 999 * 1000 * if we have a 'non-null' handle here then we are coming 1001 * from the slow path and handle has already been allocated. 1002 */ 1003 if (!handle) 1004 handle = zs_malloc(zram->mem_pool, comp_len, 1005 __GFP_KSWAPD_RECLAIM | 1006 __GFP_NOWARN | 1007 __GFP_HIGHMEM | 1008 __GFP_MOVABLE); 1009 if (!handle) { 1010 zcomp_stream_put(zram->comp); 1011 atomic64_inc(&zram->stats.writestall); 1012 handle = zs_malloc(zram->mem_pool, comp_len, 1013 GFP_NOIO | __GFP_HIGHMEM | 1014 __GFP_MOVABLE); 1015 if (handle) 1016 goto compress_again; 1017 return -ENOMEM; 1018 } 1019 1020 alloced_pages = zs_get_total_pages(zram->mem_pool); 1021 update_used_max(zram, alloced_pages); 1022 1023 if (zram->limit_pages && alloced_pages > zram->limit_pages) { 1024 zcomp_stream_put(zram->comp); 1025 zs_free(zram->mem_pool, handle); 1026 return -ENOMEM; 1027 } 1028 1029 dst = zs_map_object(zram->mem_pool, handle, ZS_MM_WO); 1030 1031 src = zstrm->buffer; 1032 if (comp_len == PAGE_SIZE) 1033 src = kmap_atomic(page); 1034 memcpy(dst, src, comp_len); 1035 if (comp_len == PAGE_SIZE) 1036 kunmap_atomic(src); 1037 1038 zcomp_stream_put(zram->comp); 1039 zs_unmap_object(zram->mem_pool, handle); 1040 atomic64_add(comp_len, &zram->stats.compr_data_size); 1041 out: 1042 /* 1043 * Free memory associated with this sector 1044 * before overwriting unused sectors. 1045 */ 1046 zram_slot_lock(zram, index); 1047 zram_free_page(zram, index); 1048 1049 if (flags) { 1050 zram_set_flag(zram, index, flags); 1051 zram_set_element(zram, index, element); 1052 } else { 1053 zram_set_handle(zram, index, handle); 1054 zram_set_obj_size(zram, index, comp_len); 1055 } 1056 zram_slot_unlock(zram, index); 1057 1058 /* Update stats */ 1059 atomic64_inc(&zram->stats.pages_stored); 1060 return ret; 1061 } 1062 1063 static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, 1064 u32 index, int offset, struct bio *bio) 1065 { 1066 int ret; 1067 struct page *page = NULL; 1068 void *src; 1069 struct bio_vec vec; 1070 1071 vec = *bvec; 1072 if (is_partial_io(bvec)) { 1073 void *dst; 1074 /* 1075 * This is a partial IO. We need to read the full page 1076 * before to write the changes. 1077 */ 1078 page = alloc_page(GFP_NOIO|__GFP_HIGHMEM); 1079 if (!page) 1080 return -ENOMEM; 1081 1082 ret = __zram_bvec_read(zram, page, index, bio, true); 1083 if (ret) 1084 goto out; 1085 1086 src = kmap_atomic(bvec->bv_page); 1087 dst = kmap_atomic(page); 1088 memcpy(dst + offset, src + bvec->bv_offset, bvec->bv_len); 1089 kunmap_atomic(dst); 1090 kunmap_atomic(src); 1091 1092 vec.bv_page = page; 1093 vec.bv_len = PAGE_SIZE; 1094 vec.bv_offset = 0; 1095 } 1096 1097 ret = __zram_bvec_write(zram, &vec, index, bio); 1098 out: 1099 if (is_partial_io(bvec)) 1100 __free_page(page); 1101 return ret; 1102 } 1103 1104 /* 1105 * zram_bio_discard - handler on discard request 1106 * @index: physical block index in PAGE_SIZE units 1107 * @offset: byte offset within physical block 1108 */ 1109 static void zram_bio_discard(struct zram *zram, u32 index, 1110 int offset, struct bio *bio) 1111 { 1112 size_t n = bio->bi_iter.bi_size; 1113 1114 /* 1115 * zram manages data in physical block size units. Because logical block 1116 * size isn't identical with physical block size on some arch, we 1117 * could get a discard request pointing to a specific offset within a 1118 * certain physical block. Although we can handle this request by 1119 * reading that physiclal block and decompressing and partially zeroing 1120 * and re-compressing and then re-storing it, this isn't reasonable 1121 * because our intent with a discard request is to save memory. So 1122 * skipping this logical block is appropriate here. 1123 */ 1124 if (offset) { 1125 if (n <= (PAGE_SIZE - offset)) 1126 return; 1127 1128 n -= (PAGE_SIZE - offset); 1129 index++; 1130 } 1131 1132 while (n >= PAGE_SIZE) { 1133 zram_slot_lock(zram, index); 1134 zram_free_page(zram, index); 1135 zram_slot_unlock(zram, index); 1136 atomic64_inc(&zram->stats.notify_free); 1137 index++; 1138 n -= PAGE_SIZE; 1139 } 1140 } 1141 1142 /* 1143 * Returns errno if it has some problem. Otherwise return 0 or 1. 1144 * Returns 0 if IO request was done synchronously 1145 * Returns 1 if IO request was successfully submitted. 1146 */ 1147 static int zram_bvec_rw(struct zram *zram, struct bio_vec *bvec, u32 index, 1148 int offset, bool is_write, struct bio *bio) 1149 { 1150 unsigned long start_time = jiffies; 1151 int rw_acct = is_write ? REQ_OP_WRITE : REQ_OP_READ; 1152 struct request_queue *q = zram->disk->queue; 1153 int ret; 1154 1155 generic_start_io_acct(q, rw_acct, bvec->bv_len >> SECTOR_SHIFT, 1156 &zram->disk->part0); 1157 1158 if (!is_write) { 1159 atomic64_inc(&zram->stats.num_reads); 1160 ret = zram_bvec_read(zram, bvec, index, offset, bio); 1161 flush_dcache_page(bvec->bv_page); 1162 } else { 1163 atomic64_inc(&zram->stats.num_writes); 1164 ret = zram_bvec_write(zram, bvec, index, offset, bio); 1165 } 1166 1167 generic_end_io_acct(q, rw_acct, &zram->disk->part0, start_time); 1168 1169 if (unlikely(ret < 0)) { 1170 if (!is_write) 1171 atomic64_inc(&zram->stats.failed_reads); 1172 else 1173 atomic64_inc(&zram->stats.failed_writes); 1174 } 1175 1176 return ret; 1177 } 1178 1179 static void __zram_make_request(struct zram *zram, struct bio *bio) 1180 { 1181 int offset; 1182 u32 index; 1183 struct bio_vec bvec; 1184 struct bvec_iter iter; 1185 1186 index = bio->bi_iter.bi_sector >> SECTORS_PER_PAGE_SHIFT; 1187 offset = (bio->bi_iter.bi_sector & 1188 (SECTORS_PER_PAGE - 1)) << SECTOR_SHIFT; 1189 1190 switch (bio_op(bio)) { 1191 case REQ_OP_DISCARD: 1192 case REQ_OP_WRITE_ZEROES: 1193 zram_bio_discard(zram, index, offset, bio); 1194 bio_endio(bio); 1195 return; 1196 default: 1197 break; 1198 } 1199 1200 bio_for_each_segment(bvec, bio, iter) { 1201 struct bio_vec bv = bvec; 1202 unsigned int unwritten = bvec.bv_len; 1203 1204 do { 1205 bv.bv_len = min_t(unsigned int, PAGE_SIZE - offset, 1206 unwritten); 1207 if (zram_bvec_rw(zram, &bv, index, offset, 1208 op_is_write(bio_op(bio)), bio) < 0) 1209 goto out; 1210 1211 bv.bv_offset += bv.bv_len; 1212 unwritten -= bv.bv_len; 1213 1214 update_position(&index, &offset, &bv); 1215 } while (unwritten); 1216 } 1217 1218 bio_endio(bio); 1219 return; 1220 1221 out: 1222 bio_io_error(bio); 1223 } 1224 1225 /* 1226 * Handler function for all zram I/O requests. 1227 */ 1228 static blk_qc_t zram_make_request(struct request_queue *queue, struct bio *bio) 1229 { 1230 struct zram *zram = queue->queuedata; 1231 1232 if (!valid_io_request(zram, bio->bi_iter.bi_sector, 1233 bio->bi_iter.bi_size)) { 1234 atomic64_inc(&zram->stats.invalid_io); 1235 goto error; 1236 } 1237 1238 __zram_make_request(zram, bio); 1239 return BLK_QC_T_NONE; 1240 1241 error: 1242 bio_io_error(bio); 1243 return BLK_QC_T_NONE; 1244 } 1245 1246 static void zram_slot_free_notify(struct block_device *bdev, 1247 unsigned long index) 1248 { 1249 struct zram *zram; 1250 1251 zram = bdev->bd_disk->private_data; 1252 1253 zram_slot_lock(zram, index); 1254 zram_free_page(zram, index); 1255 zram_slot_unlock(zram, index); 1256 atomic64_inc(&zram->stats.notify_free); 1257 } 1258 1259 static int zram_rw_page(struct block_device *bdev, sector_t sector, 1260 struct page *page, bool is_write) 1261 { 1262 int offset, ret; 1263 u32 index; 1264 struct zram *zram; 1265 struct bio_vec bv; 1266 1267 if (PageTransHuge(page)) 1268 return -ENOTSUPP; 1269 zram = bdev->bd_disk->private_data; 1270 1271 if (!valid_io_request(zram, sector, PAGE_SIZE)) { 1272 atomic64_inc(&zram->stats.invalid_io); 1273 ret = -EINVAL; 1274 goto out; 1275 } 1276 1277 index = sector >> SECTORS_PER_PAGE_SHIFT; 1278 offset = (sector & (SECTORS_PER_PAGE - 1)) << SECTOR_SHIFT; 1279 1280 bv.bv_page = page; 1281 bv.bv_len = PAGE_SIZE; 1282 bv.bv_offset = 0; 1283 1284 ret = zram_bvec_rw(zram, &bv, index, offset, is_write, NULL); 1285 out: 1286 /* 1287 * If I/O fails, just return error(ie, non-zero) without 1288 * calling page_endio. 1289 * It causes resubmit the I/O with bio request by upper functions 1290 * of rw_page(e.g., swap_readpage, __swap_writepage) and 1291 * bio->bi_end_io does things to handle the error 1292 * (e.g., SetPageError, set_page_dirty and extra works). 1293 */ 1294 if (unlikely(ret < 0)) 1295 return ret; 1296 1297 switch (ret) { 1298 case 0: 1299 page_endio(page, is_write, 0); 1300 break; 1301 case 1: 1302 ret = 0; 1303 break; 1304 default: 1305 WARN_ON(1); 1306 } 1307 return ret; 1308 } 1309 1310 static void zram_reset_device(struct zram *zram) 1311 { 1312 struct zcomp *comp; 1313 u64 disksize; 1314 1315 down_write(&zram->init_lock); 1316 1317 zram->limit_pages = 0; 1318 1319 if (!init_done(zram)) { 1320 up_write(&zram->init_lock); 1321 return; 1322 } 1323 1324 comp = zram->comp; 1325 disksize = zram->disksize; 1326 zram->disksize = 0; 1327 1328 set_capacity(zram->disk, 0); 1329 part_stat_set_all(&zram->disk->part0, 0); 1330 1331 up_write(&zram->init_lock); 1332 /* I/O operation under all of CPU are done so let's free */ 1333 zram_meta_free(zram, disksize); 1334 memset(&zram->stats, 0, sizeof(zram->stats)); 1335 zcomp_destroy(comp); 1336 reset_bdev(zram); 1337 } 1338 1339 static ssize_t disksize_store(struct device *dev, 1340 struct device_attribute *attr, const char *buf, size_t len) 1341 { 1342 u64 disksize; 1343 struct zcomp *comp; 1344 struct zram *zram = dev_to_zram(dev); 1345 int err; 1346 1347 disksize = memparse(buf, NULL); 1348 if (!disksize) 1349 return -EINVAL; 1350 1351 down_write(&zram->init_lock); 1352 if (init_done(zram)) { 1353 pr_info("Cannot change disksize for initialized device\n"); 1354 err = -EBUSY; 1355 goto out_unlock; 1356 } 1357 1358 disksize = PAGE_ALIGN(disksize); 1359 if (!zram_meta_alloc(zram, disksize)) { 1360 err = -ENOMEM; 1361 goto out_unlock; 1362 } 1363 1364 comp = zcomp_create(zram->compressor); 1365 if (IS_ERR(comp)) { 1366 pr_err("Cannot initialise %s compressing backend\n", 1367 zram->compressor); 1368 err = PTR_ERR(comp); 1369 goto out_free_meta; 1370 } 1371 1372 zram->comp = comp; 1373 zram->disksize = disksize; 1374 set_capacity(zram->disk, zram->disksize >> SECTOR_SHIFT); 1375 1376 revalidate_disk(zram->disk); 1377 up_write(&zram->init_lock); 1378 1379 return len; 1380 1381 out_free_meta: 1382 zram_meta_free(zram, disksize); 1383 out_unlock: 1384 up_write(&zram->init_lock); 1385 return err; 1386 } 1387 1388 static ssize_t reset_store(struct device *dev, 1389 struct device_attribute *attr, const char *buf, size_t len) 1390 { 1391 int ret; 1392 unsigned short do_reset; 1393 struct zram *zram; 1394 struct block_device *bdev; 1395 1396 ret = kstrtou16(buf, 10, &do_reset); 1397 if (ret) 1398 return ret; 1399 1400 if (!do_reset) 1401 return -EINVAL; 1402 1403 zram = dev_to_zram(dev); 1404 bdev = bdget_disk(zram->disk, 0); 1405 if (!bdev) 1406 return -ENOMEM; 1407 1408 mutex_lock(&bdev->bd_mutex); 1409 /* Do not reset an active device or claimed device */ 1410 if (bdev->bd_openers || zram->claim) { 1411 mutex_unlock(&bdev->bd_mutex); 1412 bdput(bdev); 1413 return -EBUSY; 1414 } 1415 1416 /* From now on, anyone can't open /dev/zram[0-9] */ 1417 zram->claim = true; 1418 mutex_unlock(&bdev->bd_mutex); 1419 1420 /* Make sure all the pending I/O are finished */ 1421 fsync_bdev(bdev); 1422 zram_reset_device(zram); 1423 revalidate_disk(zram->disk); 1424 bdput(bdev); 1425 1426 mutex_lock(&bdev->bd_mutex); 1427 zram->claim = false; 1428 mutex_unlock(&bdev->bd_mutex); 1429 1430 return len; 1431 } 1432 1433 static int zram_open(struct block_device *bdev, fmode_t mode) 1434 { 1435 int ret = 0; 1436 struct zram *zram; 1437 1438 WARN_ON(!mutex_is_locked(&bdev->bd_mutex)); 1439 1440 zram = bdev->bd_disk->private_data; 1441 /* zram was claimed to reset so open request fails */ 1442 if (zram->claim) 1443 ret = -EBUSY; 1444 1445 return ret; 1446 } 1447 1448 static const struct block_device_operations zram_devops = { 1449 .open = zram_open, 1450 .swap_slot_free_notify = zram_slot_free_notify, 1451 .rw_page = zram_rw_page, 1452 .owner = THIS_MODULE 1453 }; 1454 1455 static DEVICE_ATTR_WO(compact); 1456 static DEVICE_ATTR_RW(disksize); 1457 static DEVICE_ATTR_RO(initstate); 1458 static DEVICE_ATTR_WO(reset); 1459 static DEVICE_ATTR_WO(mem_limit); 1460 static DEVICE_ATTR_WO(mem_used_max); 1461 static DEVICE_ATTR_RW(max_comp_streams); 1462 static DEVICE_ATTR_RW(comp_algorithm); 1463 #ifdef CONFIG_ZRAM_WRITEBACK 1464 static DEVICE_ATTR_RW(backing_dev); 1465 #endif 1466 1467 static struct attribute *zram_disk_attrs[] = { 1468 &dev_attr_disksize.attr, 1469 &dev_attr_initstate.attr, 1470 &dev_attr_reset.attr, 1471 &dev_attr_compact.attr, 1472 &dev_attr_mem_limit.attr, 1473 &dev_attr_mem_used_max.attr, 1474 &dev_attr_max_comp_streams.attr, 1475 &dev_attr_comp_algorithm.attr, 1476 #ifdef CONFIG_ZRAM_WRITEBACK 1477 &dev_attr_backing_dev.attr, 1478 #endif 1479 &dev_attr_io_stat.attr, 1480 &dev_attr_mm_stat.attr, 1481 &dev_attr_debug_stat.attr, 1482 NULL, 1483 }; 1484 1485 static const struct attribute_group zram_disk_attr_group = { 1486 .attrs = zram_disk_attrs, 1487 }; 1488 1489 /* 1490 * Allocate and initialize new zram device. the function returns 1491 * '>= 0' device_id upon success, and negative value otherwise. 1492 */ 1493 static int zram_add(void) 1494 { 1495 struct zram *zram; 1496 struct request_queue *queue; 1497 int ret, device_id; 1498 1499 zram = kzalloc(sizeof(struct zram), GFP_KERNEL); 1500 if (!zram) 1501 return -ENOMEM; 1502 1503 ret = idr_alloc(&zram_index_idr, zram, 0, 0, GFP_KERNEL); 1504 if (ret < 0) 1505 goto out_free_dev; 1506 device_id = ret; 1507 1508 init_rwsem(&zram->init_lock); 1509 1510 queue = blk_alloc_queue(GFP_KERNEL); 1511 if (!queue) { 1512 pr_err("Error allocating disk queue for device %d\n", 1513 device_id); 1514 ret = -ENOMEM; 1515 goto out_free_idr; 1516 } 1517 1518 blk_queue_make_request(queue, zram_make_request); 1519 1520 /* gendisk structure */ 1521 zram->disk = alloc_disk(1); 1522 if (!zram->disk) { 1523 pr_err("Error allocating disk structure for device %d\n", 1524 device_id); 1525 ret = -ENOMEM; 1526 goto out_free_queue; 1527 } 1528 1529 zram->disk->major = zram_major; 1530 zram->disk->first_minor = device_id; 1531 zram->disk->fops = &zram_devops; 1532 zram->disk->queue = queue; 1533 zram->disk->queue->queuedata = zram; 1534 zram->disk->private_data = zram; 1535 snprintf(zram->disk->disk_name, 16, "zram%d", device_id); 1536 1537 /* Actual capacity set using syfs (/sys/block/zram<id>/disksize */ 1538 set_capacity(zram->disk, 0); 1539 /* zram devices sort of resembles non-rotational disks */ 1540 blk_queue_flag_set(QUEUE_FLAG_NONROT, zram->disk->queue); 1541 blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, zram->disk->queue); 1542 1543 /* 1544 * To ensure that we always get PAGE_SIZE aligned 1545 * and n*PAGE_SIZED sized I/O requests. 1546 */ 1547 blk_queue_physical_block_size(zram->disk->queue, PAGE_SIZE); 1548 blk_queue_logical_block_size(zram->disk->queue, 1549 ZRAM_LOGICAL_BLOCK_SIZE); 1550 blk_queue_io_min(zram->disk->queue, PAGE_SIZE); 1551 blk_queue_io_opt(zram->disk->queue, PAGE_SIZE); 1552 zram->disk->queue->limits.discard_granularity = PAGE_SIZE; 1553 blk_queue_max_discard_sectors(zram->disk->queue, UINT_MAX); 1554 blk_queue_flag_set(QUEUE_FLAG_DISCARD, zram->disk->queue); 1555 1556 /* 1557 * zram_bio_discard() will clear all logical blocks if logical block 1558 * size is identical with physical block size(PAGE_SIZE). But if it is 1559 * different, we will skip discarding some parts of logical blocks in 1560 * the part of the request range which isn't aligned to physical block 1561 * size. So we can't ensure that all discarded logical blocks are 1562 * zeroed. 1563 */ 1564 if (ZRAM_LOGICAL_BLOCK_SIZE == PAGE_SIZE) 1565 blk_queue_max_write_zeroes_sectors(zram->disk->queue, UINT_MAX); 1566 1567 zram->disk->queue->backing_dev_info->capabilities |= 1568 (BDI_CAP_STABLE_WRITES | BDI_CAP_SYNCHRONOUS_IO); 1569 add_disk(zram->disk); 1570 1571 ret = sysfs_create_group(&disk_to_dev(zram->disk)->kobj, 1572 &zram_disk_attr_group); 1573 if (ret < 0) { 1574 pr_err("Error creating sysfs group for device %d\n", 1575 device_id); 1576 goto out_free_disk; 1577 } 1578 strlcpy(zram->compressor, default_compressor, sizeof(zram->compressor)); 1579 1580 pr_info("Added device: %s\n", zram->disk->disk_name); 1581 return device_id; 1582 1583 out_free_disk: 1584 del_gendisk(zram->disk); 1585 put_disk(zram->disk); 1586 out_free_queue: 1587 blk_cleanup_queue(queue); 1588 out_free_idr: 1589 idr_remove(&zram_index_idr, device_id); 1590 out_free_dev: 1591 kfree(zram); 1592 return ret; 1593 } 1594 1595 static int zram_remove(struct zram *zram) 1596 { 1597 struct block_device *bdev; 1598 1599 bdev = bdget_disk(zram->disk, 0); 1600 if (!bdev) 1601 return -ENOMEM; 1602 1603 mutex_lock(&bdev->bd_mutex); 1604 if (bdev->bd_openers || zram->claim) { 1605 mutex_unlock(&bdev->bd_mutex); 1606 bdput(bdev); 1607 return -EBUSY; 1608 } 1609 1610 zram->claim = true; 1611 mutex_unlock(&bdev->bd_mutex); 1612 1613 /* 1614 * Remove sysfs first, so no one will perform a disksize 1615 * store while we destroy the devices. This also helps during 1616 * hot_remove -- zram_reset_device() is the last holder of 1617 * ->init_lock, no later/concurrent disksize_store() or any 1618 * other sysfs handlers are possible. 1619 */ 1620 sysfs_remove_group(&disk_to_dev(zram->disk)->kobj, 1621 &zram_disk_attr_group); 1622 1623 /* Make sure all the pending I/O are finished */ 1624 fsync_bdev(bdev); 1625 zram_reset_device(zram); 1626 bdput(bdev); 1627 1628 pr_info("Removed device: %s\n", zram->disk->disk_name); 1629 1630 del_gendisk(zram->disk); 1631 blk_cleanup_queue(zram->disk->queue); 1632 put_disk(zram->disk); 1633 kfree(zram); 1634 return 0; 1635 } 1636 1637 /* zram-control sysfs attributes */ 1638 1639 /* 1640 * NOTE: hot_add attribute is not the usual read-only sysfs attribute. In a 1641 * sense that reading from this file does alter the state of your system -- it 1642 * creates a new un-initialized zram device and returns back this device's 1643 * device_id (or an error code if it fails to create a new device). 1644 */ 1645 static ssize_t hot_add_show(struct class *class, 1646 struct class_attribute *attr, 1647 char *buf) 1648 { 1649 int ret; 1650 1651 mutex_lock(&zram_index_mutex); 1652 ret = zram_add(); 1653 mutex_unlock(&zram_index_mutex); 1654 1655 if (ret < 0) 1656 return ret; 1657 return scnprintf(buf, PAGE_SIZE, "%d\n", ret); 1658 } 1659 static CLASS_ATTR_RO(hot_add); 1660 1661 static ssize_t hot_remove_store(struct class *class, 1662 struct class_attribute *attr, 1663 const char *buf, 1664 size_t count) 1665 { 1666 struct zram *zram; 1667 int ret, dev_id; 1668 1669 /* dev_id is gendisk->first_minor, which is `int' */ 1670 ret = kstrtoint(buf, 10, &dev_id); 1671 if (ret) 1672 return ret; 1673 if (dev_id < 0) 1674 return -EINVAL; 1675 1676 mutex_lock(&zram_index_mutex); 1677 1678 zram = idr_find(&zram_index_idr, dev_id); 1679 if (zram) { 1680 ret = zram_remove(zram); 1681 if (!ret) 1682 idr_remove(&zram_index_idr, dev_id); 1683 } else { 1684 ret = -ENODEV; 1685 } 1686 1687 mutex_unlock(&zram_index_mutex); 1688 return ret ? ret : count; 1689 } 1690 static CLASS_ATTR_WO(hot_remove); 1691 1692 static struct attribute *zram_control_class_attrs[] = { 1693 &class_attr_hot_add.attr, 1694 &class_attr_hot_remove.attr, 1695 NULL, 1696 }; 1697 ATTRIBUTE_GROUPS(zram_control_class); 1698 1699 static struct class zram_control_class = { 1700 .name = "zram-control", 1701 .owner = THIS_MODULE, 1702 .class_groups = zram_control_class_groups, 1703 }; 1704 1705 static int zram_remove_cb(int id, void *ptr, void *data) 1706 { 1707 zram_remove(ptr); 1708 return 0; 1709 } 1710 1711 static void destroy_devices(void) 1712 { 1713 class_unregister(&zram_control_class); 1714 idr_for_each(&zram_index_idr, &zram_remove_cb, NULL); 1715 idr_destroy(&zram_index_idr); 1716 unregister_blkdev(zram_major, "zram"); 1717 cpuhp_remove_multi_state(CPUHP_ZCOMP_PREPARE); 1718 } 1719 1720 static int __init zram_init(void) 1721 { 1722 int ret; 1723 1724 ret = cpuhp_setup_state_multi(CPUHP_ZCOMP_PREPARE, "block/zram:prepare", 1725 zcomp_cpu_up_prepare, zcomp_cpu_dead); 1726 if (ret < 0) 1727 return ret; 1728 1729 ret = class_register(&zram_control_class); 1730 if (ret) { 1731 pr_err("Unable to register zram-control class\n"); 1732 cpuhp_remove_multi_state(CPUHP_ZCOMP_PREPARE); 1733 return ret; 1734 } 1735 1736 zram_major = register_blkdev(0, "zram"); 1737 if (zram_major <= 0) { 1738 pr_err("Unable to get major number\n"); 1739 class_unregister(&zram_control_class); 1740 cpuhp_remove_multi_state(CPUHP_ZCOMP_PREPARE); 1741 return -EBUSY; 1742 } 1743 1744 while (num_devices != 0) { 1745 mutex_lock(&zram_index_mutex); 1746 ret = zram_add(); 1747 mutex_unlock(&zram_index_mutex); 1748 if (ret < 0) 1749 goto out_error; 1750 num_devices--; 1751 } 1752 1753 return 0; 1754 1755 out_error: 1756 destroy_devices(); 1757 return ret; 1758 } 1759 1760 static void __exit zram_exit(void) 1761 { 1762 destroy_devices(); 1763 } 1764 1765 module_init(zram_init); 1766 module_exit(zram_exit); 1767 1768 module_param(num_devices, uint, 0); 1769 MODULE_PARM_DESC(num_devices, "Number of pre-created zram devices"); 1770 1771 MODULE_LICENSE("Dual BSD/GPL"); 1772 MODULE_AUTHOR("Nitin Gupta <ngupta@vflare.org>"); 1773 MODULE_DESCRIPTION("Compressed RAM Block Device"); 1774