linux/drivers/staging/zram/zram_drv.c
<<
>>
Prefs
   1/*
   2 * Compressed RAM block device
   3 *
   4 * Copyright (C) 2008, 2009, 2010  Nitin Gupta
   5 *
   6 * This code is released using a dual license strategy: BSD/GPL
   7 * You can choose the licence that better fits your requirements.
   8 *
   9 * Released under the terms of 3-clause BSD License
  10 * Released under the terms of GNU General Public License Version 2.0
  11 *
  12 * Project home: http://compcache.googlecode.com
  13 */
  14
  15#define KMSG_COMPONENT "zram"
  16#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
  17
  18#ifdef CONFIG_ZRAM_DEBUG
  19#define DEBUG
  20#endif
  21
  22#include <linux/module.h>
  23#include <linux/kernel.h>
  24#include <linux/bio.h>
  25#include <linux/bitops.h>
  26#include <linux/blkdev.h>
  27#include <linux/buffer_head.h>
  28#include <linux/device.h>
  29#include <linux/genhd.h>
  30#include <linux/highmem.h>
  31#include <linux/slab.h>
  32#include <linux/lzo.h>
  33#include <linux/string.h>
  34#include <linux/vmalloc.h>
  35
  36#include "zram_drv.h"
  37
  38/* Globals */
  39static int zram_major;
  40static struct zram *zram_devices;
  41
  42/* Module params (documentation at end) */
  43static unsigned int num_devices = 1;
  44
  45static inline struct zram *dev_to_zram(struct device *dev)
  46{
  47        return (struct zram *)dev_to_disk(dev)->private_data;
  48}
  49
  50static ssize_t disksize_show(struct device *dev,
  51                struct device_attribute *attr, char *buf)
  52{
  53        struct zram *zram = dev_to_zram(dev);
  54
  55        return sprintf(buf, "%llu\n", zram->disksize);
  56}
  57
  58static ssize_t initstate_show(struct device *dev,
  59                struct device_attribute *attr, char *buf)
  60{
  61        struct zram *zram = dev_to_zram(dev);
  62
  63        return sprintf(buf, "%u\n", zram->init_done);
  64}
  65
  66static ssize_t num_reads_show(struct device *dev,
  67                struct device_attribute *attr, char *buf)
  68{
  69        struct zram *zram = dev_to_zram(dev);
  70
  71        return sprintf(buf, "%llu\n",
  72                        (u64)atomic64_read(&zram->stats.num_reads));
  73}
  74
  75static ssize_t num_writes_show(struct device *dev,
  76                struct device_attribute *attr, char *buf)
  77{
  78        struct zram *zram = dev_to_zram(dev);
  79
  80        return sprintf(buf, "%llu\n",
  81                        (u64)atomic64_read(&zram->stats.num_writes));
  82}
  83
  84static ssize_t invalid_io_show(struct device *dev,
  85                struct device_attribute *attr, char *buf)
  86{
  87        struct zram *zram = dev_to_zram(dev);
  88
  89        return sprintf(buf, "%llu\n",
  90                        (u64)atomic64_read(&zram->stats.invalid_io));
  91}
  92
  93static ssize_t notify_free_show(struct device *dev,
  94                struct device_attribute *attr, char *buf)
  95{
  96        struct zram *zram = dev_to_zram(dev);
  97
  98        return sprintf(buf, "%llu\n",
  99                        (u64)atomic64_read(&zram->stats.notify_free));
 100}
 101
 102static ssize_t zero_pages_show(struct device *dev,
 103                struct device_attribute *attr, char *buf)
 104{
 105        struct zram *zram = dev_to_zram(dev);
 106
 107        return sprintf(buf, "%u\n", zram->stats.pages_zero);
 108}
 109
 110static ssize_t orig_data_size_show(struct device *dev,
 111                struct device_attribute *attr, char *buf)
 112{
 113        struct zram *zram = dev_to_zram(dev);
 114
 115        return sprintf(buf, "%llu\n",
 116                (u64)(zram->stats.pages_stored) << PAGE_SHIFT);
 117}
 118
 119static ssize_t compr_data_size_show(struct device *dev,
 120                struct device_attribute *attr, char *buf)
 121{
 122        struct zram *zram = dev_to_zram(dev);
 123
 124        return sprintf(buf, "%llu\n",
 125                        (u64)atomic64_read(&zram->stats.compr_size));
 126}
 127
 128static ssize_t mem_used_total_show(struct device *dev,
 129                struct device_attribute *attr, char *buf)
 130{
 131        u64 val = 0;
 132        struct zram *zram = dev_to_zram(dev);
 133        struct zram_meta *meta = zram->meta;
 134
 135        down_read(&zram->init_lock);
 136        if (zram->init_done)
 137                val = zs_get_total_size_bytes(meta->mem_pool);
 138        up_read(&zram->init_lock);
 139
 140        return sprintf(buf, "%llu\n", val);
 141}
 142
 143static int zram_test_flag(struct zram_meta *meta, u32 index,
 144                        enum zram_pageflags flag)
 145{
 146        return meta->table[index].flags & BIT(flag);
 147}
 148
 149static void zram_set_flag(struct zram_meta *meta, u32 index,
 150                        enum zram_pageflags flag)
 151{
 152        meta->table[index].flags |= BIT(flag);
 153}
 154
 155static void zram_clear_flag(struct zram_meta *meta, u32 index,
 156                        enum zram_pageflags flag)
 157{
 158        meta->table[index].flags &= ~BIT(flag);
 159}
 160
 161static inline int is_partial_io(struct bio_vec *bvec)
 162{
 163        return bvec->bv_len != PAGE_SIZE;
 164}
 165
 166/*
 167 * Check if request is within bounds and aligned on zram logical blocks.
 168 */
 169static inline int valid_io_request(struct zram *zram, struct bio *bio)
 170{
 171        u64 start, end, bound;
 172
 173        /* unaligned request */
 174        if (unlikely(bio->bi_sector & (ZRAM_SECTOR_PER_LOGICAL_BLOCK - 1)))
 175                return 0;
 176        if (unlikely(bio->bi_size & (ZRAM_LOGICAL_BLOCK_SIZE - 1)))
 177                return 0;
 178
 179        start = bio->bi_sector;
 180        end = start + (bio->bi_size >> SECTOR_SHIFT);
 181        bound = zram->disksize >> SECTOR_SHIFT;
 182        /* out of range range */
 183        if (unlikely(start >= bound || end > bound || start > end))
 184                return 0;
 185
 186        /* I/O request is valid */
 187        return 1;
 188}
 189
 190static void zram_meta_free(struct zram_meta *meta)
 191{
 192        zs_destroy_pool(meta->mem_pool);
 193        kfree(meta->compress_workmem);
 194        free_pages((unsigned long)meta->compress_buffer, 1);
 195        vfree(meta->table);
 196        kfree(meta);
 197}
 198
 199static struct zram_meta *zram_meta_alloc(u64 disksize)
 200{
 201        size_t num_pages;
 202        struct zram_meta *meta = kmalloc(sizeof(*meta), GFP_KERNEL);
 203        if (!meta)
 204                goto out;
 205
 206        meta->compress_workmem = kzalloc(LZO1X_MEM_COMPRESS, GFP_KERNEL);
 207        if (!meta->compress_workmem)
 208                goto free_meta;
 209
 210        meta->compress_buffer =
 211                (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, 1);
 212        if (!meta->compress_buffer) {
 213                pr_err("Error allocating compressor buffer space\n");
 214                goto free_workmem;
 215        }
 216
 217        num_pages = disksize >> PAGE_SHIFT;
 218        meta->table = vzalloc(num_pages * sizeof(*meta->table));
 219        if (!meta->table) {
 220                pr_err("Error allocating zram address table\n");
 221                goto free_buffer;
 222        }
 223
 224        meta->mem_pool = zs_create_pool(GFP_NOIO | __GFP_HIGHMEM);
 225        if (!meta->mem_pool) {
 226                pr_err("Error creating memory pool\n");
 227                goto free_table;
 228        }
 229
 230        return meta;
 231
 232free_table:
 233        vfree(meta->table);
 234free_buffer:
 235        free_pages((unsigned long)meta->compress_buffer, 1);
 236free_workmem:
 237        kfree(meta->compress_workmem);
 238free_meta:
 239        kfree(meta);
 240        meta = NULL;
 241out:
 242        return meta;
 243}
 244
 245static void update_position(u32 *index, int *offset, struct bio_vec *bvec)
 246{
 247        if (*offset + bvec->bv_len >= PAGE_SIZE)
 248                (*index)++;
 249        *offset = (*offset + bvec->bv_len) % PAGE_SIZE;
 250}
 251
 252static int page_zero_filled(void *ptr)
 253{
 254        unsigned int pos;
 255        unsigned long *page;
 256
 257        page = (unsigned long *)ptr;
 258
 259        for (pos = 0; pos != PAGE_SIZE / sizeof(*page); pos++) {
 260                if (page[pos])
 261                        return 0;
 262        }
 263
 264        return 1;
 265}
 266
 267static void handle_zero_page(struct bio_vec *bvec)
 268{
 269        struct page *page = bvec->bv_page;
 270        void *user_mem;
 271
 272        user_mem = kmap_atomic(page);
 273        if (is_partial_io(bvec))
 274                memset(user_mem + bvec->bv_offset, 0, bvec->bv_len);
 275        else
 276                clear_page(user_mem);
 277        kunmap_atomic(user_mem);
 278
 279        flush_dcache_page(page);
 280}
 281
 282static void zram_free_page(struct zram *zram, size_t index)
 283{
 284        struct zram_meta *meta = zram->meta;
 285        unsigned long handle = meta->table[index].handle;
 286        u16 size = meta->table[index].size;
 287
 288        if (unlikely(!handle)) {
 289                /*
 290                 * No memory is allocated for zero filled pages.
 291                 * Simply clear zero page flag.
 292                 */
 293                if (zram_test_flag(meta, index, ZRAM_ZERO)) {
 294                        zram_clear_flag(meta, index, ZRAM_ZERO);
 295                        zram->stats.pages_zero--;
 296                }
 297                return;
 298        }
 299
 300        if (unlikely(size > max_zpage_size))
 301                zram->stats.bad_compress--;
 302
 303        zs_free(meta->mem_pool, handle);
 304
 305        if (size <= PAGE_SIZE / 2)
 306                zram->stats.good_compress--;
 307
 308        atomic64_sub(meta->table[index].size, &zram->stats.compr_size);
 309        zram->stats.pages_stored--;
 310
 311        meta->table[index].handle = 0;
 312        meta->table[index].size = 0;
 313}
 314
 315static int zram_decompress_page(struct zram *zram, char *mem, u32 index)
 316{
 317        int ret = LZO_E_OK;
 318        size_t clen = PAGE_SIZE;
 319        unsigned char *cmem;
 320        struct zram_meta *meta = zram->meta;
 321        unsigned long handle = meta->table[index].handle;
 322
 323        if (!handle || zram_test_flag(meta, index, ZRAM_ZERO)) {
 324                clear_page(mem);
 325                return 0;
 326        }
 327
 328        cmem = zs_map_object(meta->mem_pool, handle, ZS_MM_RO);
 329        if (meta->table[index].size == PAGE_SIZE)
 330                copy_page(mem, cmem);
 331        else
 332                ret = lzo1x_decompress_safe(cmem, meta->table[index].size,
 333                                                mem, &clen);
 334        zs_unmap_object(meta->mem_pool, handle);
 335
 336        /* Should NEVER happen. Return bio error if it does. */
 337        if (unlikely(ret != LZO_E_OK)) {
 338                pr_err("Decompression failed! err=%d, page=%u\n", ret, index);
 339                atomic64_inc(&zram->stats.failed_reads);
 340                return ret;
 341        }
 342
 343        return 0;
 344}
 345
 346static int zram_bvec_read(struct zram *zram, struct bio_vec *bvec,
 347                          u32 index, int offset, struct bio *bio)
 348{
 349        int ret;
 350        struct page *page;
 351        unsigned char *user_mem, *uncmem = NULL;
 352        struct zram_meta *meta = zram->meta;
 353        page = bvec->bv_page;
 354
 355        if (unlikely(!meta->table[index].handle) ||
 356                        zram_test_flag(meta, index, ZRAM_ZERO)) {
 357                handle_zero_page(bvec);
 358                return 0;
 359        }
 360
 361        if (is_partial_io(bvec))
 362                /* Use  a temporary buffer to decompress the page */
 363                uncmem = kmalloc(PAGE_SIZE, GFP_NOIO);
 364
 365        user_mem = kmap_atomic(page);
 366        if (!is_partial_io(bvec))
 367                uncmem = user_mem;
 368
 369        if (!uncmem) {
 370                pr_info("Unable to allocate temp memory\n");
 371                ret = -ENOMEM;
 372                goto out_cleanup;
 373        }
 374
 375        ret = zram_decompress_page(zram, uncmem, index);
 376        /* Should NEVER happen. Return bio error if it does. */
 377        if (unlikely(ret != LZO_E_OK))
 378                goto out_cleanup;
 379
 380        if (is_partial_io(bvec))
 381                memcpy(user_mem + bvec->bv_offset, uncmem + offset,
 382                                bvec->bv_len);
 383
 384        flush_dcache_page(page);
 385        ret = 0;
 386out_cleanup:
 387        kunmap_atomic(user_mem);
 388        if (is_partial_io(bvec))
 389                kfree(uncmem);
 390        return ret;
 391}
 392
 393static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
 394                           int offset)
 395{
 396        int ret = 0;
 397        size_t clen;
 398        unsigned long handle;
 399        struct page *page;
 400        unsigned char *user_mem, *cmem, *src, *uncmem = NULL;
 401        struct zram_meta *meta = zram->meta;
 402
 403        page = bvec->bv_page;
 404        src = meta->compress_buffer;
 405
 406        if (is_partial_io(bvec)) {
 407                /*
 408                 * This is a partial IO. We need to read the full page
 409                 * before to write the changes.
 410                 */
 411                uncmem = kmalloc(PAGE_SIZE, GFP_NOIO);
 412                if (!uncmem) {
 413                        ret = -ENOMEM;
 414                        goto out;
 415                }
 416                ret = zram_decompress_page(zram, uncmem, index);
 417                if (ret)
 418                        goto out;
 419        }
 420
 421        user_mem = kmap_atomic(page);
 422
 423        if (is_partial_io(bvec)) {
 424                memcpy(uncmem + offset, user_mem + bvec->bv_offset,
 425                       bvec->bv_len);
 426                kunmap_atomic(user_mem);
 427                user_mem = NULL;
 428        } else {
 429                uncmem = user_mem;
 430        }
 431
 432        if (page_zero_filled(uncmem)) {
 433                kunmap_atomic(user_mem);
 434                /* Free memory associated with this sector now. */
 435                zram_free_page(zram, index);
 436
 437                zram->stats.pages_zero++;
 438                zram_set_flag(meta, index, ZRAM_ZERO);
 439                ret = 0;
 440                goto out;
 441        }
 442
 443        /*
 444         * zram_slot_free_notify could miss free so that let's
 445         * double check.
 446         */
 447        if (unlikely(meta->table[index].handle ||
 448                        zram_test_flag(meta, index, ZRAM_ZERO)))
 449                zram_free_page(zram, index);
 450
 451        ret = lzo1x_1_compress(uncmem, PAGE_SIZE, src, &clen,
 452                               meta->compress_workmem);
 453
 454        if (!is_partial_io(bvec)) {
 455                kunmap_atomic(user_mem);
 456                user_mem = NULL;
 457                uncmem = NULL;
 458        }
 459
 460        if (unlikely(ret != LZO_E_OK)) {
 461                pr_err("Compression failed! err=%d\n", ret);
 462                goto out;
 463        }
 464
 465        if (unlikely(clen > max_zpage_size)) {
 466                zram->stats.bad_compress++;
 467                clen = PAGE_SIZE;
 468                src = NULL;
 469                if (is_partial_io(bvec))
 470                        src = uncmem;
 471        }
 472
 473        handle = zs_malloc(meta->mem_pool, clen);
 474        if (!handle) {
 475                pr_info("Error allocating memory for compressed page: %u, size=%zu\n",
 476                        index, clen);
 477                ret = -ENOMEM;
 478                goto out;
 479        }
 480        cmem = zs_map_object(meta->mem_pool, handle, ZS_MM_WO);
 481
 482        if ((clen == PAGE_SIZE) && !is_partial_io(bvec)) {
 483                src = kmap_atomic(page);
 484                copy_page(cmem, src);
 485                kunmap_atomic(src);
 486        } else {
 487                memcpy(cmem, src, clen);
 488        }
 489
 490        zs_unmap_object(meta->mem_pool, handle);
 491
 492        /*
 493         * Free memory associated with this sector
 494         * before overwriting unused sectors.
 495         */
 496        zram_free_page(zram, index);
 497
 498        meta->table[index].handle = handle;
 499        meta->table[index].size = clen;
 500
 501        /* Update stats */
 502        atomic64_add(clen, &zram->stats.compr_size);
 503        zram->stats.pages_stored++;
 504        if (clen <= PAGE_SIZE / 2)
 505                zram->stats.good_compress++;
 506
 507out:
 508        if (is_partial_io(bvec))
 509                kfree(uncmem);
 510
 511        if (ret)
 512                atomic64_inc(&zram->stats.failed_writes);
 513        return ret;
 514}
 515
 516static void handle_pending_slot_free(struct zram *zram)
 517{
 518        struct zram_slot_free *free_rq;
 519
 520        spin_lock(&zram->slot_free_lock);
 521        while (zram->slot_free_rq) {
 522                free_rq = zram->slot_free_rq;
 523                zram->slot_free_rq = free_rq->next;
 524                zram_free_page(zram, free_rq->index);
 525                kfree(free_rq);
 526        }
 527        spin_unlock(&zram->slot_free_lock);
 528}
 529
 530static int zram_bvec_rw(struct zram *zram, struct bio_vec *bvec, u32 index,
 531                        int offset, struct bio *bio, int rw)
 532{
 533        int ret;
 534
 535        if (rw == READ) {
 536                down_read(&zram->lock);
 537                handle_pending_slot_free(zram);
 538                ret = zram_bvec_read(zram, bvec, index, offset, bio);
 539                up_read(&zram->lock);
 540        } else {
 541                down_write(&zram->lock);
 542                handle_pending_slot_free(zram);
 543                ret = zram_bvec_write(zram, bvec, index, offset);
 544                up_write(&zram->lock);
 545        }
 546
 547        return ret;
 548}
 549
 550static void zram_reset_device(struct zram *zram, bool reset_capacity)
 551{
 552        size_t index;
 553        struct zram_meta *meta;
 554
 555        flush_work(&zram->free_work);
 556
 557        down_write(&zram->init_lock);
 558        if (!zram->init_done) {
 559                up_write(&zram->init_lock);
 560                return;
 561        }
 562
 563        meta = zram->meta;
 564        zram->init_done = 0;
 565
 566        /* Free all pages that are still in this zram device */
 567        for (index = 0; index < zram->disksize >> PAGE_SHIFT; index++) {
 568                unsigned long handle = meta->table[index].handle;
 569                if (!handle)
 570                        continue;
 571
 572                zs_free(meta->mem_pool, handle);
 573        }
 574
 575        zram_meta_free(zram->meta);
 576        zram->meta = NULL;
 577        /* Reset stats */
 578        memset(&zram->stats, 0, sizeof(zram->stats));
 579
 580        zram->disksize = 0;
 581        if (reset_capacity)
 582                set_capacity(zram->disk, 0);
 583        up_write(&zram->init_lock);
 584}
 585
 586static void zram_init_device(struct zram *zram, struct zram_meta *meta)
 587{
 588        if (zram->disksize > 2 * (totalram_pages << PAGE_SHIFT)) {
 589                pr_info(
 590                "There is little point creating a zram of greater than "
 591                "twice the size of memory since we expect a 2:1 compression "
 592                "ratio. Note that zram uses about 0.1%% of the size of "
 593                "the disk when not in use so a huge zram is "
 594                "wasteful.\n"
 595                "\tMemory Size: %lu kB\n"
 596                "\tSize you selected: %llu kB\n"
 597                "Continuing anyway ...\n",
 598                (totalram_pages << PAGE_SHIFT) >> 10, zram->disksize >> 10
 599                );
 600        }
 601
 602        /* zram devices sort of resembles non-rotational disks */
 603        queue_flag_set_unlocked(QUEUE_FLAG_NONROT, zram->disk->queue);
 604
 605        zram->meta = meta;
 606        zram->init_done = 1;
 607
 608        pr_debug("Initialization done!\n");
 609}
 610
 611static ssize_t disksize_store(struct device *dev,
 612                struct device_attribute *attr, const char *buf, size_t len)
 613{
 614        u64 disksize;
 615        struct zram_meta *meta;
 616        struct zram *zram = dev_to_zram(dev);
 617
 618        disksize = memparse(buf, NULL);
 619        if (!disksize)
 620                return -EINVAL;
 621
 622        disksize = PAGE_ALIGN(disksize);
 623        meta = zram_meta_alloc(disksize);
 624        down_write(&zram->init_lock);
 625        if (zram->init_done) {
 626                up_write(&zram->init_lock);
 627                zram_meta_free(meta);
 628                pr_info("Cannot change disksize for initialized device\n");
 629                return -EBUSY;
 630        }
 631
 632        zram->disksize = disksize;
 633        set_capacity(zram->disk, zram->disksize >> SECTOR_SHIFT);
 634        zram_init_device(zram, meta);
 635        up_write(&zram->init_lock);
 636
 637        return len;
 638}
 639
 640static ssize_t reset_store(struct device *dev,
 641                struct device_attribute *attr, const char *buf, size_t len)
 642{
 643        int ret;
 644        unsigned short do_reset;
 645        struct zram *zram;
 646        struct block_device *bdev;
 647
 648        zram = dev_to_zram(dev);
 649        bdev = bdget_disk(zram->disk, 0);
 650
 651        /* Do not reset an active device! */
 652        if (bdev->bd_holders)
 653                return -EBUSY;
 654
 655        ret = kstrtou16(buf, 10, &do_reset);
 656        if (ret)
 657                return ret;
 658
 659        if (!do_reset)
 660                return -EINVAL;
 661
 662        /* Make sure all pending I/O is finished */
 663        if (bdev)
 664                fsync_bdev(bdev);
 665
 666        zram_reset_device(zram, true);
 667        return len;
 668}
 669
 670static void __zram_make_request(struct zram *zram, struct bio *bio, int rw)
 671{
 672        int i, offset;
 673        u32 index;
 674        struct bio_vec *bvec;
 675
 676        switch (rw) {
 677        case READ:
 678                atomic64_inc(&zram->stats.num_reads);
 679                break;
 680        case WRITE:
 681                atomic64_inc(&zram->stats.num_writes);
 682                break;
 683        }
 684
 685        index = bio->bi_sector >> SECTORS_PER_PAGE_SHIFT;
 686        offset = (bio->bi_sector & (SECTORS_PER_PAGE - 1)) << SECTOR_SHIFT;
 687
 688        bio_for_each_segment(bvec, bio, i) {
 689                int max_transfer_size = PAGE_SIZE - offset;
 690
 691                if (bvec->bv_len > max_transfer_size) {
 692                        /*
 693                         * zram_bvec_rw() can only make operation on a single
 694                         * zram page. Split the bio vector.
 695                         */
 696                        struct bio_vec bv;
 697
 698                        bv.bv_page = bvec->bv_page;
 699                        bv.bv_len = max_transfer_size;
 700                        bv.bv_offset = bvec->bv_offset;
 701
 702                        if (zram_bvec_rw(zram, &bv, index, offset, bio, rw) < 0)
 703                                goto out;
 704
 705                        bv.bv_len = bvec->bv_len - max_transfer_size;
 706                        bv.bv_offset += max_transfer_size;
 707                        if (zram_bvec_rw(zram, &bv, index+1, 0, bio, rw) < 0)
 708                                goto out;
 709                } else
 710                        if (zram_bvec_rw(zram, bvec, index, offset, bio, rw)
 711                            < 0)
 712                                goto out;
 713
 714                update_position(&index, &offset, bvec);
 715        }
 716
 717        set_bit(BIO_UPTODATE, &bio->bi_flags);
 718        bio_endio(bio, 0);
 719        return;
 720
 721out:
 722        bio_io_error(bio);
 723}
 724
 725/*
 726 * Handler function for all zram I/O requests.
 727 */
 728static void zram_make_request(struct request_queue *queue, struct bio *bio)
 729{
 730        struct zram *zram = queue->queuedata;
 731
 732        down_read(&zram->init_lock);
 733        if (unlikely(!zram->init_done))
 734                goto error;
 735
 736        if (!valid_io_request(zram, bio)) {
 737                atomic64_inc(&zram->stats.invalid_io);
 738                goto error;
 739        }
 740
 741        __zram_make_request(zram, bio, bio_data_dir(bio));
 742        up_read(&zram->init_lock);
 743
 744        return;
 745
 746error:
 747        up_read(&zram->init_lock);
 748        bio_io_error(bio);
 749}
 750
 751static void zram_slot_free(struct work_struct *work)
 752{
 753        struct zram *zram;
 754
 755        zram = container_of(work, struct zram, free_work);
 756        down_write(&zram->lock);
 757        handle_pending_slot_free(zram);
 758        up_write(&zram->lock);
 759}
 760
 761static void add_slot_free(struct zram *zram, struct zram_slot_free *free_rq)
 762{
 763        spin_lock(&zram->slot_free_lock);
 764        free_rq->next = zram->slot_free_rq;
 765        zram->slot_free_rq = free_rq;
 766        spin_unlock(&zram->slot_free_lock);
 767}
 768
 769static void zram_slot_free_notify(struct block_device *bdev,
 770                                unsigned long index)
 771{
 772        struct zram *zram;
 773        struct zram_slot_free *free_rq;
 774
 775        zram = bdev->bd_disk->private_data;
 776        atomic64_inc(&zram->stats.notify_free);
 777
 778        free_rq = kmalloc(sizeof(struct zram_slot_free), GFP_ATOMIC);
 779        if (!free_rq)
 780                return;
 781
 782        free_rq->index = index;
 783        add_slot_free(zram, free_rq);
 784        schedule_work(&zram->free_work);
 785}
 786
 787static const struct block_device_operations zram_devops = {
 788        .swap_slot_free_notify = zram_slot_free_notify,
 789        .owner = THIS_MODULE
 790};
 791
 792static DEVICE_ATTR(disksize, S_IRUGO | S_IWUSR,
 793                disksize_show, disksize_store);
 794static DEVICE_ATTR(initstate, S_IRUGO, initstate_show, NULL);
 795static DEVICE_ATTR(reset, S_IWUSR, NULL, reset_store);
 796static DEVICE_ATTR(num_reads, S_IRUGO, num_reads_show, NULL);
 797static DEVICE_ATTR(num_writes, S_IRUGO, num_writes_show, NULL);
 798static DEVICE_ATTR(invalid_io, S_IRUGO, invalid_io_show, NULL);
 799static DEVICE_ATTR(notify_free, S_IRUGO, notify_free_show, NULL);
 800static DEVICE_ATTR(zero_pages, S_IRUGO, zero_pages_show, NULL);
 801static DEVICE_ATTR(orig_data_size, S_IRUGO, orig_data_size_show, NULL);
 802static DEVICE_ATTR(compr_data_size, S_IRUGO, compr_data_size_show, NULL);
 803static DEVICE_ATTR(mem_used_total, S_IRUGO, mem_used_total_show, NULL);
 804
 805static struct attribute *zram_disk_attrs[] = {
 806        &dev_attr_disksize.attr,
 807        &dev_attr_initstate.attr,
 808        &dev_attr_reset.attr,
 809        &dev_attr_num_reads.attr,
 810        &dev_attr_num_writes.attr,
 811        &dev_attr_invalid_io.attr,
 812        &dev_attr_notify_free.attr,
 813        &dev_attr_zero_pages.attr,
 814        &dev_attr_orig_data_size.attr,
 815        &dev_attr_compr_data_size.attr,
 816        &dev_attr_mem_used_total.attr,
 817        NULL,
 818};
 819
 820static struct attribute_group zram_disk_attr_group = {
 821        .attrs = zram_disk_attrs,
 822};
 823
 824static int create_device(struct zram *zram, int device_id)
 825{
 826        int ret = -ENOMEM;
 827
 828        init_rwsem(&zram->lock);
 829        init_rwsem(&zram->init_lock);
 830
 831        INIT_WORK(&zram->free_work, zram_slot_free);
 832        spin_lock_init(&zram->slot_free_lock);
 833        zram->slot_free_rq = NULL;
 834
 835        zram->queue = blk_alloc_queue(GFP_KERNEL);
 836        if (!zram->queue) {
 837                pr_err("Error allocating disk queue for device %d\n",
 838                        device_id);
 839                goto out;
 840        }
 841
 842        blk_queue_make_request(zram->queue, zram_make_request);
 843        zram->queue->queuedata = zram;
 844
 845         /* gendisk structure */
 846        zram->disk = alloc_disk(1);
 847        if (!zram->disk) {
 848                pr_warn("Error allocating disk structure for device %d\n",
 849                        device_id);
 850                goto out_free_queue;
 851        }
 852
 853        zram->disk->major = zram_major;
 854        zram->disk->first_minor = device_id;
 855        zram->disk->fops = &zram_devops;
 856        zram->disk->queue = zram->queue;
 857        zram->disk->private_data = zram;
 858        snprintf(zram->disk->disk_name, 16, "zram%d", device_id);
 859
 860        /* Actual capacity set using syfs (/sys/block/zram<id>/disksize */
 861        set_capacity(zram->disk, 0);
 862
 863        /*
 864         * To ensure that we always get PAGE_SIZE aligned
 865         * and n*PAGE_SIZED sized I/O requests.
 866         */
 867        blk_queue_physical_block_size(zram->disk->queue, PAGE_SIZE);
 868        blk_queue_logical_block_size(zram->disk->queue,
 869                                        ZRAM_LOGICAL_BLOCK_SIZE);
 870        blk_queue_io_min(zram->disk->queue, PAGE_SIZE);
 871        blk_queue_io_opt(zram->disk->queue, PAGE_SIZE);
 872
 873        add_disk(zram->disk);
 874
 875        ret = sysfs_create_group(&disk_to_dev(zram->disk)->kobj,
 876                                &zram_disk_attr_group);
 877        if (ret < 0) {
 878                pr_warn("Error creating sysfs group");
 879                goto out_free_disk;
 880        }
 881
 882        zram->init_done = 0;
 883        return 0;
 884
 885out_free_disk:
 886        del_gendisk(zram->disk);
 887        put_disk(zram->disk);
 888out_free_queue:
 889        blk_cleanup_queue(zram->queue);
 890out:
 891        return ret;
 892}
 893
 894static void destroy_device(struct zram *zram)
 895{
 896        sysfs_remove_group(&disk_to_dev(zram->disk)->kobj,
 897                        &zram_disk_attr_group);
 898
 899        if (zram->disk) {
 900                del_gendisk(zram->disk);
 901                put_disk(zram->disk);
 902        }
 903
 904        if (zram->queue)
 905                blk_cleanup_queue(zram->queue);
 906}
 907
 908static int __init zram_init(void)
 909{
 910        int ret, dev_id;
 911
 912        if (num_devices > max_num_devices) {
 913                pr_warn("Invalid value for num_devices: %u\n",
 914                                num_devices);
 915                ret = -EINVAL;
 916                goto out;
 917        }
 918
 919        zram_major = register_blkdev(0, "zram");
 920        if (zram_major <= 0) {
 921                pr_warn("Unable to get major number\n");
 922                ret = -EBUSY;
 923                goto out;
 924        }
 925
 926        /* Allocate the device array and initialize each one */
 927        zram_devices = kzalloc(num_devices * sizeof(struct zram), GFP_KERNEL);
 928        if (!zram_devices) {
 929                ret = -ENOMEM;
 930                goto unregister;
 931        }
 932
 933        for (dev_id = 0; dev_id < num_devices; dev_id++) {
 934                ret = create_device(&zram_devices[dev_id], dev_id);
 935                if (ret)
 936                        goto free_devices;
 937        }
 938
 939        pr_info("Created %u device(s) ...\n", num_devices);
 940
 941        return 0;
 942
 943free_devices:
 944        while (dev_id)
 945                destroy_device(&zram_devices[--dev_id]);
 946        kfree(zram_devices);
 947unregister:
 948        unregister_blkdev(zram_major, "zram");
 949out:
 950        return ret;
 951}
 952
 953static void __exit zram_exit(void)
 954{
 955        int i;
 956        struct zram *zram;
 957
 958        for (i = 0; i < num_devices; i++) {
 959                zram = &zram_devices[i];
 960
 961                destroy_device(zram);
 962                /*
 963                 * Shouldn't access zram->disk after destroy_device
 964                 * because destroy_device already released zram->disk.
 965                 */
 966                zram_reset_device(zram, false);
 967        }
 968
 969        unregister_blkdev(zram_major, "zram");
 970
 971        kfree(zram_devices);
 972        pr_debug("Cleanup done!\n");
 973}
 974
 975module_init(zram_init);
 976module_exit(zram_exit);
 977
 978module_param(num_devices, uint, 0);
 979MODULE_PARM_DESC(num_devices, "Number of zram devices");
 980
 981MODULE_LICENSE("Dual BSD/GPL");
 982MODULE_AUTHOR("Nitin Gupta <ngupta@vflare.org>");
 983MODULE_DESCRIPTION("Compressed RAM Block Device");
 984