[PATCH] dm: add exports
[pandora-kernel.git] / drivers / md / dm.c
1 /*
2  * Copyright (C) 2001, 2002 Sistina Software (UK) Limited.
3  * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
4  *
5  * This file is released under the GPL.
6  */
7
8 #include "dm.h"
9 #include "dm-bio-list.h"
10
11 #include <linux/init.h>
12 #include <linux/module.h>
13 #include <linux/mutex.h>
14 #include <linux/moduleparam.h>
15 #include <linux/blkpg.h>
16 #include <linux/bio.h>
17 #include <linux/buffer_head.h>
18 #include <linux/mempool.h>
19 #include <linux/slab.h>
20 #include <linux/idr.h>
21 #include <linux/hdreg.h>
22 #include <linux/blktrace_api.h>
23
24 static const char *_name = DM_NAME;
25
26 static unsigned int major = 0;
27 static unsigned int _major = 0;
28
29 static DEFINE_SPINLOCK(_minor_lock);
30 /*
31  * One of these is allocated per bio.
32  */
33 struct dm_io {
34         struct mapped_device *md;
35         int error;
36         struct bio *bio;
37         atomic_t io_count;
38         unsigned long start_time;
39 };
40
41 /*
42  * One of these is allocated per target within a bio.  Hopefully
43  * this will be simplified out one day.
44  */
45 struct target_io {
46         struct dm_io *io;
47         struct dm_target *ti;
48         union map_info info;
49 };
50
51 union map_info *dm_get_mapinfo(struct bio *bio)
52 {
53         if (bio && bio->bi_private)
54                 return &((struct target_io *)bio->bi_private)->info;
55         return NULL;
56 }
57
58 #define MINOR_ALLOCED ((void *)-1)
59
60 /*
61  * Bits for the md->flags field.
62  */
63 #define DMF_BLOCK_IO 0
64 #define DMF_SUSPENDED 1
65 #define DMF_FROZEN 2
66 #define DMF_FREEING 3
67
68 struct mapped_device {
69         struct rw_semaphore io_lock;
70         struct semaphore suspend_lock;
71         rwlock_t map_lock;
72         atomic_t holders;
73
74         unsigned long flags;
75
76         request_queue_t *queue;
77         struct gendisk *disk;
78         char name[16];
79
80         void *interface_ptr;
81
82         /*
83          * A list of ios that arrived while we were suspended.
84          */
85         atomic_t pending;
86         wait_queue_head_t wait;
87         struct bio_list deferred;
88
89         /*
90          * The current mapping.
91          */
92         struct dm_table *map;
93
94         /*
95          * io objects are allocated from here.
96          */
97         mempool_t *io_pool;
98         mempool_t *tio_pool;
99
100         /*
101          * Event handling.
102          */
103         atomic_t event_nr;
104         wait_queue_head_t eventq;
105
106         /*
107          * freeze/thaw support require holding onto a super block
108          */
109         struct super_block *frozen_sb;
110         struct block_device *suspended_bdev;
111
112         /* forced geometry settings */
113         struct hd_geometry geometry;
114 };
115
116 #define MIN_IOS 256
117 static kmem_cache_t *_io_cache;
118 static kmem_cache_t *_tio_cache;
119
120 static struct bio_set *dm_set;
121
122 static int __init local_init(void)
123 {
124         int r;
125
126         dm_set = bioset_create(16, 16, 4);
127         if (!dm_set)
128                 return -ENOMEM;
129
130         /* allocate a slab for the dm_ios */
131         _io_cache = kmem_cache_create("dm_io",
132                                       sizeof(struct dm_io), 0, 0, NULL, NULL);
133         if (!_io_cache)
134                 return -ENOMEM;
135
136         /* allocate a slab for the target ios */
137         _tio_cache = kmem_cache_create("dm_tio", sizeof(struct target_io),
138                                        0, 0, NULL, NULL);
139         if (!_tio_cache) {
140                 kmem_cache_destroy(_io_cache);
141                 return -ENOMEM;
142         }
143
144         _major = major;
145         r = register_blkdev(_major, _name);
146         if (r < 0) {
147                 kmem_cache_destroy(_tio_cache);
148                 kmem_cache_destroy(_io_cache);
149                 return r;
150         }
151
152         if (!_major)
153                 _major = r;
154
155         return 0;
156 }
157
158 static void local_exit(void)
159 {
160         kmem_cache_destroy(_tio_cache);
161         kmem_cache_destroy(_io_cache);
162
163         bioset_free(dm_set);
164
165         if (unregister_blkdev(_major, _name) < 0)
166                 DMERR("devfs_unregister_blkdev failed");
167
168         _major = 0;
169
170         DMINFO("cleaned up");
171 }
172
173 int (*_inits[])(void) __initdata = {
174         local_init,
175         dm_target_init,
176         dm_linear_init,
177         dm_stripe_init,
178         dm_interface_init,
179 };
180
181 void (*_exits[])(void) = {
182         local_exit,
183         dm_target_exit,
184         dm_linear_exit,
185         dm_stripe_exit,
186         dm_interface_exit,
187 };
188
189 static int __init dm_init(void)
190 {
191         const int count = ARRAY_SIZE(_inits);
192
193         int r, i;
194
195         for (i = 0; i < count; i++) {
196                 r = _inits[i]();
197                 if (r)
198                         goto bad;
199         }
200
201         return 0;
202
203       bad:
204         while (i--)
205                 _exits[i]();
206
207         return r;
208 }
209
210 static void __exit dm_exit(void)
211 {
212         int i = ARRAY_SIZE(_exits);
213
214         while (i--)
215                 _exits[i]();
216 }
217
218 /*
219  * Block device functions
220  */
221 static int dm_blk_open(struct inode *inode, struct file *file)
222 {
223         struct mapped_device *md;
224
225         spin_lock(&_minor_lock);
226
227         md = inode->i_bdev->bd_disk->private_data;
228         if (!md)
229                 goto out;
230
231         if (test_bit(DMF_FREEING, &md->flags)) {
232                 md = NULL;
233                 goto out;
234         }
235
236         dm_get(md);
237
238 out:
239         spin_unlock(&_minor_lock);
240
241         return md ? 0 : -ENXIO;
242 }
243
244 static int dm_blk_close(struct inode *inode, struct file *file)
245 {
246         struct mapped_device *md;
247
248         md = inode->i_bdev->bd_disk->private_data;
249         dm_put(md);
250         return 0;
251 }
252
253 static int dm_blk_getgeo(struct block_device *bdev, struct hd_geometry *geo)
254 {
255         struct mapped_device *md = bdev->bd_disk->private_data;
256
257         return dm_get_geometry(md, geo);
258 }
259
260 static inline struct dm_io *alloc_io(struct mapped_device *md)
261 {
262         return mempool_alloc(md->io_pool, GFP_NOIO);
263 }
264
265 static inline void free_io(struct mapped_device *md, struct dm_io *io)
266 {
267         mempool_free(io, md->io_pool);
268 }
269
270 static inline struct target_io *alloc_tio(struct mapped_device *md)
271 {
272         return mempool_alloc(md->tio_pool, GFP_NOIO);
273 }
274
275 static inline void free_tio(struct mapped_device *md, struct target_io *tio)
276 {
277         mempool_free(tio, md->tio_pool);
278 }
279
280 static void start_io_acct(struct dm_io *io)
281 {
282         struct mapped_device *md = io->md;
283
284         io->start_time = jiffies;
285
286         preempt_disable();
287         disk_round_stats(dm_disk(md));
288         preempt_enable();
289         dm_disk(md)->in_flight = atomic_inc_return(&md->pending);
290 }
291
292 static int end_io_acct(struct dm_io *io)
293 {
294         struct mapped_device *md = io->md;
295         struct bio *bio = io->bio;
296         unsigned long duration = jiffies - io->start_time;
297         int pending;
298         int rw = bio_data_dir(bio);
299
300         preempt_disable();
301         disk_round_stats(dm_disk(md));
302         preempt_enable();
303         dm_disk(md)->in_flight = pending = atomic_dec_return(&md->pending);
304
305         disk_stat_add(dm_disk(md), ticks[rw], duration);
306
307         return !pending;
308 }
309
310 /*
311  * Add the bio to the list of deferred io.
312  */
313 static int queue_io(struct mapped_device *md, struct bio *bio)
314 {
315         down_write(&md->io_lock);
316
317         if (!test_bit(DMF_BLOCK_IO, &md->flags)) {
318                 up_write(&md->io_lock);
319                 return 1;
320         }
321
322         bio_list_add(&md->deferred, bio);
323
324         up_write(&md->io_lock);
325         return 0;               /* deferred successfully */
326 }
327
328 /*
329  * Everyone (including functions in this file), should use this
330  * function to access the md->map field, and make sure they call
331  * dm_table_put() when finished.
332  */
333 struct dm_table *dm_get_table(struct mapped_device *md)
334 {
335         struct dm_table *t;
336
337         read_lock(&md->map_lock);
338         t = md->map;
339         if (t)
340                 dm_table_get(t);
341         read_unlock(&md->map_lock);
342
343         return t;
344 }
345
346 /*
347  * Get the geometry associated with a dm device
348  */
349 int dm_get_geometry(struct mapped_device *md, struct hd_geometry *geo)
350 {
351         *geo = md->geometry;
352
353         return 0;
354 }
355
356 /*
357  * Set the geometry of a device.
358  */
359 int dm_set_geometry(struct mapped_device *md, struct hd_geometry *geo)
360 {
361         sector_t sz = (sector_t)geo->cylinders * geo->heads * geo->sectors;
362
363         if (geo->start > sz) {
364                 DMWARN("Start sector is beyond the geometry limits.");
365                 return -EINVAL;
366         }
367
368         md->geometry = *geo;
369
370         return 0;
371 }
372
373 /*-----------------------------------------------------------------
374  * CRUD START:
375  *   A more elegant soln is in the works that uses the queue
376  *   merge fn, unfortunately there are a couple of changes to
377  *   the block layer that I want to make for this.  So in the
378  *   interests of getting something for people to use I give
379  *   you this clearly demarcated crap.
380  *---------------------------------------------------------------*/
381
382 /*
383  * Decrements the number of outstanding ios that a bio has been
384  * cloned into, completing the original io if necc.
385  */
386 static void dec_pending(struct dm_io *io, int error)
387 {
388         if (error)
389                 io->error = error;
390
391         if (atomic_dec_and_test(&io->io_count)) {
392                 if (end_io_acct(io))
393                         /* nudge anyone waiting on suspend queue */
394                         wake_up(&io->md->wait);
395
396                 blk_add_trace_bio(io->md->queue, io->bio, BLK_TA_COMPLETE);
397
398                 bio_endio(io->bio, io->bio->bi_size, io->error);
399                 free_io(io->md, io);
400         }
401 }
402
403 static int clone_endio(struct bio *bio, unsigned int done, int error)
404 {
405         int r = 0;
406         struct target_io *tio = bio->bi_private;
407         struct dm_io *io = tio->io;
408         dm_endio_fn endio = tio->ti->type->end_io;
409
410         if (bio->bi_size)
411                 return 1;
412
413         if (!bio_flagged(bio, BIO_UPTODATE) && !error)
414                 error = -EIO;
415
416         if (endio) {
417                 r = endio(tio->ti, bio, error, &tio->info);
418                 if (r < 0)
419                         error = r;
420
421                 else if (r > 0)
422                         /* the target wants another shot at the io */
423                         return 1;
424         }
425
426         free_tio(io->md, tio);
427         dec_pending(io, error);
428         bio_put(bio);
429         return r;
430 }
431
432 static sector_t max_io_len(struct mapped_device *md,
433                            sector_t sector, struct dm_target *ti)
434 {
435         sector_t offset = sector - ti->begin;
436         sector_t len = ti->len - offset;
437
438         /*
439          * Does the target need to split even further ?
440          */
441         if (ti->split_io) {
442                 sector_t boundary;
443                 boundary = ((offset + ti->split_io) & ~(ti->split_io - 1))
444                            - offset;
445                 if (len > boundary)
446                         len = boundary;
447         }
448
449         return len;
450 }
451
452 static void __map_bio(struct dm_target *ti, struct bio *clone,
453                       struct target_io *tio)
454 {
455         int r;
456         sector_t sector;
457
458         /*
459          * Sanity checks.
460          */
461         BUG_ON(!clone->bi_size);
462
463         clone->bi_end_io = clone_endio;
464         clone->bi_private = tio;
465
466         /*
467          * Map the clone.  If r == 0 we don't need to do
468          * anything, the target has assumed ownership of
469          * this io.
470          */
471         atomic_inc(&tio->io->io_count);
472         sector = clone->bi_sector;
473         r = ti->type->map(ti, clone, &tio->info);
474         if (r > 0) {
475                 /* the bio has been remapped so dispatch it */
476
477                 blk_add_trace_remap(bdev_get_queue(clone->bi_bdev), clone,
478                                     tio->io->bio->bi_bdev->bd_dev, sector,
479                                     clone->bi_sector);
480
481                 generic_make_request(clone);
482         }
483
484         else if (r < 0) {
485                 /* error the io and bail out */
486                 struct dm_io *io = tio->io;
487                 free_tio(tio->io->md, tio);
488                 dec_pending(io, r);
489                 bio_put(clone);
490         }
491 }
492
493 struct clone_info {
494         struct mapped_device *md;
495         struct dm_table *map;
496         struct bio *bio;
497         struct dm_io *io;
498         sector_t sector;
499         sector_t sector_count;
500         unsigned short idx;
501 };
502
503 static void dm_bio_destructor(struct bio *bio)
504 {
505         bio_free(bio, dm_set);
506 }
507
508 /*
509  * Creates a little bio that is just does part of a bvec.
510  */
511 static struct bio *split_bvec(struct bio *bio, sector_t sector,
512                               unsigned short idx, unsigned int offset,
513                               unsigned int len)
514 {
515         struct bio *clone;
516         struct bio_vec *bv = bio->bi_io_vec + idx;
517
518         clone = bio_alloc_bioset(GFP_NOIO, 1, dm_set);
519         clone->bi_destructor = dm_bio_destructor;
520         *clone->bi_io_vec = *bv;
521
522         clone->bi_sector = sector;
523         clone->bi_bdev = bio->bi_bdev;
524         clone->bi_rw = bio->bi_rw;
525         clone->bi_vcnt = 1;
526         clone->bi_size = to_bytes(len);
527         clone->bi_io_vec->bv_offset = offset;
528         clone->bi_io_vec->bv_len = clone->bi_size;
529
530         return clone;
531 }
532
533 /*
534  * Creates a bio that consists of range of complete bvecs.
535  */
536 static struct bio *clone_bio(struct bio *bio, sector_t sector,
537                              unsigned short idx, unsigned short bv_count,
538                              unsigned int len)
539 {
540         struct bio *clone;
541
542         clone = bio_clone(bio, GFP_NOIO);
543         clone->bi_sector = sector;
544         clone->bi_idx = idx;
545         clone->bi_vcnt = idx + bv_count;
546         clone->bi_size = to_bytes(len);
547         clone->bi_flags &= ~(1 << BIO_SEG_VALID);
548
549         return clone;
550 }
551
552 static void __clone_and_map(struct clone_info *ci)
553 {
554         struct bio *clone, *bio = ci->bio;
555         struct dm_target *ti = dm_table_find_target(ci->map, ci->sector);
556         sector_t len = 0, max = max_io_len(ci->md, ci->sector, ti);
557         struct target_io *tio;
558
559         /*
560          * Allocate a target io object.
561          */
562         tio = alloc_tio(ci->md);
563         tio->io = ci->io;
564         tio->ti = ti;
565         memset(&tio->info, 0, sizeof(tio->info));
566
567         if (ci->sector_count <= max) {
568                 /*
569                  * Optimise for the simple case where we can do all of
570                  * the remaining io with a single clone.
571                  */
572                 clone = clone_bio(bio, ci->sector, ci->idx,
573                                   bio->bi_vcnt - ci->idx, ci->sector_count);
574                 __map_bio(ti, clone, tio);
575                 ci->sector_count = 0;
576
577         } else if (to_sector(bio->bi_io_vec[ci->idx].bv_len) <= max) {
578                 /*
579                  * There are some bvecs that don't span targets.
580                  * Do as many of these as possible.
581                  */
582                 int i;
583                 sector_t remaining = max;
584                 sector_t bv_len;
585
586                 for (i = ci->idx; remaining && (i < bio->bi_vcnt); i++) {
587                         bv_len = to_sector(bio->bi_io_vec[i].bv_len);
588
589                         if (bv_len > remaining)
590                                 break;
591
592                         remaining -= bv_len;
593                         len += bv_len;
594                 }
595
596                 clone = clone_bio(bio, ci->sector, ci->idx, i - ci->idx, len);
597                 __map_bio(ti, clone, tio);
598
599                 ci->sector += len;
600                 ci->sector_count -= len;
601                 ci->idx = i;
602
603         } else {
604                 /*
605                  * Handle a bvec that must be split between two or more targets.
606                  */
607                 struct bio_vec *bv = bio->bi_io_vec + ci->idx;
608                 sector_t remaining = to_sector(bv->bv_len);
609                 unsigned int offset = 0;
610
611                 do {
612                         if (offset) {
613                                 ti = dm_table_find_target(ci->map, ci->sector);
614                                 max = max_io_len(ci->md, ci->sector, ti);
615
616                                 tio = alloc_tio(ci->md);
617                                 tio->io = ci->io;
618                                 tio->ti = ti;
619                                 memset(&tio->info, 0, sizeof(tio->info));
620                         }
621
622                         len = min(remaining, max);
623
624                         clone = split_bvec(bio, ci->sector, ci->idx,
625                                            bv->bv_offset + offset, len);
626
627                         __map_bio(ti, clone, tio);
628
629                         ci->sector += len;
630                         ci->sector_count -= len;
631                         offset += to_bytes(len);
632                 } while (remaining -= len);
633
634                 ci->idx++;
635         }
636 }
637
638 /*
639  * Split the bio into several clones.
640  */
641 static void __split_bio(struct mapped_device *md, struct bio *bio)
642 {
643         struct clone_info ci;
644
645         ci.map = dm_get_table(md);
646         if (!ci.map) {
647                 bio_io_error(bio, bio->bi_size);
648                 return;
649         }
650
651         ci.md = md;
652         ci.bio = bio;
653         ci.io = alloc_io(md);
654         ci.io->error = 0;
655         atomic_set(&ci.io->io_count, 1);
656         ci.io->bio = bio;
657         ci.io->md = md;
658         ci.sector = bio->bi_sector;
659         ci.sector_count = bio_sectors(bio);
660         ci.idx = bio->bi_idx;
661
662         start_io_acct(ci.io);
663         while (ci.sector_count)
664                 __clone_and_map(&ci);
665
666         /* drop the extra reference count */
667         dec_pending(ci.io, 0);
668         dm_table_put(ci.map);
669 }
670 /*-----------------------------------------------------------------
671  * CRUD END
672  *---------------------------------------------------------------*/
673
674 /*
675  * The request function that just remaps the bio built up by
676  * dm_merge_bvec.
677  */
678 static int dm_request(request_queue_t *q, struct bio *bio)
679 {
680         int r;
681         int rw = bio_data_dir(bio);
682         struct mapped_device *md = q->queuedata;
683
684         down_read(&md->io_lock);
685
686         disk_stat_inc(dm_disk(md), ios[rw]);
687         disk_stat_add(dm_disk(md), sectors[rw], bio_sectors(bio));
688
689         /*
690          * If we're suspended we have to queue
691          * this io for later.
692          */
693         while (test_bit(DMF_BLOCK_IO, &md->flags)) {
694                 up_read(&md->io_lock);
695
696                 if (bio_rw(bio) == READA) {
697                         bio_io_error(bio, bio->bi_size);
698                         return 0;
699                 }
700
701                 r = queue_io(md, bio);
702                 if (r < 0) {
703                         bio_io_error(bio, bio->bi_size);
704                         return 0;
705
706                 } else if (r == 0)
707                         return 0;       /* deferred successfully */
708
709                 /*
710                  * We're in a while loop, because someone could suspend
711                  * before we get to the following read lock.
712                  */
713                 down_read(&md->io_lock);
714         }
715
716         __split_bio(md, bio);
717         up_read(&md->io_lock);
718         return 0;
719 }
720
721 static int dm_flush_all(request_queue_t *q, struct gendisk *disk,
722                         sector_t *error_sector)
723 {
724         struct mapped_device *md = q->queuedata;
725         struct dm_table *map = dm_get_table(md);
726         int ret = -ENXIO;
727
728         if (map) {
729                 ret = dm_table_flush_all(map);
730                 dm_table_put(map);
731         }
732
733         return ret;
734 }
735
736 static void dm_unplug_all(request_queue_t *q)
737 {
738         struct mapped_device *md = q->queuedata;
739         struct dm_table *map = dm_get_table(md);
740
741         if (map) {
742                 dm_table_unplug_all(map);
743                 dm_table_put(map);
744         }
745 }
746
747 static int dm_any_congested(void *congested_data, int bdi_bits)
748 {
749         int r;
750         struct mapped_device *md = (struct mapped_device *) congested_data;
751         struct dm_table *map = dm_get_table(md);
752
753         if (!map || test_bit(DMF_BLOCK_IO, &md->flags))
754                 r = bdi_bits;
755         else
756                 r = dm_table_any_congested(map, bdi_bits);
757
758         dm_table_put(map);
759         return r;
760 }
761
762 /*-----------------------------------------------------------------
763  * An IDR is used to keep track of allocated minor numbers.
764  *---------------------------------------------------------------*/
765 static DEFINE_IDR(_minor_idr);
766
767 static void free_minor(int minor)
768 {
769         spin_lock(&_minor_lock);
770         idr_remove(&_minor_idr, minor);
771         spin_unlock(&_minor_lock);
772 }
773
774 /*
775  * See if the device with a specific minor # is free.
776  */
777 static int specific_minor(struct mapped_device *md, int minor)
778 {
779         int r, m;
780
781         if (minor >= (1 << MINORBITS))
782                 return -EINVAL;
783
784         r = idr_pre_get(&_minor_idr, GFP_KERNEL);
785         if (!r)
786                 return -ENOMEM;
787
788         spin_lock(&_minor_lock);
789
790         if (idr_find(&_minor_idr, minor)) {
791                 r = -EBUSY;
792                 goto out;
793         }
794
795         r = idr_get_new_above(&_minor_idr, MINOR_ALLOCED, minor, &m);
796         if (r)
797                 goto out;
798
799         if (m != minor) {
800                 idr_remove(&_minor_idr, m);
801                 r = -EBUSY;
802                 goto out;
803         }
804
805 out:
806         spin_unlock(&_minor_lock);
807         return r;
808 }
809
810 static int next_free_minor(struct mapped_device *md, int *minor)
811 {
812         int r, m;
813
814         r = idr_pre_get(&_minor_idr, GFP_KERNEL);
815         if (!r)
816                 return -ENOMEM;
817
818         spin_lock(&_minor_lock);
819
820         r = idr_get_new(&_minor_idr, MINOR_ALLOCED, &m);
821         if (r) {
822                 goto out;
823         }
824
825         if (m >= (1 << MINORBITS)) {
826                 idr_remove(&_minor_idr, m);
827                 r = -ENOSPC;
828                 goto out;
829         }
830
831         *minor = m;
832
833 out:
834         spin_unlock(&_minor_lock);
835         return r;
836 }
837
838 static struct block_device_operations dm_blk_dops;
839
840 /*
841  * Allocate and initialise a blank device with a given minor.
842  */
843 static struct mapped_device *alloc_dev(int minor)
844 {
845         int r;
846         struct mapped_device *md = kmalloc(sizeof(*md), GFP_KERNEL);
847         void *old_md;
848
849         if (!md) {
850                 DMWARN("unable to allocate device, out of memory.");
851                 return NULL;
852         }
853
854         if (!try_module_get(THIS_MODULE))
855                 goto bad0;
856
857         /* get a minor number for the dev */
858         if (minor == DM_ANY_MINOR)
859                 r = next_free_minor(md, &minor);
860         else
861                 r = specific_minor(md, minor);
862         if (r < 0)
863                 goto bad1;
864
865         memset(md, 0, sizeof(*md));
866         init_rwsem(&md->io_lock);
867         init_MUTEX(&md->suspend_lock);
868         rwlock_init(&md->map_lock);
869         atomic_set(&md->holders, 1);
870         atomic_set(&md->event_nr, 0);
871
872         md->queue = blk_alloc_queue(GFP_KERNEL);
873         if (!md->queue)
874                 goto bad1;
875
876         md->queue->queuedata = md;
877         md->queue->backing_dev_info.congested_fn = dm_any_congested;
878         md->queue->backing_dev_info.congested_data = md;
879         blk_queue_make_request(md->queue, dm_request);
880         blk_queue_bounce_limit(md->queue, BLK_BOUNCE_ANY);
881         md->queue->unplug_fn = dm_unplug_all;
882         md->queue->issue_flush_fn = dm_flush_all;
883
884         md->io_pool = mempool_create_slab_pool(MIN_IOS, _io_cache);
885         if (!md->io_pool)
886                 goto bad2;
887
888         md->tio_pool = mempool_create_slab_pool(MIN_IOS, _tio_cache);
889         if (!md->tio_pool)
890                 goto bad3;
891
892         md->disk = alloc_disk(1);
893         if (!md->disk)
894                 goto bad4;
895
896         atomic_set(&md->pending, 0);
897         init_waitqueue_head(&md->wait);
898         init_waitqueue_head(&md->eventq);
899
900         md->disk->major = _major;
901         md->disk->first_minor = minor;
902         md->disk->fops = &dm_blk_dops;
903         md->disk->queue = md->queue;
904         md->disk->private_data = md;
905         sprintf(md->disk->disk_name, "dm-%d", minor);
906         add_disk(md->disk);
907         format_dev_t(md->name, MKDEV(_major, minor));
908
909         /* Populate the mapping, nobody knows we exist yet */
910         spin_lock(&_minor_lock);
911         old_md = idr_replace(&_minor_idr, md, minor);
912         spin_unlock(&_minor_lock);
913
914         BUG_ON(old_md != MINOR_ALLOCED);
915
916         return md;
917
918  bad4:
919         mempool_destroy(md->tio_pool);
920  bad3:
921         mempool_destroy(md->io_pool);
922  bad2:
923         blk_cleanup_queue(md->queue);
924         free_minor(minor);
925  bad1:
926         module_put(THIS_MODULE);
927  bad0:
928         kfree(md);
929         return NULL;
930 }
931
932 static void free_dev(struct mapped_device *md)
933 {
934         int minor = md->disk->first_minor;
935
936         if (md->suspended_bdev) {
937                 thaw_bdev(md->suspended_bdev, NULL);
938                 bdput(md->suspended_bdev);
939         }
940         mempool_destroy(md->tio_pool);
941         mempool_destroy(md->io_pool);
942         del_gendisk(md->disk);
943         free_minor(minor);
944
945         spin_lock(&_minor_lock);
946         md->disk->private_data = NULL;
947         spin_unlock(&_minor_lock);
948
949         put_disk(md->disk);
950         blk_cleanup_queue(md->queue);
951         module_put(THIS_MODULE);
952         kfree(md);
953 }
954
955 /*
956  * Bind a table to the device.
957  */
958 static void event_callback(void *context)
959 {
960         struct mapped_device *md = (struct mapped_device *) context;
961
962         atomic_inc(&md->event_nr);
963         wake_up(&md->eventq);
964 }
965
966 static void __set_size(struct mapped_device *md, sector_t size)
967 {
968         set_capacity(md->disk, size);
969
970         mutex_lock(&md->suspended_bdev->bd_inode->i_mutex);
971         i_size_write(md->suspended_bdev->bd_inode, (loff_t)size << SECTOR_SHIFT);
972         mutex_unlock(&md->suspended_bdev->bd_inode->i_mutex);
973 }
974
975 static int __bind(struct mapped_device *md, struct dm_table *t)
976 {
977         request_queue_t *q = md->queue;
978         sector_t size;
979
980         size = dm_table_get_size(t);
981
982         /*
983          * Wipe any geometry if the size of the table changed.
984          */
985         if (size != get_capacity(md->disk))
986                 memset(&md->geometry, 0, sizeof(md->geometry));
987
988         __set_size(md, size);
989         if (size == 0)
990                 return 0;
991
992         dm_table_get(t);
993         dm_table_event_callback(t, event_callback, md);
994
995         write_lock(&md->map_lock);
996         md->map = t;
997         dm_table_set_restrictions(t, q);
998         write_unlock(&md->map_lock);
999
1000         return 0;
1001 }
1002
1003 static void __unbind(struct mapped_device *md)
1004 {
1005         struct dm_table *map = md->map;
1006
1007         if (!map)
1008                 return;
1009
1010         dm_table_event_callback(map, NULL, NULL);
1011         write_lock(&md->map_lock);
1012         md->map = NULL;
1013         write_unlock(&md->map_lock);
1014         dm_table_put(map);
1015 }
1016
1017 /*
1018  * Constructor for a new device.
1019  */
1020 int dm_create(int minor, struct mapped_device **result)
1021 {
1022         struct mapped_device *md;
1023
1024         md = alloc_dev(minor);
1025         if (!md)
1026                 return -ENXIO;
1027
1028         *result = md;
1029         return 0;
1030 }
1031
1032 static struct mapped_device *dm_find_md(dev_t dev)
1033 {
1034         struct mapped_device *md;
1035         unsigned minor = MINOR(dev);
1036
1037         if (MAJOR(dev) != _major || minor >= (1 << MINORBITS))
1038                 return NULL;
1039
1040         spin_lock(&_minor_lock);
1041
1042         md = idr_find(&_minor_idr, minor);
1043         if (md && (md == MINOR_ALLOCED ||
1044                    (dm_disk(md)->first_minor != minor) ||
1045                    test_bit(DMF_FREEING, &md->flags))) {
1046                 md = NULL;
1047                 goto out;
1048         }
1049
1050 out:
1051         spin_unlock(&_minor_lock);
1052
1053         return md;
1054 }
1055
1056 struct mapped_device *dm_get_md(dev_t dev)
1057 {
1058         struct mapped_device *md = dm_find_md(dev);
1059
1060         if (md)
1061                 dm_get(md);
1062
1063         return md;
1064 }
1065
1066 void *dm_get_mdptr(struct mapped_device *md)
1067 {
1068         return md->interface_ptr;
1069 }
1070
1071 void dm_set_mdptr(struct mapped_device *md, void *ptr)
1072 {
1073         md->interface_ptr = ptr;
1074 }
1075
1076 void dm_get(struct mapped_device *md)
1077 {
1078         atomic_inc(&md->holders);
1079 }
1080
1081 void dm_put(struct mapped_device *md)
1082 {
1083         struct dm_table *map;
1084
1085         BUG_ON(test_bit(DMF_FREEING, &md->flags));
1086
1087         if (atomic_dec_and_lock(&md->holders, &_minor_lock)) {
1088                 map = dm_get_table(md);
1089                 idr_replace(&_minor_idr, MINOR_ALLOCED, dm_disk(md)->first_minor);
1090                 set_bit(DMF_FREEING, &md->flags);
1091                 spin_unlock(&_minor_lock);
1092                 if (!dm_suspended(md)) {
1093                         dm_table_presuspend_targets(map);
1094                         dm_table_postsuspend_targets(map);
1095                 }
1096                 __unbind(md);
1097                 dm_table_put(map);
1098                 free_dev(md);
1099         }
1100 }
1101
1102 /*
1103  * Process the deferred bios
1104  */
1105 static void __flush_deferred_io(struct mapped_device *md, struct bio *c)
1106 {
1107         struct bio *n;
1108
1109         while (c) {
1110                 n = c->bi_next;
1111                 c->bi_next = NULL;
1112                 __split_bio(md, c);
1113                 c = n;
1114         }
1115 }
1116
1117 /*
1118  * Swap in a new table (destroying old one).
1119  */
1120 int dm_swap_table(struct mapped_device *md, struct dm_table *table)
1121 {
1122         int r = -EINVAL;
1123
1124         down(&md->suspend_lock);
1125
1126         /* device must be suspended */
1127         if (!dm_suspended(md))
1128                 goto out;
1129
1130         __unbind(md);
1131         r = __bind(md, table);
1132
1133 out:
1134         up(&md->suspend_lock);
1135         return r;
1136 }
1137
1138 /*
1139  * Functions to lock and unlock any filesystem running on the
1140  * device.
1141  */
1142 static int lock_fs(struct mapped_device *md)
1143 {
1144         int r;
1145
1146         WARN_ON(md->frozen_sb);
1147
1148         md->frozen_sb = freeze_bdev(md->suspended_bdev);
1149         if (IS_ERR(md->frozen_sb)) {
1150                 r = PTR_ERR(md->frozen_sb);
1151                 md->frozen_sb = NULL;
1152                 return r;
1153         }
1154
1155         set_bit(DMF_FROZEN, &md->flags);
1156
1157         /* don't bdput right now, we don't want the bdev
1158          * to go away while it is locked.
1159          */
1160         return 0;
1161 }
1162
1163 static void unlock_fs(struct mapped_device *md)
1164 {
1165         if (!test_bit(DMF_FROZEN, &md->flags))
1166                 return;
1167
1168         thaw_bdev(md->suspended_bdev, md->frozen_sb);
1169         md->frozen_sb = NULL;
1170         clear_bit(DMF_FROZEN, &md->flags);
1171 }
1172
1173 /*
1174  * We need to be able to change a mapping table under a mounted
1175  * filesystem.  For example we might want to move some data in
1176  * the background.  Before the table can be swapped with
1177  * dm_bind_table, dm_suspend must be called to flush any in
1178  * flight bios and ensure that any further io gets deferred.
1179  */
1180 int dm_suspend(struct mapped_device *md, int do_lockfs)
1181 {
1182         struct dm_table *map = NULL;
1183         DECLARE_WAITQUEUE(wait, current);
1184         struct bio *def;
1185         int r = -EINVAL;
1186
1187         down(&md->suspend_lock);
1188
1189         if (dm_suspended(md))
1190                 goto out;
1191
1192         map = dm_get_table(md);
1193
1194         /* This does not get reverted if there's an error later. */
1195         dm_table_presuspend_targets(map);
1196
1197         md->suspended_bdev = bdget_disk(md->disk, 0);
1198         if (!md->suspended_bdev) {
1199                 DMWARN("bdget failed in dm_suspend");
1200                 r = -ENOMEM;
1201                 goto out;
1202         }
1203
1204         /* Flush I/O to the device. */
1205         if (do_lockfs) {
1206                 r = lock_fs(md);
1207                 if (r)
1208                         goto out;
1209         }
1210
1211         /*
1212          * First we set the BLOCK_IO flag so no more ios will be mapped.
1213          */
1214         down_write(&md->io_lock);
1215         set_bit(DMF_BLOCK_IO, &md->flags);
1216
1217         add_wait_queue(&md->wait, &wait);
1218         up_write(&md->io_lock);
1219
1220         /* unplug */
1221         if (map)
1222                 dm_table_unplug_all(map);
1223
1224         /*
1225          * Then we wait for the already mapped ios to
1226          * complete.
1227          */
1228         while (1) {
1229                 set_current_state(TASK_INTERRUPTIBLE);
1230
1231                 if (!atomic_read(&md->pending) || signal_pending(current))
1232                         break;
1233
1234                 io_schedule();
1235         }
1236         set_current_state(TASK_RUNNING);
1237
1238         down_write(&md->io_lock);
1239         remove_wait_queue(&md->wait, &wait);
1240
1241         /* were we interrupted ? */
1242         r = -EINTR;
1243         if (atomic_read(&md->pending)) {
1244                 clear_bit(DMF_BLOCK_IO, &md->flags);
1245                 def = bio_list_get(&md->deferred);
1246                 __flush_deferred_io(md, def);
1247                 up_write(&md->io_lock);
1248                 unlock_fs(md);
1249                 goto out;
1250         }
1251         up_write(&md->io_lock);
1252
1253         dm_table_postsuspend_targets(map);
1254
1255         set_bit(DMF_SUSPENDED, &md->flags);
1256
1257         r = 0;
1258
1259 out:
1260         if (r && md->suspended_bdev) {
1261                 bdput(md->suspended_bdev);
1262                 md->suspended_bdev = NULL;
1263         }
1264
1265         dm_table_put(map);
1266         up(&md->suspend_lock);
1267         return r;
1268 }
1269
1270 int dm_resume(struct mapped_device *md)
1271 {
1272         int r = -EINVAL;
1273         struct bio *def;
1274         struct dm_table *map = NULL;
1275
1276         down(&md->suspend_lock);
1277         if (!dm_suspended(md))
1278                 goto out;
1279
1280         map = dm_get_table(md);
1281         if (!map || !dm_table_get_size(map))
1282                 goto out;
1283
1284         dm_table_resume_targets(map);
1285
1286         down_write(&md->io_lock);
1287         clear_bit(DMF_BLOCK_IO, &md->flags);
1288
1289         def = bio_list_get(&md->deferred);
1290         __flush_deferred_io(md, def);
1291         up_write(&md->io_lock);
1292
1293         unlock_fs(md);
1294
1295         bdput(md->suspended_bdev);
1296         md->suspended_bdev = NULL;
1297
1298         clear_bit(DMF_SUSPENDED, &md->flags);
1299
1300         dm_table_unplug_all(map);
1301
1302         r = 0;
1303
1304 out:
1305         dm_table_put(map);
1306         up(&md->suspend_lock);
1307
1308         return r;
1309 }
1310
1311 /*-----------------------------------------------------------------
1312  * Event notification.
1313  *---------------------------------------------------------------*/
1314 uint32_t dm_get_event_nr(struct mapped_device *md)
1315 {
1316         return atomic_read(&md->event_nr);
1317 }
1318
1319 int dm_wait_event(struct mapped_device *md, int event_nr)
1320 {
1321         return wait_event_interruptible(md->eventq,
1322                         (event_nr != atomic_read(&md->event_nr)));
1323 }
1324
1325 /*
1326  * The gendisk is only valid as long as you have a reference
1327  * count on 'md'.
1328  */
1329 struct gendisk *dm_disk(struct mapped_device *md)
1330 {
1331         return md->disk;
1332 }
1333
1334 int dm_suspended(struct mapped_device *md)
1335 {
1336         return test_bit(DMF_SUSPENDED, &md->flags);
1337 }
1338
1339 static struct block_device_operations dm_blk_dops = {
1340         .open = dm_blk_open,
1341         .release = dm_blk_close,
1342         .getgeo = dm_blk_getgeo,
1343         .owner = THIS_MODULE
1344 };
1345
1346 EXPORT_SYMBOL(dm_get_mapinfo);
1347
1348 /*
1349  * module hooks
1350  */
1351 module_init(dm_init);
1352 module_exit(dm_exit);
1353
1354 module_param(major, uint, 0);
1355 MODULE_PARM_DESC(major, "The major number of the device mapper");
1356 MODULE_DESCRIPTION(DM_NAME " driver");
1357 MODULE_AUTHOR("Joe Thornber <dm-devel@redhat.com>");
1358 MODULE_LICENSE("GPL");