7e0a3fab9cd4bc00cd5703acb664942de69328c6
[safe/jmp/linux-2.6] / drivers / staging / ramzswap / ramzswap_drv.c
1 /*
2  * Compressed RAM based swap device
3  *
4  * Copyright (C) 2008, 2009  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 "ramzswap"
16 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
17
18 #include <linux/module.h>
19 #include <linux/kernel.h>
20 #include <linux/bitops.h>
21 #include <linux/blkdev.h>
22 #include <linux/buffer_head.h>
23 #include <linux/device.h>
24 #include <linux/genhd.h>
25 #include <linux/highmem.h>
26 #include <linux/lzo.h>
27 #include <linux/string.h>
28 #include <linux/swap.h>
29 #include <linux/swapops.h>
30 #include <linux/vmalloc.h>
31
32 #include "ramzswap_drv.h"
33
34 /* Globals */
35 static int ramzswap_major;
36 static struct ramzswap *devices;
37
38 /*
39  * Pages that compress to larger than this size are
40  * forwarded to backing swap, if present or stored
41  * uncompressed in memory otherwise.
42  */
43 static unsigned int max_zpage_size;
44
45 /* Module params (documentation at end) */
46 static unsigned int num_devices;
47
48 static int rzs_test_flag(struct ramzswap *rzs, u32 index,
49                         enum rzs_pageflags flag)
50 {
51         return rzs->table[index].flags & BIT(flag);
52 }
53
54 static void rzs_set_flag(struct ramzswap *rzs, u32 index,
55                         enum rzs_pageflags flag)
56 {
57         rzs->table[index].flags |= BIT(flag);
58 }
59
60 static void rzs_clear_flag(struct ramzswap *rzs, u32 index,
61                         enum rzs_pageflags flag)
62 {
63         rzs->table[index].flags &= ~BIT(flag);
64 }
65
66 static int page_zero_filled(void *ptr)
67 {
68         unsigned int pos;
69         unsigned long *page;
70
71         page = (unsigned long *)ptr;
72
73         for (pos = 0; pos != PAGE_SIZE / sizeof(*page); pos++) {
74                 if (page[pos])
75                         return 0;
76         }
77
78         return 1;
79 }
80
81 /*
82  * memlimit cannot be greater than backing disk size.
83  */
84 static void ramzswap_set_memlimit(struct ramzswap *rzs, size_t totalram_bytes)
85 {
86         int memlimit_valid = 1;
87
88         if (!rzs->memlimit) {
89                 pr_info("Memory limit not set.\n");
90                 memlimit_valid = 0;
91         }
92
93         if (rzs->memlimit > rzs->disksize) {
94                 pr_info("Memory limit cannot be greater than "
95                         "disksize: limit=%zu, disksize=%zu\n",
96                         rzs->memlimit, rzs->disksize);
97                 memlimit_valid = 0;
98         }
99
100         if (!memlimit_valid) {
101                 size_t mempart, disksize;
102                 pr_info("Using default: smaller of (%u%% of RAM) and "
103                         "(backing disk size).\n",
104                         default_memlimit_perc_ram);
105                 mempart = default_memlimit_perc_ram * (totalram_bytes / 100);
106                 disksize = rzs->disksize;
107                 rzs->memlimit = mempart > disksize ? disksize : mempart;
108         }
109
110         if (rzs->memlimit > totalram_bytes / 2) {
111                 pr_info(
112                 "Its not advisable setting limit more than half of "
113                 "size of memory since we expect a 2:1 compression ratio. "
114                 "Limit represents amount of *compressed* data we can keep "
115                 "in memory!\n"
116                 "\tMemory Size: %zu kB\n"
117                 "\tLimit you selected: %zu kB\n"
118                 "Continuing anyway ...\n",
119                 totalram_bytes >> 10, rzs->memlimit >> 10
120                 );
121         }
122
123         rzs->memlimit &= PAGE_MASK;
124         BUG_ON(!rzs->memlimit);
125 }
126
127 static void ramzswap_set_disksize(struct ramzswap *rzs, size_t totalram_bytes)
128 {
129         if (!rzs->disksize) {
130                 pr_info(
131                 "disk size not provided. You can use disksize_kb module "
132                 "param to specify size.\nUsing default: (%u%% of RAM).\n",
133                 default_disksize_perc_ram
134                 );
135                 rzs->disksize = default_disksize_perc_ram *
136                                         (totalram_bytes / 100);
137         }
138
139         if (rzs->disksize > 2 * (totalram_bytes)) {
140                 pr_info(
141                 "There is little point creating a ramzswap of greater than "
142                 "twice the size of memory since we expect a 2:1 compression "
143                 "ratio. Note that ramzswap uses about 0.1%% of the size of "
144                 "the swap device when not in use so a huge ramzswap is "
145                 "wasteful.\n"
146                 "\tMemory Size: %zu kB\n"
147                 "\tSize you selected: %zu kB\n"
148                 "Continuing anyway ...\n",
149                 totalram_bytes >> 10, rzs->disksize
150                 );
151         }
152
153         rzs->disksize &= PAGE_MASK;
154 }
155
156 /*
157  * Swap header (1st page of swap device) contains information
158  * to indentify it as a swap partition. Prepare such a header
159  * for ramzswap device (ramzswap0) so that swapon can identify
160  * it as swap partition. In case backing swap device is provided,
161  * copy its swap header.
162  */
163 static int setup_swap_header(struct ramzswap *rzs, union swap_header *s)
164 {
165         int ret = 0;
166         struct page *page;
167         struct address_space *mapping;
168         union swap_header *backing_swap_header;
169
170         /*
171          * There is no backing swap device. Create a swap header
172          * that is acceptable by swapon.
173          */
174         if (!rzs->backing_swap) {
175                 s->info.version = 1;
176                 s->info.last_page = (rzs->disksize >> PAGE_SHIFT) - 1;
177                 s->info.nr_badpages = 0;
178                 memcpy(s->magic.magic, "SWAPSPACE2", 10);
179                 return 0;
180         }
181
182         /*
183          * We have a backing swap device. Copy its swap header
184          * to ramzswap device header. If this header contains
185          * invalid information (backing device not a swap
186          * partition, etc.), swapon will fail for ramzswap
187          * which is correct behavior - we don't want to swap
188          * over filesystem partition!
189          */
190
191         /* Read the backing swap header (code from sys_swapon) */
192         mapping = rzs->swap_file->f_mapping;
193         if (!mapping->a_ops->readpage) {
194                 ret = -EINVAL;
195                 goto out;
196         }
197
198         page = read_mapping_page(mapping, 0, rzs->swap_file);
199         if (IS_ERR(page)) {
200                 ret = PTR_ERR(page);
201                 goto out;
202         }
203
204         backing_swap_header = kmap(page);
205         memcpy(s, backing_swap_header, sizeof(*s));
206         if (s->info.nr_badpages) {
207                 pr_info("Cannot use backing swap with bad pages (%u)\n",
208                         s->info.nr_badpages);
209                 ret = -EINVAL;
210         }
211         /*
212          * ramzswap disksize equals number of usable pages in backing
213          * swap. Set last_page in swap header to match this disksize
214          * ('last_page' means 0-based index of last usable swap page).
215          */
216         s->info.last_page = (rzs->disksize >> PAGE_SHIFT) - 1;
217         kunmap(page);
218
219 out:
220         return ret;
221 }
222
223 void ramzswap_ioctl_get_stats(struct ramzswap *rzs,
224                         struct ramzswap_ioctl_stats *s)
225 {
226         strncpy(s->backing_swap_name, rzs->backing_swap_name,
227                 MAX_SWAP_NAME_LEN - 1);
228         s->backing_swap_name[MAX_SWAP_NAME_LEN - 1] = '\0';
229
230         s->disksize = rzs->disksize;
231         s->memlimit = rzs->memlimit;
232
233 #if defined(CONFIG_RAMZSWAP_STATS)
234         {
235         struct ramzswap_stats *rs = &rzs->stats;
236         size_t succ_writes, mem_used;
237         unsigned int good_compress_perc = 0, no_compress_perc = 0;
238
239         mem_used = xv_get_total_size_bytes(rzs->mem_pool)
240                         + (rs->pages_expand << PAGE_SHIFT);
241         succ_writes = rzs_stat64_read(rzs, &rs->num_writes) -
242                         rzs_stat64_read(rzs, &rs->failed_writes);
243
244         if (succ_writes && rs->pages_stored) {
245                 good_compress_perc = rs->good_compress * 100
246                                         / rs->pages_stored;
247                 no_compress_perc = rs->pages_expand * 100
248                                         / rs->pages_stored;
249         }
250
251         s->num_reads = rzs_stat64_read(rzs, &rs->num_reads);
252         s->num_writes = rzs_stat64_read(rzs, &rs->num_writes);
253         s->failed_reads = rzs_stat64_read(rzs, &rs->failed_reads);
254         s->failed_writes = rzs_stat64_read(rzs, &rs->failed_writes);
255         s->invalid_io = rzs_stat64_read(rzs, &rs->invalid_io);
256         s->notify_free = rzs_stat64_read(rzs, &rs->notify_free);
257         s->pages_zero = rs->pages_zero;
258
259         s->good_compress_pct = good_compress_perc;
260         s->pages_expand_pct = no_compress_perc;
261
262         s->pages_stored = rs->pages_stored;
263         s->pages_used = mem_used >> PAGE_SHIFT;
264         s->orig_data_size = rs->pages_stored << PAGE_SHIFT;
265         s->compr_data_size = rs->compr_size;
266         s->mem_used_total = mem_used;
267
268         s->bdev_num_reads = rzs_stat64_read(rzs, &rs->bdev_num_reads);
269         s->bdev_num_writes = rzs_stat64_read(rzs, &rs->bdev_num_writes);
270         }
271 #endif /* CONFIG_RAMZSWAP_STATS */
272 }
273
274 static int add_backing_swap_extent(struct ramzswap *rzs,
275                                 pgoff_t phy_pagenum,
276                                 pgoff_t num_pages)
277 {
278         unsigned int idx;
279         struct list_head *head;
280         struct page *curr_page, *new_page;
281         unsigned int extents_per_page = PAGE_SIZE /
282                                 sizeof(struct ramzswap_backing_extent);
283
284         idx = rzs->num_extents % extents_per_page;
285         if (!idx) {
286                 new_page = alloc_page(__GFP_ZERO);
287                 if (!new_page)
288                         return -ENOMEM;
289
290                 if (rzs->num_extents) {
291                         curr_page = virt_to_page(rzs->curr_extent);
292                         head = &curr_page->lru;
293                 } else {
294                         head = &rzs->backing_swap_extent_list;
295                 }
296
297                 list_add(&new_page->lru, head);
298                 rzs->curr_extent = page_address(new_page);
299         }
300
301         rzs->curr_extent->phy_pagenum = phy_pagenum;
302         rzs->curr_extent->num_pages = num_pages;
303
304         pr_debug("add_extent: idx=%u, phy_pgnum=%lu, num_pgs=%lu, "
305                 "pg_last=%lu, curr_ext=%p\n", idx, phy_pagenum, num_pages,
306                 phy_pagenum + num_pages - 1, rzs->curr_extent);
307
308         if (idx != extents_per_page - 1)
309                 rzs->curr_extent++;
310
311         return 0;
312 }
313
314 static int setup_backing_swap_extents(struct ramzswap *rzs,
315                                 struct inode *inode, unsigned long *num_pages)
316 {
317         int ret = 0;
318         unsigned blkbits;
319         unsigned blocks_per_page;
320         pgoff_t contig_pages = 0, total_pages = 0;
321         pgoff_t pagenum = 0, prev_pagenum = 0;
322         sector_t probe_block = 0;
323         sector_t last_block;
324
325         blkbits = inode->i_blkbits;
326         blocks_per_page = PAGE_SIZE >> blkbits;
327
328         last_block = i_size_read(inode) >> blkbits;
329         while (probe_block + blocks_per_page <= last_block) {
330                 unsigned block_in_page;
331                 sector_t first_block;
332
333                 first_block = bmap(inode, probe_block);
334                 if (first_block == 0)
335                         goto bad_bmap;
336
337                 /* It must be PAGE_SIZE aligned on-disk */
338                 if (first_block & (blocks_per_page - 1)) {
339                         probe_block++;
340                         goto probe_next;
341                 }
342
343                 /* All blocks within this page must be contiguous on disk */
344                 for (block_in_page = 1; block_in_page < blocks_per_page;
345                                         block_in_page++) {
346                         sector_t block;
347
348                         block = bmap(inode, probe_block + block_in_page);
349                         if (block == 0)
350                                 goto bad_bmap;
351                         if (block != first_block + block_in_page) {
352                                 /* Discontiguity */
353                                 probe_block++;
354                                 goto probe_next;
355                         }
356                 }
357
358                 /*
359                  * We found a PAGE_SIZE length, PAGE_SIZE aligned
360                  * run of blocks.
361                  */
362                 pagenum = first_block >> (PAGE_SHIFT - blkbits);
363
364                 if (total_pages && (pagenum != prev_pagenum + 1)) {
365                         ret = add_backing_swap_extent(rzs, prev_pagenum -
366                                         (contig_pages - 1), contig_pages);
367                         if (ret < 0)
368                                 goto out;
369                         rzs->num_extents++;
370                         contig_pages = 0;
371                 }
372                 total_pages++;
373                 contig_pages++;
374                 prev_pagenum = pagenum;
375                 probe_block += blocks_per_page;
376
377 probe_next:
378                 continue;
379         }
380
381         if (contig_pages) {
382                 pr_debug("adding last extent: pagenum=%lu, "
383                         "contig_pages=%lu\n", pagenum, contig_pages);
384                 ret = add_backing_swap_extent(rzs,
385                         prev_pagenum - (contig_pages - 1), contig_pages);
386                 if (ret < 0)
387                         goto out;
388                 rzs->num_extents++;
389         }
390         if (!rzs->num_extents) {
391                 pr_err("No swap extents found!\n");
392                 ret = -EINVAL;
393         }
394
395         if (!ret) {
396                 *num_pages = total_pages;
397                 pr_info("Found %lu extents containing %luk\n",
398                         rzs->num_extents, *num_pages << (PAGE_SHIFT - 10));
399         }
400         goto out;
401
402 bad_bmap:
403         pr_err("Backing swapfile has holes\n");
404         ret = -EINVAL;
405 out:
406         while (ret && !list_empty(&rzs->backing_swap_extent_list)) {
407                 struct page *page;
408                 struct list_head *entry = rzs->backing_swap_extent_list.next;
409                 page = list_entry(entry, struct page, lru);
410                 list_del(entry);
411                 __free_page(page);
412         }
413         return ret;
414 }
415
416 static void map_backing_swap_extents(struct ramzswap *rzs)
417 {
418         struct ramzswap_backing_extent *se;
419         struct page *table_page, *se_page;
420         unsigned long num_pages, num_table_pages, entry;
421         unsigned long se_idx, span;
422         unsigned entries_per_page = PAGE_SIZE / sizeof(*rzs->table);
423         unsigned extents_per_page = PAGE_SIZE / sizeof(*se);
424
425         /* True for block device */
426         if (!rzs->num_extents)
427                 return;
428
429         se_page = list_entry(rzs->backing_swap_extent_list.next,
430                                         struct page, lru);
431         se = page_address(se_page);
432         span = se->num_pages;
433         num_pages = rzs->disksize >> PAGE_SHIFT;
434         num_table_pages = DIV_ROUND_UP(num_pages * sizeof(*rzs->table),
435                                                         PAGE_SIZE);
436
437         entry = 0;
438         se_idx = 0;
439         while (num_table_pages--) {
440                 table_page = vmalloc_to_page(&rzs->table[entry]);
441                 while (span <= entry) {
442                         se_idx++;
443                         if (se_idx == rzs->num_extents)
444                                 BUG();
445
446                         if (!(se_idx % extents_per_page)) {
447                                 se_page = list_entry(se_page->lru.next,
448                                                 struct page, lru);
449                                 se = page_address(se_page);
450                         } else
451                                 se++;
452
453                         span += se->num_pages;
454                 }
455                 table_page->mapping = (struct address_space *)se;
456                 table_page->private = se->num_pages - (span - entry);
457                 pr_debug("map_table: entry=%lu, span=%lu, map=%p, priv=%lu\n",
458                         entry, span, table_page->mapping, table_page->private);
459                 entry += entries_per_page;
460         }
461 }
462
463 /*
464  * Check if value of backing_swap module param is sane.
465  * Claim this device and set ramzswap size equal to
466  * size of this block device.
467  */
468 static int setup_backing_swap(struct ramzswap *rzs)
469 {
470         int ret = 0;
471         size_t disksize;
472         unsigned long num_pages = 0;
473         struct inode *inode;
474         struct file *swap_file;
475         struct address_space *mapping;
476         struct block_device *bdev = NULL;
477
478         if (!rzs->backing_swap_name[0]) {
479                 pr_debug("backing_swap param not given\n");
480                 goto out;
481         }
482
483         pr_info("Using backing swap device: %s\n", rzs->backing_swap_name);
484
485         swap_file = filp_open(rzs->backing_swap_name,
486                                 O_RDWR | O_LARGEFILE, 0);
487         if (IS_ERR(swap_file)) {
488                 pr_err("Error opening backing device: %s\n",
489                         rzs->backing_swap_name);
490                 ret = -EINVAL;
491                 goto out;
492         }
493
494         mapping = swap_file->f_mapping;
495         inode = mapping->host;
496
497         if (S_ISBLK(inode->i_mode)) {
498                 bdev = I_BDEV(inode);
499                 ret = bd_claim(bdev, setup_backing_swap);
500                 if (ret < 0) {
501                         bdev = NULL;
502                         goto bad_param;
503                 }
504                 disksize = i_size_read(inode);
505         } else if (S_ISREG(inode->i_mode)) {
506                 bdev = inode->i_sb->s_bdev;
507                 if (IS_SWAPFILE(inode)) {
508                         ret = -EBUSY;
509                         goto bad_param;
510                 }
511                 ret = setup_backing_swap_extents(rzs, inode, &num_pages);
512                 if (ret < 0)
513                         goto bad_param;
514                 disksize = num_pages << PAGE_SHIFT;
515         } else {
516                 goto bad_param;
517         }
518
519         rzs->swap_file = swap_file;
520         rzs->backing_swap = bdev;
521         rzs->disksize = disksize;
522         BUG_ON(!rzs->disksize);
523
524         return 0;
525
526 bad_param:
527         if (bdev)
528                 bd_release(bdev);
529         filp_close(swap_file, NULL);
530
531 out:
532         rzs->backing_swap = NULL;
533         return ret;
534 }
535
536 /*
537  * Map logical page number 'pagenum' to physical page number
538  * on backing swap device. For block device, this is a nop.
539  */
540 u32 map_backing_swap_page(struct ramzswap *rzs, u32 pagenum)
541 {
542         u32 skip_pages, entries_per_page;
543         size_t delta, se_offset, skipped;
544         struct page *table_page, *se_page;
545         struct ramzswap_backing_extent *se;
546
547         if (!rzs->num_extents)
548                 return pagenum;
549
550         entries_per_page = PAGE_SIZE / sizeof(*rzs->table);
551
552         table_page = vmalloc_to_page(&rzs->table[pagenum]);
553         se = (struct ramzswap_backing_extent *)table_page->mapping;
554         se_page = virt_to_page(se);
555
556         skip_pages = pagenum - (pagenum / entries_per_page * entries_per_page);
557         se_offset = table_page->private + skip_pages;
558
559         if (se_offset < se->num_pages)
560                 return se->phy_pagenum + se_offset;
561
562         skipped = se->num_pages - table_page->private;
563         do {
564                 struct ramzswap_backing_extent *se_base;
565                 u32 se_entries_per_page = PAGE_SIZE / sizeof(*se);
566
567                 /* Get next swap extent */
568                 se_base = (struct ramzswap_backing_extent *)
569                                                 page_address(se_page);
570                 if (se - se_base == se_entries_per_page - 1) {
571                         se_page = list_entry(se_page->lru.next,
572                                                 struct page, lru);
573                         se = page_address(se_page);
574                 } else {
575                         se++;
576                 }
577
578                 skipped += se->num_pages;
579         } while (skipped < skip_pages);
580
581         delta = skipped - skip_pages;
582         se_offset = se->num_pages - delta;
583
584         return se->phy_pagenum + se_offset;
585 }
586
587 static void ramzswap_free_page(struct ramzswap *rzs, size_t index)
588 {
589         u32 clen;
590         void *obj;
591
592         struct page *page = rzs->table[index].page;
593         u32 offset = rzs->table[index].offset;
594
595         if (unlikely(!page)) {
596                 /*
597                  * No memory is allocated for zero filled pages.
598                  * Simply clear zero page flag.
599                  */
600                 if (rzs_test_flag(rzs, index, RZS_ZERO)) {
601                         rzs_clear_flag(rzs, index, RZS_ZERO);
602                         rzs_stat_dec(&rzs->stats.pages_zero);
603                 }
604                 return;
605         }
606
607         if (unlikely(rzs_test_flag(rzs, index, RZS_UNCOMPRESSED))) {
608                 clen = PAGE_SIZE;
609                 __free_page(page);
610                 rzs_clear_flag(rzs, index, RZS_UNCOMPRESSED);
611                 rzs_stat_dec(&rzs->stats.pages_expand);
612                 goto out;
613         }
614
615         obj = kmap_atomic(page, KM_USER0) + offset;
616         clen = xv_get_object_size(obj) - sizeof(struct zobj_header);
617         kunmap_atomic(obj, KM_USER0);
618
619         xv_free(rzs->mem_pool, page, offset);
620         if (clen <= PAGE_SIZE / 2)
621                 rzs_stat_dec(&rzs->stats.good_compress);
622
623 out:
624         rzs->stats.compr_size -= clen;
625         rzs_stat_dec(&rzs->stats.pages_stored);
626
627         rzs->table[index].page = NULL;
628         rzs->table[index].offset = 0;
629 }
630
631 static int handle_zero_page(struct bio *bio)
632 {
633         void *user_mem;
634         struct page *page = bio->bi_io_vec[0].bv_page;
635
636         user_mem = kmap_atomic(page, KM_USER0);
637         memset(user_mem, 0, PAGE_SIZE);
638         kunmap_atomic(user_mem, KM_USER0);
639
640         flush_dcache_page(page);
641
642         set_bit(BIO_UPTODATE, &bio->bi_flags);
643         bio_endio(bio, 0);
644         return 0;
645 }
646
647 static int handle_uncompressed_page(struct ramzswap *rzs, struct bio *bio)
648 {
649         u32 index;
650         struct page *page;
651         unsigned char *user_mem, *cmem;
652
653         page = bio->bi_io_vec[0].bv_page;
654         index = bio->bi_sector >> SECTORS_PER_PAGE_SHIFT;
655
656         user_mem = kmap_atomic(page, KM_USER0);
657         cmem = kmap_atomic(rzs->table[index].page, KM_USER1) +
658                         rzs->table[index].offset;
659
660         memcpy(user_mem, cmem, PAGE_SIZE);
661         kunmap_atomic(user_mem, KM_USER0);
662         kunmap_atomic(cmem, KM_USER1);
663
664         flush_dcache_page(page);
665
666         set_bit(BIO_UPTODATE, &bio->bi_flags);
667         bio_endio(bio, 0);
668         return 0;
669 }
670
671
672 /*
673  * Called when request page is not present in ramzswap.
674  * Its either in backing swap device (if present) or
675  * this is an attempt to read before any previous write
676  * to this location - this happens due to readahead when
677  * swap device is read from user-space (e.g. during swapon)
678  */
679 static int handle_ramzswap_fault(struct ramzswap *rzs, struct bio *bio)
680 {
681         /*
682          * Always forward such requests to backing swap
683          * device (if present)
684          */
685         if (rzs->backing_swap) {
686                 u32 pagenum;
687                 rzs_stat64_dec(rzs, &rzs->stats.num_reads);
688                 rzs_stat64_inc(rzs, &rzs->stats.bdev_num_reads);
689                 bio->bi_bdev = rzs->backing_swap;
690
691                 /*
692                  * In case backing swap is a file, find the right offset within
693                  * the file corresponding to logical position 'index'. For block
694                  * device, this is a nop.
695                  */
696                 pagenum = bio->bi_sector >> SECTORS_PER_PAGE_SHIFT;
697                 bio->bi_sector = map_backing_swap_page(rzs, pagenum)
698                                         << SECTORS_PER_PAGE_SHIFT;
699                 return 1;
700         }
701
702         /*
703          * Its unlikely event in case backing dev is
704          * not present
705          */
706         pr_debug("Read before write on swap device: "
707                 "sector=%lu, size=%u, offset=%u\n",
708                 (ulong)(bio->bi_sector), bio->bi_size,
709                 bio->bi_io_vec[0].bv_offset);
710
711         /* Do nothing. Just return success */
712         set_bit(BIO_UPTODATE, &bio->bi_flags);
713         bio_endio(bio, 0);
714         return 0;
715 }
716
717 static int ramzswap_read(struct ramzswap *rzs, struct bio *bio)
718 {
719         int ret;
720         u32 index;
721         size_t clen;
722         struct page *page;
723         struct zobj_header *zheader;
724         unsigned char *user_mem, *cmem;
725
726         rzs_stat64_inc(rzs, &rzs->stats.num_reads);
727
728         page = bio->bi_io_vec[0].bv_page;
729         index = bio->bi_sector >> SECTORS_PER_PAGE_SHIFT;
730
731         if (rzs_test_flag(rzs, index, RZS_ZERO))
732                 return handle_zero_page(bio);
733
734         /* Requested page is not present in compressed area */
735         if (!rzs->table[index].page)
736                 return handle_ramzswap_fault(rzs, bio);
737
738         /* Page is stored uncompressed since it's incompressible */
739         if (unlikely(rzs_test_flag(rzs, index, RZS_UNCOMPRESSED)))
740                 return handle_uncompressed_page(rzs, bio);
741
742         user_mem = kmap_atomic(page, KM_USER0);
743         clen = PAGE_SIZE;
744
745         cmem = kmap_atomic(rzs->table[index].page, KM_USER1) +
746                         rzs->table[index].offset;
747
748         ret = lzo1x_decompress_safe(
749                 cmem + sizeof(*zheader),
750                 xv_get_object_size(cmem) - sizeof(*zheader),
751                 user_mem, &clen);
752
753         kunmap_atomic(user_mem, KM_USER0);
754         kunmap_atomic(cmem, KM_USER1);
755
756         /* should NEVER happen */
757         if (unlikely(ret != LZO_E_OK)) {
758                 pr_err("Decompression failed! err=%d, page=%u\n",
759                         ret, index);
760                 rzs_stat64_inc(rzs, &rzs->stats.failed_reads);
761                 goto out;
762         }
763
764         flush_dcache_page(page);
765
766         set_bit(BIO_UPTODATE, &bio->bi_flags);
767         bio_endio(bio, 0);
768         return 0;
769
770 out:
771         bio_io_error(bio);
772         return 0;
773 }
774
775 static int ramzswap_write(struct ramzswap *rzs, struct bio *bio)
776 {
777         int ret, fwd_write_request = 0;
778         u32 offset, index;
779         size_t clen;
780         struct zobj_header *zheader;
781         struct page *page, *page_store;
782         unsigned char *user_mem, *cmem, *src;
783
784         rzs_stat64_inc(rzs, &rzs->stats.num_writes);
785
786         page = bio->bi_io_vec[0].bv_page;
787         index = bio->bi_sector >> SECTORS_PER_PAGE_SHIFT;
788
789         src = rzs->compress_buffer;
790
791         /*
792          * System swaps to same sector again when the stored page
793          * is no longer referenced by any process. So, its now safe
794          * to free the memory that was allocated for this page.
795          */
796         if (rzs->table[index].page || rzs_test_flag(rzs, index, RZS_ZERO))
797                 ramzswap_free_page(rzs, index);
798
799         mutex_lock(&rzs->lock);
800
801         user_mem = kmap_atomic(page, KM_USER0);
802         if (page_zero_filled(user_mem)) {
803                 kunmap_atomic(user_mem, KM_USER0);
804                 mutex_unlock(&rzs->lock);
805                 rzs_stat_inc(&rzs->stats.pages_zero);
806                 rzs_set_flag(rzs, index, RZS_ZERO);
807
808                 set_bit(BIO_UPTODATE, &bio->bi_flags);
809                 bio_endio(bio, 0);
810                 return 0;
811         }
812
813         if (rzs->backing_swap &&
814                 (rzs->stats.compr_size > rzs->memlimit - PAGE_SIZE)) {
815                 kunmap_atomic(user_mem, KM_USER0);
816                 mutex_unlock(&rzs->lock);
817                 fwd_write_request = 1;
818                 goto out;
819         }
820
821         ret = lzo1x_1_compress(user_mem, PAGE_SIZE, src, &clen,
822                                 rzs->compress_workmem);
823
824         kunmap_atomic(user_mem, KM_USER0);
825
826         if (unlikely(ret != LZO_E_OK)) {
827                 mutex_unlock(&rzs->lock);
828                 pr_err("Compression failed! err=%d\n", ret);
829                 rzs_stat64_inc(rzs, &rzs->stats.failed_writes);
830                 goto out;
831         }
832
833         /*
834          * Page is incompressible. Forward it to backing swap
835          * if present. Otherwise, store it as-is (uncompressed)
836          * since we do not want to return too many swap write
837          * errors which has side effect of hanging the system.
838          */
839         if (unlikely(clen > max_zpage_size)) {
840                 if (rzs->backing_swap) {
841                         mutex_unlock(&rzs->lock);
842                         fwd_write_request = 1;
843                         goto out;
844                 }
845
846                 clen = PAGE_SIZE;
847                 page_store = alloc_page(GFP_NOIO | __GFP_HIGHMEM);
848                 if (unlikely(!page_store)) {
849                         mutex_unlock(&rzs->lock);
850                         pr_info("Error allocating memory for incompressible "
851                                 "page: %u\n", index);
852                         rzs_stat64_inc(rzs, &rzs->stats.failed_writes);
853                         goto out;
854                 }
855
856                 offset = 0;
857                 rzs_set_flag(rzs, index, RZS_UNCOMPRESSED);
858                 rzs_stat_inc(&rzs->stats.pages_expand);
859                 rzs->table[index].page = page_store;
860                 src = kmap_atomic(page, KM_USER0);
861                 goto memstore;
862         }
863
864         if (xv_malloc(rzs->mem_pool, clen + sizeof(*zheader),
865                         &rzs->table[index].page, &offset,
866                         GFP_NOIO | __GFP_HIGHMEM)) {
867                 mutex_unlock(&rzs->lock);
868                 pr_info("Error allocating memory for compressed "
869                         "page: %u, size=%zu\n", index, clen);
870                 rzs_stat64_inc(rzs, &rzs->stats.failed_writes);
871                 if (rzs->backing_swap)
872                         fwd_write_request = 1;
873                 goto out;
874         }
875
876 memstore:
877         rzs->table[index].offset = offset;
878
879         cmem = kmap_atomic(rzs->table[index].page, KM_USER1) +
880                         rzs->table[index].offset;
881
882 #if 0
883         /* Back-reference needed for memory defragmentation */
884         if (!rzs_test_flag(rzs, index, RZS_UNCOMPRESSED)) {
885                 zheader = (struct zobj_header *)cmem;
886                 zheader->table_idx = index;
887                 cmem += sizeof(*zheader);
888         }
889 #endif
890
891         memcpy(cmem, src, clen);
892
893         kunmap_atomic(cmem, KM_USER1);
894         if (unlikely(rzs_test_flag(rzs, index, RZS_UNCOMPRESSED)))
895                 kunmap_atomic(src, KM_USER0);
896
897         /* Update stats */
898         rzs->stats.compr_size += clen;
899         rzs_stat_inc(&rzs->stats.pages_stored);
900         if (clen <= PAGE_SIZE / 2)
901                 rzs_stat_inc(&rzs->stats.good_compress);
902
903         mutex_unlock(&rzs->lock);
904
905         set_bit(BIO_UPTODATE, &bio->bi_flags);
906         bio_endio(bio, 0);
907         return 0;
908
909 out:
910         if (fwd_write_request) {
911                 rzs_stat64_inc(rzs, &rzs->stats.bdev_num_writes);
912                 bio->bi_bdev = rzs->backing_swap;
913 #if 0
914                 /*
915                  * TODO: We currently have linear mapping of ramzswap and
916                  * backing swap sectors. This is not desired since we want
917                  * to optimize writes to backing swap to minimize disk seeks
918                  * or have effective wear leveling (for SSDs). Also, a
919                  * non-linear mapping is required to implement compressed
920                  * on-disk swapping.
921                  */
922                  bio->bi_sector = get_backing_swap_page()
923                                         << SECTORS_PER_PAGE_SHIFT;
924 #endif
925                 /*
926                  * In case backing swap is a file, find the right offset within
927                  * the file corresponding to logical position 'index'. For block
928                  * device, this is a nop.
929                  */
930                 bio->bi_sector = map_backing_swap_page(rzs, index)
931                                         << SECTORS_PER_PAGE_SHIFT;
932                 return 1;
933         }
934
935         bio_io_error(bio);
936         return 0;
937 }
938
939
940 /*
941  * Check if request is within bounds and page aligned.
942  */
943 static inline int valid_swap_request(struct ramzswap *rzs, struct bio *bio)
944 {
945         if (unlikely(
946                 (bio->bi_sector >= (rzs->disksize >> SECTOR_SHIFT)) ||
947                 (bio->bi_sector & (SECTORS_PER_PAGE - 1)) ||
948                 (bio->bi_vcnt != 1) ||
949                 (bio->bi_size != PAGE_SIZE) ||
950                 (bio->bi_io_vec[0].bv_offset != 0))) {
951
952                 return 0;
953         }
954
955         /* swap request is valid */
956         return 1;
957 }
958
959 /*
960  * Handler function for all ramzswap I/O requests.
961  */
962 static int ramzswap_make_request(struct request_queue *queue, struct bio *bio)
963 {
964         int ret = 0;
965         struct ramzswap *rzs = queue->queuedata;
966
967         if (unlikely(!rzs->init_done)) {
968                 bio_io_error(bio);
969                 return 0;
970         }
971
972         if (!valid_swap_request(rzs, bio)) {
973                 rzs_stat64_inc(rzs, &rzs->stats.invalid_io);
974                 bio_io_error(bio);
975                 return 0;
976         }
977
978         switch (bio_data_dir(bio)) {
979         case READ:
980                 ret = ramzswap_read(rzs, bio);
981                 break;
982
983         case WRITE:
984                 ret = ramzswap_write(rzs, bio);
985                 break;
986         }
987
988         return ret;
989 }
990
991 static void reset_device(struct ramzswap *rzs)
992 {
993         int is_backing_blkdev = 0;
994         size_t index, num_pages;
995         unsigned entries_per_page;
996         unsigned long num_table_pages, entry = 0;
997
998         /* Do not accept any new I/O request */
999         rzs->init_done = 0;
1000
1001         if (rzs->backing_swap && !rzs->num_extents)
1002                 is_backing_blkdev = 1;
1003
1004         num_pages = rzs->disksize >> PAGE_SHIFT;
1005
1006         /* Free various per-device buffers */
1007         kfree(rzs->compress_workmem);
1008         free_pages((unsigned long)rzs->compress_buffer, 1);
1009
1010         rzs->compress_workmem = NULL;
1011         rzs->compress_buffer = NULL;
1012
1013         /* Free all pages that are still in this ramzswap device */
1014         for (index = 0; index < num_pages; index++) {
1015                 struct page *page;
1016                 u16 offset;
1017
1018                 page = rzs->table[index].page;
1019                 offset = rzs->table[index].offset;
1020
1021                 if (!page)
1022                         continue;
1023
1024                 if (unlikely(rzs_test_flag(rzs, index, RZS_UNCOMPRESSED)))
1025                         __free_page(page);
1026                 else
1027                         xv_free(rzs->mem_pool, page, offset);
1028         }
1029
1030         entries_per_page = PAGE_SIZE / sizeof(*rzs->table);
1031         num_table_pages = DIV_ROUND_UP(num_pages * sizeof(*rzs->table),
1032                                         PAGE_SIZE);
1033         /*
1034          * Set page->mapping to NULL for every table page.
1035          * Otherwise, we will hit bad_page() during free.
1036          */
1037         while (rzs->num_extents && num_table_pages--) {
1038                 struct page *page;
1039                 page = vmalloc_to_page(&rzs->table[entry]);
1040                 page->mapping = NULL;
1041                 entry += entries_per_page;
1042         }
1043         vfree(rzs->table);
1044         rzs->table = NULL;
1045
1046         xv_destroy_pool(rzs->mem_pool);
1047         rzs->mem_pool = NULL;
1048
1049         /* Free all swap extent pages */
1050         while (!list_empty(&rzs->backing_swap_extent_list)) {
1051                 struct page *page;
1052                 struct list_head *entry;
1053                 entry = rzs->backing_swap_extent_list.next;
1054                 page = list_entry(entry, struct page, lru);
1055                 list_del(entry);
1056                 __free_page(page);
1057         }
1058         INIT_LIST_HEAD(&rzs->backing_swap_extent_list);
1059         rzs->num_extents = 0;
1060
1061         /* Close backing swap device, if present */
1062         if (rzs->backing_swap) {
1063                 if (is_backing_blkdev)
1064                         bd_release(rzs->backing_swap);
1065                 filp_close(rzs->swap_file, NULL);
1066                 rzs->backing_swap = NULL;
1067         }
1068
1069         /* Reset stats */
1070         memset(&rzs->stats, 0, sizeof(rzs->stats));
1071
1072         rzs->disksize = 0;
1073         rzs->memlimit = 0;
1074 }
1075
1076 static int ramzswap_ioctl_init_device(struct ramzswap *rzs)
1077 {
1078         int ret;
1079         size_t num_pages;
1080         struct page *page;
1081         union swap_header *swap_header;
1082
1083         if (rzs->init_done) {
1084                 pr_info("Device already initialized!\n");
1085                 return -EBUSY;
1086         }
1087
1088         ret = setup_backing_swap(rzs);
1089         if (ret)
1090                 goto fail;
1091
1092         if (rzs->backing_swap)
1093                 ramzswap_set_memlimit(rzs, totalram_pages << PAGE_SHIFT);
1094         else
1095                 ramzswap_set_disksize(rzs, totalram_pages << PAGE_SHIFT);
1096
1097         rzs->compress_workmem = kzalloc(LZO1X_MEM_COMPRESS, GFP_KERNEL);
1098         if (!rzs->compress_workmem) {
1099                 pr_err("Error allocating compressor working memory!\n");
1100                 ret = -ENOMEM;
1101                 goto fail;
1102         }
1103
1104         rzs->compress_buffer = (void *)__get_free_pages(__GFP_ZERO, 1);
1105         if (!rzs->compress_buffer) {
1106                 pr_err("Error allocating compressor buffer space\n");
1107                 ret = -ENOMEM;
1108                 goto fail;
1109         }
1110
1111         num_pages = rzs->disksize >> PAGE_SHIFT;
1112         rzs->table = vmalloc(num_pages * sizeof(*rzs->table));
1113         if (!rzs->table) {
1114                 pr_err("Error allocating ramzswap address table\n");
1115                 /* To prevent accessing table entries during cleanup */
1116                 rzs->disksize = 0;
1117                 ret = -ENOMEM;
1118                 goto fail;
1119         }
1120         memset(rzs->table, 0, num_pages * sizeof(*rzs->table));
1121
1122         map_backing_swap_extents(rzs);
1123
1124         page = alloc_page(__GFP_ZERO);
1125         if (!page) {
1126                 pr_err("Error allocating swap header page\n");
1127                 ret = -ENOMEM;
1128                 goto fail;
1129         }
1130         rzs->table[0].page = page;
1131         rzs_set_flag(rzs, 0, RZS_UNCOMPRESSED);
1132
1133         swap_header = kmap(page);
1134         ret = setup_swap_header(rzs, swap_header);
1135         kunmap(page);
1136         if (ret) {
1137                 pr_err("Error setting swap header\n");
1138                 goto fail;
1139         }
1140
1141         set_capacity(rzs->disk, rzs->disksize >> SECTOR_SHIFT);
1142
1143         /*
1144          * We have ident mapping of sectors for ramzswap and
1145          * and the backing swap device. So, this queue flag
1146          * should be according to backing dev.
1147          */
1148         if (!rzs->backing_swap ||
1149                         blk_queue_nonrot(rzs->backing_swap->bd_disk->queue))
1150                 queue_flag_set_unlocked(QUEUE_FLAG_NONROT, rzs->disk->queue);
1151
1152         rzs->mem_pool = xv_create_pool();
1153         if (!rzs->mem_pool) {
1154                 pr_err("Error creating memory pool\n");
1155                 ret = -ENOMEM;
1156                 goto fail;
1157         }
1158
1159         /*
1160          * Pages that compress to size greater than this are forwarded
1161          * to physical swap disk (if backing dev is provided)
1162          * TODO: make this configurable
1163          */
1164         if (rzs->backing_swap)
1165                 max_zpage_size = max_zpage_size_bdev;
1166         else
1167                 max_zpage_size = max_zpage_size_nobdev;
1168         pr_debug("Max compressed page size: %u bytes\n", max_zpage_size);
1169
1170         rzs->init_done = 1;
1171
1172         pr_debug("Initialization done!\n");
1173         return 0;
1174
1175 fail:
1176         reset_device(rzs);
1177
1178         pr_err("Initialization failed: err=%d\n", ret);
1179         return ret;
1180 }
1181
1182 static int ramzswap_ioctl_reset_device(struct ramzswap *rzs)
1183 {
1184         if (rzs->init_done)
1185                 reset_device(rzs);
1186
1187         return 0;
1188 }
1189
1190 static int ramzswap_ioctl(struct block_device *bdev, fmode_t mode,
1191                         unsigned int cmd, unsigned long arg)
1192 {
1193         int ret = 0;
1194         size_t disksize_kb, memlimit_kb;
1195
1196         struct ramzswap *rzs = bdev->bd_disk->private_data;
1197
1198         switch (cmd) {
1199         case RZSIO_SET_DISKSIZE_KB:
1200                 if (rzs->init_done) {
1201                         ret = -EBUSY;
1202                         goto out;
1203                 }
1204                 if (copy_from_user(&disksize_kb, (void *)arg,
1205                                                 _IOC_SIZE(cmd))) {
1206                         ret = -EFAULT;
1207                         goto out;
1208                 }
1209                 rzs->disksize = disksize_kb << 10;
1210                 pr_info("Disk size set to %zu kB\n", disksize_kb);
1211                 break;
1212
1213         case RZSIO_SET_MEMLIMIT_KB:
1214                 if (rzs->init_done) {
1215                         /* TODO: allow changing memlimit */
1216                         ret = -EBUSY;
1217                         goto out;
1218                 }
1219                 if (copy_from_user(&memlimit_kb, (void *)arg,
1220                                                 _IOC_SIZE(cmd))) {
1221                         ret = -EFAULT;
1222                         goto out;
1223                 }
1224                 rzs->memlimit = memlimit_kb << 10;
1225                 pr_info("Memory limit set to %zu kB\n", memlimit_kb);
1226                 break;
1227
1228         case RZSIO_SET_BACKING_SWAP:
1229                 if (rzs->init_done) {
1230                         ret = -EBUSY;
1231                         goto out;
1232                 }
1233
1234                 if (copy_from_user(&rzs->backing_swap_name, (void *)arg,
1235                                                 _IOC_SIZE(cmd))) {
1236                         ret = -EFAULT;
1237                         goto out;
1238                 }
1239                 rzs->backing_swap_name[MAX_SWAP_NAME_LEN - 1] = '\0';
1240                 pr_info("Backing swap set to %s\n", rzs->backing_swap_name);
1241                 break;
1242
1243         case RZSIO_GET_STATS:
1244         {
1245                 struct ramzswap_ioctl_stats *stats;
1246                 if (!rzs->init_done) {
1247                         ret = -ENOTTY;
1248                         goto out;
1249                 }
1250                 stats = kzalloc(sizeof(*stats), GFP_KERNEL);
1251                 if (!stats) {
1252                         ret = -ENOMEM;
1253                         goto out;
1254                 }
1255                 ramzswap_ioctl_get_stats(rzs, stats);
1256                 if (copy_to_user((void *)arg, stats, sizeof(*stats))) {
1257                         kfree(stats);
1258                         ret = -EFAULT;
1259                         goto out;
1260                 }
1261                 kfree(stats);
1262                 break;
1263         }
1264         case RZSIO_INIT:
1265                 ret = ramzswap_ioctl_init_device(rzs);
1266                 break;
1267
1268         case RZSIO_RESET:
1269                 /* Do not reset an active device! */
1270                 if (bdev->bd_holders) {
1271                         ret = -EBUSY;
1272                         goto out;
1273                 }
1274
1275                 /* Make sure all pending I/O is finished */
1276                 if (bdev)
1277                         fsync_bdev(bdev);
1278
1279                 ret = ramzswap_ioctl_reset_device(rzs);
1280                 break;
1281
1282         default:
1283                 pr_info("Invalid ioctl %u\n", cmd);
1284                 ret = -ENOTTY;
1285         }
1286
1287 out:
1288         return ret;
1289 }
1290
1291 static struct block_device_operations ramzswap_devops = {
1292         .ioctl = ramzswap_ioctl,
1293         .owner = THIS_MODULE,
1294 };
1295
1296 static int create_device(struct ramzswap *rzs, int device_id)
1297 {
1298         int ret = 0;
1299
1300         mutex_init(&rzs->lock);
1301         spin_lock_init(&rzs->stat64_lock);
1302         INIT_LIST_HEAD(&rzs->backing_swap_extent_list);
1303
1304         rzs->queue = blk_alloc_queue(GFP_KERNEL);
1305         if (!rzs->queue) {
1306                 pr_err("Error allocating disk queue for device %d\n",
1307                         device_id);
1308                 ret = -ENOMEM;
1309                 goto out;
1310         }
1311
1312         blk_queue_make_request(rzs->queue, ramzswap_make_request);
1313         rzs->queue->queuedata = rzs;
1314
1315          /* gendisk structure */
1316         rzs->disk = alloc_disk(1);
1317         if (!rzs->disk) {
1318                 blk_cleanup_queue(rzs->queue);
1319                 pr_warning("Error allocating disk structure for device %d\n",
1320                         device_id);
1321                 ret = -ENOMEM;
1322                 goto out;
1323         }
1324
1325         rzs->disk->major = ramzswap_major;
1326         rzs->disk->first_minor = device_id;
1327         rzs->disk->fops = &ramzswap_devops;
1328         rzs->disk->queue = rzs->queue;
1329         rzs->disk->private_data = rzs;
1330         snprintf(rzs->disk->disk_name, 16, "ramzswap%d", device_id);
1331
1332         /*
1333          * Actual capacity set using RZSIO_SET_DISKSIZE_KB ioctl
1334          * or set equal to backing swap device (if provided)
1335          */
1336         set_capacity(rzs->disk, 0);
1337
1338         blk_queue_physical_block_size(rzs->disk->queue, PAGE_SIZE);
1339         blk_queue_logical_block_size(rzs->disk->queue, PAGE_SIZE);
1340
1341         add_disk(rzs->disk);
1342
1343         rzs->init_done = 0;
1344
1345 out:
1346         return ret;
1347 }
1348
1349 static void destroy_device(struct ramzswap *rzs)
1350 {
1351         if (rzs->disk) {
1352                 del_gendisk(rzs->disk);
1353                 put_disk(rzs->disk);
1354         }
1355
1356         if (rzs->queue)
1357                 blk_cleanup_queue(rzs->queue);
1358 }
1359
1360 static int __init ramzswap_init(void)
1361 {
1362         int ret, dev_id;
1363
1364         if (num_devices > max_num_devices) {
1365                 pr_warning("Invalid value for num_devices: %u\n",
1366                                 num_devices);
1367                 ret = -EINVAL;
1368                 goto out;
1369         }
1370
1371         ramzswap_major = register_blkdev(0, "ramzswap");
1372         if (ramzswap_major <= 0) {
1373                 pr_warning("Unable to get major number\n");
1374                 ret = -EBUSY;
1375                 goto out;
1376         }
1377
1378         if (!num_devices) {
1379                 pr_info("num_devices not specified. Using default: 1\n");
1380                 num_devices = 1;
1381         }
1382
1383         /* Allocate the device array and initialize each one */
1384         pr_info("Creating %u devices ...\n", num_devices);
1385         devices = kzalloc(num_devices * sizeof(struct ramzswap), GFP_KERNEL);
1386         if (!devices) {
1387                 ret = -ENOMEM;
1388                 goto unregister;
1389         }
1390
1391         for (dev_id = 0; dev_id < num_devices; dev_id++) {
1392                 ret = create_device(&devices[dev_id], dev_id);
1393                 if (ret)
1394                         goto free_devices;
1395         }
1396
1397         return 0;
1398
1399 free_devices:
1400         while (dev_id)
1401                 destroy_device(&devices[--dev_id]);
1402 unregister:
1403         unregister_blkdev(ramzswap_major, "ramzswap");
1404 out:
1405         return ret;
1406 }
1407
1408 static void __exit ramzswap_exit(void)
1409 {
1410         int i;
1411         struct ramzswap *rzs;
1412
1413         for (i = 0; i < num_devices; i++) {
1414                 rzs = &devices[i];
1415
1416                 destroy_device(rzs);
1417                 if (rzs->init_done)
1418                         reset_device(rzs);
1419         }
1420
1421         unregister_blkdev(ramzswap_major, "ramzswap");
1422
1423         kfree(devices);
1424         pr_debug("Cleanup done!\n");
1425 }
1426
1427 module_param(num_devices, uint, 0);
1428 MODULE_PARM_DESC(num_devices, "Number of ramzswap devices");
1429
1430 module_init(ramzswap_init);
1431 module_exit(ramzswap_exit);
1432
1433 MODULE_LICENSE("Dual BSD/GPL");
1434 MODULE_AUTHOR("Nitin Gupta <ngupta@vflare.org>");
1435 MODULE_DESCRIPTION("Compressed RAM Based Swap Device");