Merge to Fedora kernel-2.6.17-1.2187_FC5 patched with stable patch-2.6.17.13-vs2...
[linux-2.6.git] / drivers / md / dm.c
1 /*
2  * Copyright (C) 2001, 2002 Sistina Software (UK) Limited.
3  * Copyright (C) 2004 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(unsigned 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, unsigned 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, unsigned int *minor)
811 {
812         int r;
813         unsigned int m;
814
815         r = idr_pre_get(&_minor_idr, GFP_KERNEL);
816         if (!r)
817                 return -ENOMEM;
818
819         spin_lock(&_minor_lock);
820
821         r = idr_get_new(&_minor_idr, MINOR_ALLOCED, &m);
822         if (r) {
823                 goto out;
824         }
825
826         if (m >= (1 << MINORBITS)) {
827                 idr_remove(&_minor_idr, m);
828                 r = -ENOSPC;
829                 goto out;
830         }
831
832         *minor = m;
833
834 out:
835         spin_unlock(&_minor_lock);
836         return r;
837 }
838
839 static struct block_device_operations dm_blk_dops;
840
841 /*
842  * Allocate and initialise a blank device with a given minor.
843  */
844 static struct mapped_device *alloc_dev(unsigned int minor, int persistent)
845 {
846         int r;
847         struct mapped_device *md = kmalloc(sizeof(*md), GFP_KERNEL);
848         void *old_md;
849
850         if (!md) {
851                 DMWARN("unable to allocate device, out of memory.");
852                 return NULL;
853         }
854
855         if (!try_module_get(THIS_MODULE))
856                 goto bad0;
857
858         /* get a minor number for the dev */
859         r = persistent ? specific_minor(md, minor) : next_free_minor(md, &minor);
860         if (r < 0)
861                 goto bad1;
862
863         memset(md, 0, sizeof(*md));
864         init_rwsem(&md->io_lock);
865         init_MUTEX(&md->suspend_lock);
866         rwlock_init(&md->map_lock);
867         atomic_set(&md->holders, 1);
868         atomic_set(&md->event_nr, 0);
869
870         md->queue = blk_alloc_queue(GFP_KERNEL);
871         if (!md->queue)
872                 goto bad1;
873
874         md->queue->queuedata = md;
875         md->queue->backing_dev_info.congested_fn = dm_any_congested;
876         md->queue->backing_dev_info.congested_data = md;
877         blk_queue_make_request(md->queue, dm_request);
878         blk_queue_bounce_limit(md->queue, BLK_BOUNCE_ANY);
879         md->queue->unplug_fn = dm_unplug_all;
880         md->queue->issue_flush_fn = dm_flush_all;
881
882         md->io_pool = mempool_create_slab_pool(MIN_IOS, _io_cache);
883         if (!md->io_pool)
884                 goto bad2;
885
886         md->tio_pool = mempool_create_slab_pool(MIN_IOS, _tio_cache);
887         if (!md->tio_pool)
888                 goto bad3;
889
890         md->disk = alloc_disk(1);
891         if (!md->disk)
892                 goto bad4;
893
894         atomic_set(&md->pending, 0);
895         init_waitqueue_head(&md->wait);
896         init_waitqueue_head(&md->eventq);
897
898         md->disk->major = _major;
899         md->disk->first_minor = minor;
900         md->disk->fops = &dm_blk_dops;
901         md->disk->queue = md->queue;
902         md->disk->private_data = md;
903         sprintf(md->disk->disk_name, "dm-%d", minor);
904         add_disk(md->disk);
905         format_dev_t(md->name, MKDEV(_major, minor));
906
907         /* Populate the mapping, nobody knows we exist yet */
908         spin_lock(&_minor_lock);
909         old_md = idr_replace(&_minor_idr, md, minor);
910         spin_unlock(&_minor_lock);
911
912         BUG_ON(old_md != MINOR_ALLOCED);
913
914         return md;
915
916  bad4:
917         mempool_destroy(md->tio_pool);
918  bad3:
919         mempool_destroy(md->io_pool);
920  bad2:
921         blk_cleanup_queue(md->queue);
922         free_minor(minor);
923  bad1:
924         module_put(THIS_MODULE);
925  bad0:
926         kfree(md);
927         return NULL;
928 }
929
930 static void free_dev(struct mapped_device *md)
931 {
932         unsigned int minor = md->disk->first_minor;
933
934         if (md->suspended_bdev) {
935                 thaw_bdev(md->suspended_bdev, NULL);
936                 bdput(md->suspended_bdev);
937         }
938         mempool_destroy(md->tio_pool);
939         mempool_destroy(md->io_pool);
940         del_gendisk(md->disk);
941         free_minor(minor);
942
943         spin_lock(&_minor_lock);
944         md->disk->private_data = NULL;
945         spin_unlock(&_minor_lock);
946
947         put_disk(md->disk);
948         blk_cleanup_queue(md->queue);
949         module_put(THIS_MODULE);
950         kfree(md);
951 }
952
953 /*
954  * Bind a table to the device.
955  */
956 static void event_callback(void *context)
957 {
958         struct mapped_device *md = (struct mapped_device *) context;
959
960         atomic_inc(&md->event_nr);
961         wake_up(&md->eventq);
962 }
963
964 static void __set_size(struct mapped_device *md, sector_t size)
965 {
966         set_capacity(md->disk, size);
967
968         mutex_lock(&md->suspended_bdev->bd_inode->i_mutex);
969         i_size_write(md->suspended_bdev->bd_inode, (loff_t)size << SECTOR_SHIFT);
970         mutex_unlock(&md->suspended_bdev->bd_inode->i_mutex);
971 }
972
973 static int __bind(struct mapped_device *md, struct dm_table *t)
974 {
975         request_queue_t *q = md->queue;
976         sector_t size;
977
978         size = dm_table_get_size(t);
979
980         /*
981          * Wipe any geometry if the size of the table changed.
982          */
983         if (size != get_capacity(md->disk))
984                 memset(&md->geometry, 0, sizeof(md->geometry));
985
986         __set_size(md, size);
987         if (size == 0)
988                 return 0;
989
990         dm_table_get(t);
991         dm_table_event_callback(t, event_callback, md);
992
993         write_lock(&md->map_lock);
994         md->map = t;
995         dm_table_set_restrictions(t, q);
996         write_unlock(&md->map_lock);
997
998         return 0;
999 }
1000
1001 static void __unbind(struct mapped_device *md)
1002 {
1003         struct dm_table *map = md->map;
1004
1005         if (!map)
1006                 return;
1007
1008         dm_table_event_callback(map, NULL, NULL);
1009         write_lock(&md->map_lock);
1010         md->map = NULL;
1011         write_unlock(&md->map_lock);
1012         dm_table_put(map);
1013 }
1014
1015 /*
1016  * Constructor for a new device.
1017  */
1018 static int create_aux(unsigned int minor, int persistent,
1019                       struct mapped_device **result)
1020 {
1021         struct mapped_device *md;
1022
1023         md = alloc_dev(minor, persistent);
1024         if (!md)
1025                 return -ENXIO;
1026
1027         *result = md;
1028         return 0;
1029 }
1030
1031 int dm_create(struct mapped_device **result)
1032 {
1033         return create_aux(0, 0, result);
1034 }
1035
1036 int dm_create_with_minor(unsigned int minor, struct mapped_device **result)
1037 {
1038         return create_aux(minor, 1, result);
1039 }
1040
1041 static struct mapped_device *dm_find_md(dev_t dev)
1042 {
1043         struct mapped_device *md;
1044         unsigned minor = MINOR(dev);
1045
1046         if (MAJOR(dev) != _major || minor >= (1 << MINORBITS))
1047                 return NULL;
1048
1049         spin_lock(&_minor_lock);
1050
1051         md = idr_find(&_minor_idr, minor);
1052         if (md && (md == MINOR_ALLOCED ||
1053                    (dm_disk(md)->first_minor != minor) ||
1054                    test_bit(DMF_FREEING, &md->flags))) {
1055                 md = NULL;
1056                 goto out;
1057         }
1058
1059 out:
1060         spin_unlock(&_minor_lock);
1061
1062         return md;
1063 }
1064
1065 struct mapped_device *dm_get_md(dev_t dev)
1066 {
1067         struct mapped_device *md = dm_find_md(dev);
1068
1069         if (md)
1070                 dm_get(md);
1071
1072         return md;
1073 }
1074
1075 void *dm_get_mdptr(struct mapped_device *md)
1076 {
1077         return md->interface_ptr;
1078 }
1079
1080 void dm_set_mdptr(struct mapped_device *md, void *ptr)
1081 {
1082         md->interface_ptr = ptr;
1083 }
1084
1085 void dm_get(struct mapped_device *md)
1086 {
1087         atomic_inc(&md->holders);
1088 }
1089
1090 void dm_put(struct mapped_device *md)
1091 {
1092         struct dm_table *map;
1093
1094         BUG_ON(test_bit(DMF_FREEING, &md->flags));
1095
1096         if (atomic_dec_and_lock(&md->holders, &_minor_lock)) {
1097                 map = dm_get_table(md);
1098                 idr_replace(&_minor_idr, MINOR_ALLOCED, dm_disk(md)->first_minor);
1099                 set_bit(DMF_FREEING, &md->flags);
1100                 spin_unlock(&_minor_lock);
1101                 if (!dm_suspended(md)) {
1102                         dm_table_presuspend_targets(map);
1103                         dm_table_postsuspend_targets(map);
1104                 }
1105                 __unbind(md);
1106                 dm_table_put(map);
1107                 free_dev(md);
1108         }
1109 }
1110
1111 /*
1112  * Process the deferred bios
1113  */
1114 static void __flush_deferred_io(struct mapped_device *md, struct bio *c)
1115 {
1116         struct bio *n;
1117
1118         while (c) {
1119                 n = c->bi_next;
1120                 c->bi_next = NULL;
1121                 __split_bio(md, c);
1122                 c = n;
1123         }
1124 }
1125
1126 /*
1127  * Swap in a new table (destroying old one).
1128  */
1129 int dm_swap_table(struct mapped_device *md, struct dm_table *table)
1130 {
1131         int r = -EINVAL;
1132
1133         down(&md->suspend_lock);
1134
1135         /* device must be suspended */
1136         if (!dm_suspended(md))
1137                 goto out;
1138
1139         __unbind(md);
1140         r = __bind(md, table);
1141
1142 out:
1143         up(&md->suspend_lock);
1144         return r;
1145 }
1146
1147 /*
1148  * Functions to lock and unlock any filesystem running on the
1149  * device.
1150  */
1151 static int lock_fs(struct mapped_device *md)
1152 {
1153         int r;
1154
1155         WARN_ON(md->frozen_sb);
1156
1157         md->frozen_sb = freeze_bdev(md->suspended_bdev);
1158         if (IS_ERR(md->frozen_sb)) {
1159                 r = PTR_ERR(md->frozen_sb);
1160                 md->frozen_sb = NULL;
1161                 return r;
1162         }
1163
1164         set_bit(DMF_FROZEN, &md->flags);
1165
1166         /* don't bdput right now, we don't want the bdev
1167          * to go away while it is locked.
1168          */
1169         return 0;
1170 }
1171
1172 static void unlock_fs(struct mapped_device *md)
1173 {
1174         if (!test_bit(DMF_FROZEN, &md->flags))
1175                 return;
1176
1177         thaw_bdev(md->suspended_bdev, md->frozen_sb);
1178         md->frozen_sb = NULL;
1179         clear_bit(DMF_FROZEN, &md->flags);
1180 }
1181
1182 /*
1183  * We need to be able to change a mapping table under a mounted
1184  * filesystem.  For example we might want to move some data in
1185  * the background.  Before the table can be swapped with
1186  * dm_bind_table, dm_suspend must be called to flush any in
1187  * flight bios and ensure that any further io gets deferred.
1188  */
1189 int dm_suspend(struct mapped_device *md, int do_lockfs)
1190 {
1191         struct dm_table *map = NULL;
1192         DECLARE_WAITQUEUE(wait, current);
1193         struct bio *def;
1194         int r = -EINVAL;
1195
1196         down(&md->suspend_lock);
1197
1198         if (dm_suspended(md))
1199                 goto out;
1200
1201         map = dm_get_table(md);
1202
1203         /* This does not get reverted if there's an error later. */
1204         dm_table_presuspend_targets(map);
1205
1206         md->suspended_bdev = bdget_disk(md->disk, 0);
1207         if (!md->suspended_bdev) {
1208                 DMWARN("bdget failed in dm_suspend");
1209                 r = -ENOMEM;
1210                 goto out;
1211         }
1212
1213         /* Flush I/O to the device. */
1214         if (do_lockfs) {
1215                 r = lock_fs(md);
1216                 if (r)
1217                         goto out;
1218         }
1219
1220         /*
1221          * First we set the BLOCK_IO flag so no more ios will be mapped.
1222          */
1223         down_write(&md->io_lock);
1224         set_bit(DMF_BLOCK_IO, &md->flags);
1225
1226         add_wait_queue(&md->wait, &wait);
1227         up_write(&md->io_lock);
1228
1229         /* unplug */
1230         if (map)
1231                 dm_table_unplug_all(map);
1232
1233         /*
1234          * Then we wait for the already mapped ios to
1235          * complete.
1236          */
1237         while (1) {
1238                 set_current_state(TASK_INTERRUPTIBLE);
1239
1240                 if (!atomic_read(&md->pending) || signal_pending(current))
1241                         break;
1242
1243                 io_schedule();
1244         }
1245         set_current_state(TASK_RUNNING);
1246
1247         down_write(&md->io_lock);
1248         remove_wait_queue(&md->wait, &wait);
1249
1250         /* were we interrupted ? */
1251         r = -EINTR;
1252         if (atomic_read(&md->pending)) {
1253                 clear_bit(DMF_BLOCK_IO, &md->flags);
1254                 def = bio_list_get(&md->deferred);
1255                 __flush_deferred_io(md, def);
1256                 up_write(&md->io_lock);
1257                 unlock_fs(md);
1258                 goto out;
1259         }
1260         up_write(&md->io_lock);
1261
1262         dm_table_postsuspend_targets(map);
1263
1264         set_bit(DMF_SUSPENDED, &md->flags);
1265
1266         r = 0;
1267
1268 out:
1269         if (r && md->suspended_bdev) {
1270                 bdput(md->suspended_bdev);
1271                 md->suspended_bdev = NULL;
1272         }
1273
1274         dm_table_put(map);
1275         up(&md->suspend_lock);
1276         return r;
1277 }
1278
1279 int dm_resume(struct mapped_device *md)
1280 {
1281         int r = -EINVAL;
1282         struct bio *def;
1283         struct dm_table *map = NULL;
1284
1285         down(&md->suspend_lock);
1286         if (!dm_suspended(md))
1287                 goto out;
1288
1289         map = dm_get_table(md);
1290         if (!map || !dm_table_get_size(map))
1291                 goto out;
1292
1293         dm_table_resume_targets(map);
1294
1295         down_write(&md->io_lock);
1296         clear_bit(DMF_BLOCK_IO, &md->flags);
1297
1298         def = bio_list_get(&md->deferred);
1299         __flush_deferred_io(md, def);
1300         up_write(&md->io_lock);
1301
1302         unlock_fs(md);
1303
1304         bdput(md->suspended_bdev);
1305         md->suspended_bdev = NULL;
1306
1307         clear_bit(DMF_SUSPENDED, &md->flags);
1308
1309         dm_table_unplug_all(map);
1310
1311         r = 0;
1312
1313 out:
1314         dm_table_put(map);
1315         up(&md->suspend_lock);
1316
1317         return r;
1318 }
1319
1320 /*-----------------------------------------------------------------
1321  * Event notification.
1322  *---------------------------------------------------------------*/
1323 uint32_t dm_get_event_nr(struct mapped_device *md)
1324 {
1325         return atomic_read(&md->event_nr);
1326 }
1327
1328 int dm_wait_event(struct mapped_device *md, int event_nr)
1329 {
1330         return wait_event_interruptible(md->eventq,
1331                         (event_nr != atomic_read(&md->event_nr)));
1332 }
1333
1334 /*
1335  * The gendisk is only valid as long as you have a reference
1336  * count on 'md'.
1337  */
1338 struct gendisk *dm_disk(struct mapped_device *md)
1339 {
1340         return md->disk;
1341 }
1342
1343 int dm_suspended(struct mapped_device *md)
1344 {
1345         return test_bit(DMF_SUSPENDED, &md->flags);
1346 }
1347
1348 static struct block_device_operations dm_blk_dops = {
1349         .open = dm_blk_open,
1350         .release = dm_blk_close,
1351         .getgeo = dm_blk_getgeo,
1352         .owner = THIS_MODULE
1353 };
1354
1355 EXPORT_SYMBOL(dm_get_mapinfo);
1356
1357 /*
1358  * module hooks
1359  */
1360 module_init(dm_init);
1361 module_exit(dm_exit);
1362
1363 module_param(major, uint, 0);
1364 MODULE_PARM_DESC(major, "The major number of the device mapper");
1365 MODULE_DESCRIPTION(DM_NAME " driver");
1366 MODULE_AUTHOR("Joe Thornber <dm-devel@redhat.com>");
1367 MODULE_LICENSE("GPL");