ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.bz2
[linux-2.6.git] / drivers / block / loop.c
1 /*
2  *  linux/drivers/block/loop.c
3  *
4  *  Written by Theodore Ts'o, 3/29/93
5  *
6  * Copyright 1993 by Theodore Ts'o.  Redistribution of this file is
7  * permitted under the GNU General Public License.
8  *
9  * DES encryption plus some minor changes by Werner Almesberger, 30-MAY-1993
10  * more DES encryption plus IDEA encryption by Nicholas J. Leon, June 20, 1996
11  *
12  * Modularized and updated for 1.1.16 kernel - Mitch Dsouza 28th May 1994
13  * Adapted for 1.3.59 kernel - Andries Brouwer, 1 Feb 1996
14  *
15  * Fixed do_loop_request() re-entrancy - Vincent.Renardias@waw.com Mar 20, 1997
16  *
17  * Added devfs support - Richard Gooch <rgooch@atnf.csiro.au> 16-Jan-1998
18  *
19  * Handle sparse backing files correctly - Kenn Humborg, Jun 28, 1998
20  *
21  * Loadable modules and other fixes by AK, 1998
22  *
23  * Make real block number available to downstream transfer functions, enables
24  * CBC (and relatives) mode encryption requiring unique IVs per data block.
25  * Reed H. Petty, rhp@draper.net
26  *
27  * Maximum number of loop devices now dynamic via max_loop module parameter.
28  * Russell Kroll <rkroll@exploits.org> 19990701
29  *
30  * Maximum number of loop devices when compiled-in now selectable by passing
31  * max_loop=<1-255> to the kernel on boot.
32  * Erik I. Bolsø, <eriki@himolde.no>, Oct 31, 1999
33  *
34  * Completely rewrite request handling to be make_request_fn style and
35  * non blocking, pushing work to a helper thread. Lots of fixes from
36  * Al Viro too.
37  * Jens Axboe <axboe@suse.de>, Nov 2000
38  *
39  * Support up to 256 loop devices
40  * Heinz Mauelshagen <mge@sistina.com>, Feb 2002
41  *
42  * Still To Fix:
43  * - Advisory locking is ignored here.
44  * - Should use an own CAP_* category instead of CAP_SYS_ADMIN
45  *
46  */
47
48 #include <linux/config.h>
49 #include <linux/module.h>
50
51 #include <linux/sched.h>
52 #include <linux/fs.h>
53 #include <linux/file.h>
54 #include <linux/stat.h>
55 #include <linux/errno.h>
56 #include <linux/major.h>
57 #include <linux/wait.h>
58 #include <linux/blkdev.h>
59 #include <linux/blkpg.h>
60 #include <linux/init.h>
61 #include <linux/devfs_fs_kernel.h>
62 #include <linux/smp_lock.h>
63 #include <linux/swap.h>
64 #include <linux/slab.h>
65 #include <linux/loop.h>
66 #include <linux/suspend.h>
67 #include <linux/writeback.h>
68 #include <linux/buffer_head.h>          /* for invalidate_bdev() */
69 #include <linux/completion.h>
70
71 #include <asm/uaccess.h>
72
73 static int max_loop = 8;
74 static struct loop_device *loop_dev;
75 static struct gendisk **disks;
76
77 /*
78  * Transfer functions
79  */
80 static int transfer_none(struct loop_device *lo, int cmd,
81                          struct page *raw_page, unsigned raw_off,
82                          struct page *loop_page, unsigned loop_off,
83                          int size, sector_t real_block)
84 {
85         char *raw_buf = kmap_atomic(raw_page, KM_USER0) + raw_off;
86         char *loop_buf = kmap_atomic(loop_page, KM_USER1) + loop_off;
87
88         if (cmd == READ)
89                 memcpy(loop_buf, raw_buf, size);
90         else
91                 memcpy(raw_buf, loop_buf, size);
92
93         kunmap_atomic(raw_buf, KM_USER0);
94         kunmap_atomic(loop_buf, KM_USER1);
95         cond_resched();
96         return 0;
97 }
98
99 static int transfer_xor(struct loop_device *lo, int cmd,
100                         struct page *raw_page, unsigned raw_off,
101                         struct page *loop_page, unsigned loop_off,
102                         int size, sector_t real_block)
103 {
104         char *raw_buf = kmap_atomic(raw_page, KM_USER0) + raw_off;
105         char *loop_buf = kmap_atomic(loop_page, KM_USER1) + loop_off;
106         char *in, *out, *key;
107         int i, keysize;
108
109         if (cmd == READ) {
110                 in = raw_buf;
111                 out = loop_buf;
112         } else {
113                 in = loop_buf;
114                 out = raw_buf;
115         }
116
117         key = lo->lo_encrypt_key;
118         keysize = lo->lo_encrypt_key_size;
119         for (i = 0; i < size; i++)
120                 *out++ = *in++ ^ key[(i & 511) % keysize];
121
122         kunmap_atomic(raw_buf, KM_USER0);
123         kunmap_atomic(loop_buf, KM_USER1);
124         cond_resched();
125         return 0;
126 }
127
128 static int xor_init(struct loop_device *lo, const struct loop_info64 *info)
129 {
130         if (info->lo_encrypt_key_size <= 0)
131                 return -EINVAL;
132         return 0;
133 }
134
135 static struct loop_func_table none_funcs = {
136         .number = LO_CRYPT_NONE,
137         .transfer = transfer_none,
138 };      
139
140 static struct loop_func_table xor_funcs = {
141         .number = LO_CRYPT_XOR,
142         .transfer = transfer_xor,
143         .init = xor_init
144 };      
145
146 /* xfer_funcs[0] is special - its release function is never called */
147 static struct loop_func_table *xfer_funcs[MAX_LO_CRYPT] = {
148         &none_funcs,
149         &xor_funcs
150 };
151
152 static loff_t get_loop_size(struct loop_device *lo, struct file *file)
153 {
154         loff_t size, offset, loopsize;
155
156         /* Compute loopsize in bytes */
157         size = i_size_read(file->f_mapping->host);
158         offset = lo->lo_offset;
159         loopsize = size - offset;
160         if (lo->lo_sizelimit > 0 && lo->lo_sizelimit < loopsize)
161                 loopsize = lo->lo_sizelimit;
162
163         /*
164          * Unfortunately, if we want to do I/O on the device,
165          * the number of 512-byte sectors has to fit into a sector_t.
166          */
167         return loopsize >> 9;
168 }
169
170 static int
171 figure_loop_size(struct loop_device *lo)
172 {
173         loff_t size = get_loop_size(lo, lo->lo_backing_file);
174         sector_t x = (sector_t)size;
175
176         if ((loff_t)x != size)
177                 return -EFBIG;
178
179         set_capacity(disks[lo->lo_number], x);
180         return 0;                                       
181 }
182
183 static inline int
184 lo_do_transfer(struct loop_device *lo, int cmd,
185                struct page *rpage, unsigned roffs,
186                struct page *lpage, unsigned loffs,
187                int size, sector_t rblock)
188 {
189         if (!lo->transfer)
190                 return 0;
191
192         return lo->transfer(lo, cmd, rpage, roffs, lpage, loffs, size, rblock);
193 }
194
195 static int
196 do_lo_send(struct loop_device *lo, struct bio_vec *bvec, int bsize, loff_t pos)
197 {
198         struct file *file = lo->lo_backing_file; /* kudos to NFsckingS */
199         struct address_space *mapping = file->f_mapping;
200         struct address_space_operations *aops = mapping->a_ops;
201         struct page *page;
202         pgoff_t index;
203         unsigned size, offset, bv_offs;
204         int len;
205         int ret = 0;
206
207         down(&mapping->host->i_sem);
208         index = pos >> PAGE_CACHE_SHIFT;
209         offset = pos & ((pgoff_t)PAGE_CACHE_SIZE - 1);
210         bv_offs = bvec->bv_offset;
211         len = bvec->bv_len;
212         while (len > 0) {
213                 sector_t IV;
214                 int transfer_result;
215
216                 IV = ((sector_t)index << (PAGE_CACHE_SHIFT - 9))+(offset >> 9);
217
218                 size = PAGE_CACHE_SIZE - offset;
219                 if (size > len)
220                         size = len;
221
222                 page = grab_cache_page(mapping, index);
223                 if (!page)
224                         goto fail;
225                 if (aops->prepare_write(file, page, offset, offset+size))
226                         goto unlock;
227                 transfer_result = lo_do_transfer(lo, WRITE, page, offset,
228                                                  bvec->bv_page, bv_offs,
229                                                  size, IV);
230                 if (transfer_result) {
231                         char *kaddr;
232
233                         /*
234                          * The transfer failed, but we still write the data to
235                          * keep prepare/commit calls balanced.
236                          */
237                         printk(KERN_ERR "loop: transfer error block %llu\n",
238                                (unsigned long long)index);
239                         kaddr = kmap_atomic(page, KM_USER0);
240                         memset(kaddr + offset, 0, size);
241                         kunmap_atomic(kaddr, KM_USER0);
242                 }
243                 flush_dcache_page(page);
244                 if (aops->commit_write(file, page, offset, offset+size))
245                         goto unlock;
246                 if (transfer_result)
247                         goto unlock;
248                 bv_offs += size;
249                 len -= size;
250                 offset = 0;
251                 index++;
252                 pos += size;
253                 unlock_page(page);
254                 page_cache_release(page);
255         }
256         up(&mapping->host->i_sem);
257 out:
258         return ret;
259
260 unlock:
261         unlock_page(page);
262         page_cache_release(page);
263 fail:
264         up(&mapping->host->i_sem);
265         ret = -1;
266         goto out;
267 }
268
269 static int
270 lo_send(struct loop_device *lo, struct bio *bio, int bsize, loff_t pos)
271 {
272         struct bio_vec *bvec;
273         int i, ret = 0;
274
275         bio_for_each_segment(bvec, bio, i) {
276                 ret = do_lo_send(lo, bvec, bsize, pos);
277                 if (ret < 0)
278                         break;
279                 pos += bvec->bv_len;
280         }
281         return ret;
282 }
283
284 struct lo_read_data {
285         struct loop_device *lo;
286         struct page *page;
287         unsigned offset;
288         int bsize;
289 };
290
291 static int
292 lo_read_actor(read_descriptor_t *desc, struct page *page,
293               unsigned long offset, unsigned long size)
294 {
295         unsigned long count = desc->count;
296         struct lo_read_data *p = (struct lo_read_data*)desc->buf;
297         struct loop_device *lo = p->lo;
298         sector_t IV;
299
300         IV = ((sector_t) page->index << (PAGE_CACHE_SHIFT - 9))+(offset >> 9);
301
302         if (size > count)
303                 size = count;
304
305         if (lo_do_transfer(lo, READ, page, offset, p->page, p->offset, size, IV)) {
306                 size = 0;
307                 printk(KERN_ERR "loop: transfer error block %ld\n",
308                        page->index);
309                 desc->error = -EINVAL;
310         }
311         
312         desc->count = count - size;
313         desc->written += size;
314         p->offset += size;
315         return size;
316 }
317
318 static int
319 do_lo_receive(struct loop_device *lo,
320               struct bio_vec *bvec, int bsize, loff_t pos)
321 {
322         struct lo_read_data cookie;
323         struct file *file;
324         int retval;
325
326         cookie.lo = lo;
327         cookie.page = bvec->bv_page;
328         cookie.offset = bvec->bv_offset;
329         cookie.bsize = bsize;
330         file = lo->lo_backing_file;
331         retval = file->f_op->sendfile(file, &pos, bvec->bv_len,
332                         lo_read_actor, &cookie);
333         return (retval < 0)? retval: 0;
334 }
335
336 static int
337 lo_receive(struct loop_device *lo, struct bio *bio, int bsize, loff_t pos)
338 {
339         struct bio_vec *bvec;
340         int i, ret = 0;
341
342         bio_for_each_segment(bvec, bio, i) {
343                 ret = do_lo_receive(lo, bvec, bsize, pos);
344                 if (ret < 0)
345                         break;
346                 pos += bvec->bv_len;
347         }
348         return ret;
349 }
350
351 static int do_bio_filebacked(struct loop_device *lo, struct bio *bio)
352 {
353         loff_t pos;
354         int ret;
355
356         pos = ((loff_t) bio->bi_sector << 9) + lo->lo_offset;
357         if (bio_rw(bio) == WRITE)
358                 ret = lo_send(lo, bio, lo->lo_blocksize, pos);
359         else
360                 ret = lo_receive(lo, bio, lo->lo_blocksize, pos);
361         return ret;
362 }
363
364 /*
365  * Add bio to back of pending list
366  */
367 static void loop_add_bio(struct loop_device *lo, struct bio *bio)
368 {
369         unsigned long flags;
370
371         spin_lock_irqsave(&lo->lo_lock, flags);
372         if (lo->lo_biotail) {
373                 lo->lo_biotail->bi_next = bio;
374                 lo->lo_biotail = bio;
375         } else
376                 lo->lo_bio = lo->lo_biotail = bio;
377         spin_unlock_irqrestore(&lo->lo_lock, flags);
378
379         up(&lo->lo_bh_mutex);
380 }
381
382 /*
383  * Grab first pending buffer
384  */
385 static struct bio *loop_get_bio(struct loop_device *lo)
386 {
387         struct bio *bio;
388
389         spin_lock_irq(&lo->lo_lock);
390         if ((bio = lo->lo_bio)) {
391                 if (bio == lo->lo_biotail)
392                         lo->lo_biotail = NULL;
393                 lo->lo_bio = bio->bi_next;
394                 bio->bi_next = NULL;
395         }
396         spin_unlock_irq(&lo->lo_lock);
397
398         return bio;
399 }
400
401 static int loop_make_request(request_queue_t *q, struct bio *old_bio)
402 {
403         struct loop_device *lo = q->queuedata;
404         int rw = bio_rw(old_bio);
405
406         if (!lo)
407                 goto out;
408
409         spin_lock_irq(&lo->lo_lock);
410         if (lo->lo_state != Lo_bound)
411                 goto inactive;
412         atomic_inc(&lo->lo_pending);
413         spin_unlock_irq(&lo->lo_lock);
414
415         if (rw == WRITE) {
416                 if (lo->lo_flags & LO_FLAGS_READ_ONLY)
417                         goto err;
418         } else if (rw == READA) {
419                 rw = READ;
420         } else if (rw != READ) {
421                 printk(KERN_ERR "loop: unknown command (%x)\n", rw);
422                 goto err;
423         }
424         loop_add_bio(lo, old_bio);
425         return 0;
426 err:
427         if (atomic_dec_and_test(&lo->lo_pending))
428                 up(&lo->lo_bh_mutex);
429 out:
430         bio_io_error(old_bio, old_bio->bi_size);
431         return 0;
432 inactive:
433         spin_unlock_irq(&lo->lo_lock);
434         goto out;
435 }
436
437 /*
438  * kick off io on the underlying address space
439  */
440 static void loop_unplug(request_queue_t *q)
441 {
442         struct loop_device *lo = q->queuedata;
443
444         clear_bit(QUEUE_FLAG_PLUGGED, &q->queue_flags);
445         blk_run_address_space(lo->lo_backing_file->f_mapping);
446 }
447
448 struct switch_request {
449         struct file *file;
450         struct completion wait;
451 };
452
453 static void do_loop_switch(struct loop_device *, struct switch_request *);
454
455 static inline void loop_handle_bio(struct loop_device *lo, struct bio *bio)
456 {
457         int ret;
458
459         if (unlikely(!bio->bi_bdev)) {
460                 do_loop_switch(lo, bio->bi_private);
461                 bio_put(bio);
462         } else {
463                 ret = do_bio_filebacked(lo, bio);
464                 bio_endio(bio, bio->bi_size, ret);
465         }
466 }
467
468 /*
469  * worker thread that handles reads/writes to file backed loop devices,
470  * to avoid blocking in our make_request_fn. it also does loop decrypting
471  * on reads for block backed loop, as that is too heavy to do from
472  * b_end_io context where irqs may be disabled.
473  */
474 static int loop_thread(void *data)
475 {
476         struct loop_device *lo = data;
477         struct bio *bio;
478
479         daemonize("loop%d", lo->lo_number);
480
481         /*
482          * loop can be used in an encrypted device,
483          * hence, it mustn't be stopped at all
484          * because it could be indirectly used during suspension
485          */
486         current->flags |= PF_NOFREEZE;
487
488         set_user_nice(current, -20);
489
490         lo->lo_state = Lo_bound;
491         atomic_inc(&lo->lo_pending);
492
493         /*
494          * up sem, we are running
495          */
496         up(&lo->lo_sem);
497
498         for (;;) {
499                 down_interruptible(&lo->lo_bh_mutex);
500                 /*
501                  * could be upped because of tear-down, not because of
502                  * pending work
503                  */
504                 if (!atomic_read(&lo->lo_pending))
505                         break;
506
507                 bio = loop_get_bio(lo);
508                 if (!bio) {
509                         printk("loop: missing bio\n");
510                         continue;
511                 }
512                 loop_handle_bio(lo, bio);
513
514                 /*
515                  * upped both for pending work and tear-down, lo_pending
516                  * will hit zero then
517                  */
518                 if (atomic_dec_and_test(&lo->lo_pending))
519                         break;
520         }
521
522         up(&lo->lo_sem);
523         return 0;
524 }
525
526 /*
527  * loop_switch performs the hard work of switching a backing store.
528  * First it needs to flush existing IO, it does this by sending a magic
529  * BIO down the pipe. The completion of this BIO does the actual switch.
530  */
531 static int loop_switch(struct loop_device *lo, struct file *file)
532 {
533         struct switch_request w;
534         struct bio *bio = bio_alloc(GFP_KERNEL, 1);
535         if (!bio)
536                 return -ENOMEM;
537         init_completion(&w.wait);
538         w.file = file;
539         bio->bi_private = &w;
540         bio->bi_bdev = NULL;
541         loop_make_request(lo->lo_queue, bio);
542         wait_for_completion(&w.wait);
543         return 0;
544 }
545
546 /*
547  * Do the actual switch; called from the BIO completion routine
548  */
549 static void do_loop_switch(struct loop_device *lo, struct switch_request *p)
550 {
551         struct file *file = p->file;
552         struct file *old_file = lo->lo_backing_file;
553         struct address_space *mapping = file->f_mapping;
554
555         mapping_set_gfp_mask(old_file->f_mapping, lo->old_gfp_mask);
556         lo->lo_backing_file = file;
557         lo->lo_blocksize = mapping->host->i_blksize;
558         lo->old_gfp_mask = mapping_gfp_mask(mapping);
559         mapping_set_gfp_mask(mapping, lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS));
560         complete(&p->wait);
561 }
562
563
564 /*
565  * loop_change_fd switched the backing store of a loopback device to
566  * a new file. This is useful for operating system installers to free up
567  * the original file and in High Availability environments to switch to
568  * an alternative location for the content in case of server meltdown.
569  * This can only work if the loop device is used read-only, and if the
570  * new backing store is the same size and type as the old backing store.
571  */
572 static int loop_change_fd(struct loop_device *lo, struct file *lo_file,
573                        struct block_device *bdev, unsigned int arg)
574 {
575         struct file     *file, *old_file;
576         struct inode    *inode;
577         int             error;
578
579         error = -ENXIO;
580         if (lo->lo_state != Lo_bound)
581                 goto out;
582
583         /* the loop device has to be read-only */
584         error = -EINVAL;
585         if (lo->lo_flags != LO_FLAGS_READ_ONLY)
586                 goto out;
587
588         error = -EBADF;
589         file = fget(arg);
590         if (!file)
591                 goto out;
592
593         inode = file->f_mapping->host;
594         old_file = lo->lo_backing_file;
595
596         error = -EINVAL;
597
598         if (!S_ISREG(inode->i_mode) && !S_ISBLK(inode->i_mode))
599                 goto out_putf;
600
601         /* new backing store needs to support loop (eg sendfile) */
602         if (!inode->i_fop->sendfile)
603                 goto out_putf;
604
605         /* size of the new backing store needs to be the same */
606         if (get_loop_size(lo, file) != get_loop_size(lo, old_file))
607                 goto out_putf;
608
609         /* and ... switch */
610         error = loop_switch(lo, file);
611         if (error)
612                 goto out_putf;
613
614         fput(old_file);
615         return 0;
616
617  out_putf:
618         fput(file);
619  out:
620         return error;
621 }
622
623 static int loop_set_fd(struct loop_device *lo, struct file *lo_file,
624                        struct block_device *bdev, unsigned int arg)
625 {
626         struct file     *file;
627         struct inode    *inode;
628         struct address_space *mapping;
629         unsigned lo_blocksize;
630         int             lo_flags = 0;
631         int             error;
632         loff_t          size;
633
634         /* This is safe, since we have a reference from open(). */
635         __module_get(THIS_MODULE);
636
637         error = -EBUSY;
638         if (lo->lo_state != Lo_unbound)
639                 goto out;
640
641         error = -EBADF;
642         file = fget(arg);
643         if (!file)
644                 goto out;
645
646         mapping = file->f_mapping;
647         inode = mapping->host;
648
649         if (!(file->f_mode & FMODE_WRITE))
650                 lo_flags |= LO_FLAGS_READ_ONLY;
651
652         error = -EINVAL;
653         if (S_ISREG(inode->i_mode) || S_ISBLK(inode->i_mode)) {
654                 struct address_space_operations *aops = mapping->a_ops;
655                 /*
656                  * If we can't read - sorry. If we only can't write - well,
657                  * it's going to be read-only.
658                  */
659                 if (!file->f_op->sendfile)
660                         goto out_putf;
661
662                 if (!aops->prepare_write || !aops->commit_write)
663                         lo_flags |= LO_FLAGS_READ_ONLY;
664
665                 lo_blocksize = inode->i_blksize;
666                 error = 0;
667         } else {
668                 goto out_putf;
669         }
670
671         size = get_loop_size(lo, file);
672
673         if ((loff_t)(sector_t)size != size) {
674                 error = -EFBIG;
675                 goto out_putf;
676         }
677
678         if (!(lo_file->f_mode & FMODE_WRITE))
679                 lo_flags |= LO_FLAGS_READ_ONLY;
680
681         set_device_ro(bdev, (lo_flags & LO_FLAGS_READ_ONLY) != 0);
682
683         lo->lo_blocksize = lo_blocksize;
684         lo->lo_device = bdev;
685         lo->lo_flags = lo_flags;
686         lo->lo_backing_file = file;
687         lo->transfer = NULL;
688         lo->ioctl = NULL;
689         lo->lo_sizelimit = 0;
690         lo->old_gfp_mask = mapping_gfp_mask(mapping);
691         mapping_set_gfp_mask(mapping, lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS));
692
693         lo->lo_bio = lo->lo_biotail = NULL;
694
695         /*
696          * set queue make_request_fn, and add limits based on lower level
697          * device
698          */
699         blk_queue_make_request(lo->lo_queue, loop_make_request);
700         lo->lo_queue->queuedata = lo;
701         lo->lo_queue->unplug_fn = loop_unplug;
702
703         set_capacity(disks[lo->lo_number], size);
704         bd_set_size(bdev, size << 9);
705
706         set_blocksize(bdev, lo_blocksize);
707
708         kernel_thread(loop_thread, lo, CLONE_KERNEL);
709         down(&lo->lo_sem);
710         return 0;
711
712  out_putf:
713         fput(file);
714  out:
715         /* This is safe: open() is still holding a reference. */
716         module_put(THIS_MODULE);
717         return error;
718 }
719
720 static int
721 loop_release_xfer(struct loop_device *lo)
722 {
723         int err = 0;
724         struct loop_func_table *xfer = lo->lo_encryption;
725
726         if (xfer) {
727                 if (xfer->release)
728                         err = xfer->release(lo);
729                 lo->transfer = NULL;
730                 lo->lo_encryption = NULL;
731                 module_put(xfer->owner);
732         }
733         return err;
734 }
735
736 static int
737 loop_init_xfer(struct loop_device *lo, struct loop_func_table *xfer,
738                const struct loop_info64 *i)
739 {
740         int err = 0;
741
742         if (xfer) {
743                 struct module *owner = xfer->owner;
744
745                 if (!try_module_get(owner))
746                         return -EINVAL;
747                 if (xfer->init)
748                         err = xfer->init(lo, i);
749                 if (err)
750                         module_put(owner);
751                 else
752                         lo->lo_encryption = xfer;
753         }
754         return err;
755 }
756
757 static int loop_clr_fd(struct loop_device *lo, struct block_device *bdev)
758 {
759         struct file *filp = lo->lo_backing_file;
760         int gfp = lo->old_gfp_mask;
761
762         if (lo->lo_state != Lo_bound)
763                 return -ENXIO;
764
765         if (lo->lo_refcnt > 1)  /* we needed one fd for the ioctl */
766                 return -EBUSY;
767
768         if (filp == NULL)
769                 return -EINVAL;
770
771         spin_lock_irq(&lo->lo_lock);
772         lo->lo_state = Lo_rundown;
773         if (atomic_dec_and_test(&lo->lo_pending))
774                 up(&lo->lo_bh_mutex);
775         spin_unlock_irq(&lo->lo_lock);
776
777         down(&lo->lo_sem);
778
779         lo->lo_backing_file = NULL;
780
781         loop_release_xfer(lo);
782         lo->transfer = NULL;
783         lo->ioctl = NULL;
784         lo->lo_device = NULL;
785         lo->lo_encryption = NULL;
786         lo->lo_offset = 0;
787         lo->lo_sizelimit = 0;
788         lo->lo_encrypt_key_size = 0;
789         lo->lo_flags = 0;
790         memset(lo->lo_encrypt_key, 0, LO_KEY_SIZE);
791         memset(lo->lo_crypt_name, 0, LO_NAME_SIZE);
792         memset(lo->lo_file_name, 0, LO_NAME_SIZE);
793         invalidate_bdev(bdev, 0);
794         set_capacity(disks[lo->lo_number], 0);
795         bd_set_size(bdev, 0);
796         mapping_set_gfp_mask(filp->f_mapping, gfp);
797         lo->lo_state = Lo_unbound;
798         fput(filp);
799         /* This is safe: open() is still holding a reference. */
800         module_put(THIS_MODULE);
801         return 0;
802 }
803
804 static int
805 loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
806 {
807         int err;
808         struct loop_func_table *xfer;
809
810         if (lo->lo_encrypt_key_size && lo->lo_key_owner != current->uid &&
811             !capable(CAP_SYS_ADMIN))
812                 return -EPERM;
813         if (lo->lo_state != Lo_bound)
814                 return -ENXIO;
815         if ((unsigned int) info->lo_encrypt_key_size > LO_KEY_SIZE)
816                 return -EINVAL;
817
818         err = loop_release_xfer(lo);
819         if (err)
820                 return err;
821
822         if (info->lo_encrypt_type) {
823                 unsigned int type = info->lo_encrypt_type;
824
825                 if (type >= MAX_LO_CRYPT)
826                         return -EINVAL;
827                 xfer = xfer_funcs[type];
828                 if (xfer == NULL)
829                         return -EINVAL;
830         } else
831                 xfer = NULL;
832
833         err = loop_init_xfer(lo, xfer, info);
834         if (err)
835                 return err;
836
837         if (lo->lo_offset != info->lo_offset ||
838             lo->lo_sizelimit != info->lo_sizelimit) {
839                 lo->lo_offset = info->lo_offset;
840                 lo->lo_sizelimit = info->lo_sizelimit;
841                 if (figure_loop_size(lo))
842                         return -EFBIG;
843         }
844
845         memcpy(lo->lo_file_name, info->lo_file_name, LO_NAME_SIZE);
846         memcpy(lo->lo_crypt_name, info->lo_crypt_name, LO_NAME_SIZE);
847         lo->lo_file_name[LO_NAME_SIZE-1] = 0;
848         lo->lo_crypt_name[LO_NAME_SIZE-1] = 0;
849
850         if (!xfer)
851                 xfer = &none_funcs;
852         lo->transfer = xfer->transfer;
853         lo->ioctl = xfer->ioctl;
854
855         lo->lo_encrypt_key_size = info->lo_encrypt_key_size;
856         lo->lo_init[0] = info->lo_init[0];
857         lo->lo_init[1] = info->lo_init[1];
858         if (info->lo_encrypt_key_size) {
859                 memcpy(lo->lo_encrypt_key, info->lo_encrypt_key,
860                        info->lo_encrypt_key_size);
861                 lo->lo_key_owner = current->uid;
862         }       
863
864         return 0;
865 }
866
867 static int
868 loop_get_status(struct loop_device *lo, struct loop_info64 *info)
869 {
870         struct file *file = lo->lo_backing_file;
871         struct kstat stat;
872         int error;
873
874         if (lo->lo_state != Lo_bound)
875                 return -ENXIO;
876         error = vfs_getattr(file->f_vfsmnt, file->f_dentry, &stat);
877         if (error)
878                 return error;
879         memset(info, 0, sizeof(*info));
880         info->lo_number = lo->lo_number;
881         info->lo_device = huge_encode_dev(stat.dev);
882         info->lo_inode = stat.ino;
883         info->lo_rdevice = huge_encode_dev(lo->lo_device ? stat.rdev : stat.dev);
884         info->lo_offset = lo->lo_offset;
885         info->lo_sizelimit = lo->lo_sizelimit;
886         info->lo_flags = lo->lo_flags;
887         memcpy(info->lo_file_name, lo->lo_file_name, LO_NAME_SIZE);
888         memcpy(info->lo_crypt_name, lo->lo_crypt_name, LO_NAME_SIZE);
889         info->lo_encrypt_type =
890                 lo->lo_encryption ? lo->lo_encryption->number : 0;
891         if (lo->lo_encrypt_key_size && capable(CAP_SYS_ADMIN)) {
892                 info->lo_encrypt_key_size = lo->lo_encrypt_key_size;
893                 memcpy(info->lo_encrypt_key, lo->lo_encrypt_key,
894                        lo->lo_encrypt_key_size);
895         }
896         return 0;
897 }
898
899 static void
900 loop_info64_from_old(const struct loop_info *info, struct loop_info64 *info64)
901 {
902         memset(info64, 0, sizeof(*info64));
903         info64->lo_number = info->lo_number;
904         info64->lo_device = info->lo_device;
905         info64->lo_inode = info->lo_inode;
906         info64->lo_rdevice = info->lo_rdevice;
907         info64->lo_offset = info->lo_offset;
908         info64->lo_sizelimit = 0;
909         info64->lo_encrypt_type = info->lo_encrypt_type;
910         info64->lo_encrypt_key_size = info->lo_encrypt_key_size;
911         info64->lo_flags = info->lo_flags;
912         info64->lo_init[0] = info->lo_init[0];
913         info64->lo_init[1] = info->lo_init[1];
914         if (info->lo_encrypt_type == LO_CRYPT_CRYPTOAPI)
915                 memcpy(info64->lo_crypt_name, info->lo_name, LO_NAME_SIZE);
916         else
917                 memcpy(info64->lo_file_name, info->lo_name, LO_NAME_SIZE);
918         memcpy(info64->lo_encrypt_key, info->lo_encrypt_key, LO_KEY_SIZE);
919 }
920
921 static int
922 loop_info64_to_old(const struct loop_info64 *info64, struct loop_info *info)
923 {
924         memset(info, 0, sizeof(*info));
925         info->lo_number = info64->lo_number;
926         info->lo_device = info64->lo_device;
927         info->lo_inode = info64->lo_inode;
928         info->lo_rdevice = info64->lo_rdevice;
929         info->lo_offset = info64->lo_offset;
930         info->lo_encrypt_type = info64->lo_encrypt_type;
931         info->lo_encrypt_key_size = info64->lo_encrypt_key_size;
932         info->lo_flags = info64->lo_flags;
933         info->lo_init[0] = info64->lo_init[0];
934         info->lo_init[1] = info64->lo_init[1];
935         if (info->lo_encrypt_type == LO_CRYPT_CRYPTOAPI)
936                 memcpy(info->lo_name, info64->lo_crypt_name, LO_NAME_SIZE);
937         else
938                 memcpy(info->lo_name, info64->lo_file_name, LO_NAME_SIZE);
939         memcpy(info->lo_encrypt_key, info64->lo_encrypt_key, LO_KEY_SIZE);
940
941         /* error in case values were truncated */
942         if (info->lo_device != info64->lo_device ||
943             info->lo_rdevice != info64->lo_rdevice ||
944             info->lo_inode != info64->lo_inode ||
945             info->lo_offset != info64->lo_offset)
946                 return -EOVERFLOW;
947
948         return 0;
949 }
950
951 static int
952 loop_set_status_old(struct loop_device *lo, const struct loop_info *arg)
953 {
954         struct loop_info info;
955         struct loop_info64 info64;
956
957         if (copy_from_user(&info, arg, sizeof (struct loop_info)))
958                 return -EFAULT;
959         loop_info64_from_old(&info, &info64);
960         return loop_set_status(lo, &info64);
961 }
962
963 static int
964 loop_set_status64(struct loop_device *lo, const struct loop_info64 *arg)
965 {
966         struct loop_info64 info64;
967
968         if (copy_from_user(&info64, arg, sizeof (struct loop_info64)))
969                 return -EFAULT;
970         return loop_set_status(lo, &info64);
971 }
972
973 static int
974 loop_get_status_old(struct loop_device *lo, struct loop_info *arg) {
975         struct loop_info info;
976         struct loop_info64 info64;
977         int err = 0;
978
979         if (!arg)
980                 err = -EINVAL;
981         if (!err)
982                 err = loop_get_status(lo, &info64);
983         if (!err)
984                 err = loop_info64_to_old(&info64, &info);
985         if (!err && copy_to_user(arg, &info, sizeof(info)))
986                 err = -EFAULT;
987
988         return err;
989 }
990
991 static int
992 loop_get_status64(struct loop_device *lo, struct loop_info64 *arg) {
993         struct loop_info64 info64;
994         int err = 0;
995
996         if (!arg)
997                 err = -EINVAL;
998         if (!err)
999                 err = loop_get_status(lo, &info64);
1000         if (!err && copy_to_user(arg, &info64, sizeof(info64)))
1001                 err = -EFAULT;
1002
1003         return err;
1004 }
1005
1006 static int lo_ioctl(struct inode * inode, struct file * file,
1007         unsigned int cmd, unsigned long arg)
1008 {
1009         struct loop_device *lo = inode->i_bdev->bd_disk->private_data;
1010         int err;
1011
1012         down(&lo->lo_ctl_mutex);
1013         switch (cmd) {
1014         case LOOP_SET_FD:
1015                 err = loop_set_fd(lo, file, inode->i_bdev, arg);
1016                 break;
1017         case LOOP_CHANGE_FD:
1018                 err = loop_change_fd(lo, file, inode->i_bdev, arg);
1019                 break;
1020         case LOOP_CLR_FD:
1021                 err = loop_clr_fd(lo, inode->i_bdev);
1022                 break;
1023         case LOOP_SET_STATUS:
1024                 err = loop_set_status_old(lo, (struct loop_info *) arg);
1025                 break;
1026         case LOOP_GET_STATUS:
1027                 err = loop_get_status_old(lo, (struct loop_info *) arg);
1028                 break;
1029         case LOOP_SET_STATUS64:
1030                 err = loop_set_status64(lo, (struct loop_info64 *) arg);
1031                 break;
1032         case LOOP_GET_STATUS64:
1033                 err = loop_get_status64(lo, (struct loop_info64 *) arg);
1034                 break;
1035         default:
1036                 err = lo->ioctl ? lo->ioctl(lo, cmd, arg) : -EINVAL;
1037         }
1038         up(&lo->lo_ctl_mutex);
1039         return err;
1040 }
1041
1042 static int lo_open(struct inode *inode, struct file *file)
1043 {
1044         struct loop_device *lo = inode->i_bdev->bd_disk->private_data;
1045
1046         down(&lo->lo_ctl_mutex);
1047         lo->lo_refcnt++;
1048         up(&lo->lo_ctl_mutex);
1049
1050         return 0;
1051 }
1052
1053 static int lo_release(struct inode *inode, struct file *file)
1054 {
1055         struct loop_device *lo = inode->i_bdev->bd_disk->private_data;
1056
1057         down(&lo->lo_ctl_mutex);
1058         --lo->lo_refcnt;
1059         up(&lo->lo_ctl_mutex);
1060
1061         return 0;
1062 }
1063
1064 static struct block_device_operations lo_fops = {
1065         .owner =        THIS_MODULE,
1066         .open =         lo_open,
1067         .release =      lo_release,
1068         .ioctl =        lo_ioctl,
1069 };
1070
1071 /*
1072  * And now the modules code and kernel interface.
1073  */
1074 MODULE_PARM(max_loop, "i");
1075 MODULE_PARM_DESC(max_loop, "Maximum number of loop devices (1-256)");
1076 MODULE_LICENSE("GPL");
1077 MODULE_ALIAS_BLOCKDEV_MAJOR(LOOP_MAJOR);
1078
1079 int loop_register_transfer(struct loop_func_table *funcs)
1080 {
1081         unsigned int n = funcs->number;
1082
1083         if (n >= MAX_LO_CRYPT || xfer_funcs[n])
1084                 return -EINVAL;
1085         xfer_funcs[n] = funcs;
1086         return 0;
1087 }
1088
1089 int loop_unregister_transfer(int number)
1090 {
1091         unsigned int n = number;
1092         struct loop_device *lo;
1093         struct loop_func_table *xfer;
1094
1095         if (n == 0 || n >= MAX_LO_CRYPT || (xfer = xfer_funcs[n]) == NULL)
1096                 return -EINVAL;
1097
1098         xfer_funcs[n] = NULL;
1099
1100         for (lo = &loop_dev[0]; lo < &loop_dev[max_loop]; lo++) {
1101                 down(&lo->lo_ctl_mutex);
1102
1103                 if (lo->lo_encryption == xfer)
1104                         loop_release_xfer(lo);
1105
1106                 up(&lo->lo_ctl_mutex);
1107         }
1108
1109         return 0;
1110 }
1111
1112 EXPORT_SYMBOL(loop_register_transfer);
1113 EXPORT_SYMBOL(loop_unregister_transfer);
1114
1115 int __init loop_init(void)
1116 {
1117         int     i;
1118
1119         if (max_loop < 1 || max_loop > 256) {
1120                 printk(KERN_WARNING "loop: invalid max_loop (must be between"
1121                                     " 1 and 256), using default (8)\n");
1122                 max_loop = 8;
1123         }
1124
1125         if (register_blkdev(LOOP_MAJOR, "loop"))
1126                 return -EIO;
1127
1128         loop_dev = kmalloc(max_loop * sizeof(struct loop_device), GFP_KERNEL);
1129         if (!loop_dev)
1130                 goto out_mem1;
1131         memset(loop_dev, 0, max_loop * sizeof(struct loop_device));
1132
1133         disks = kmalloc(max_loop * sizeof(struct gendisk *), GFP_KERNEL);
1134         if (!disks)
1135                 goto out_mem2;
1136
1137         for (i = 0; i < max_loop; i++) {
1138                 disks[i] = alloc_disk(1);
1139                 if (!disks[i])
1140                         goto out_mem3;
1141         }
1142
1143         devfs_mk_dir("loop");
1144
1145         for (i = 0; i < max_loop; i++) {
1146                 struct loop_device *lo = &loop_dev[i];
1147                 struct gendisk *disk = disks[i];
1148
1149                 memset(lo, 0, sizeof(*lo));
1150                 lo->lo_queue = blk_alloc_queue(GFP_KERNEL);
1151                 if (!lo->lo_queue)
1152                         goto out_mem4;
1153                 init_MUTEX(&lo->lo_ctl_mutex);
1154                 init_MUTEX_LOCKED(&lo->lo_sem);
1155                 init_MUTEX_LOCKED(&lo->lo_bh_mutex);
1156                 lo->lo_number = i;
1157                 spin_lock_init(&lo->lo_lock);
1158                 disk->major = LOOP_MAJOR;
1159                 disk->first_minor = i;
1160                 disk->fops = &lo_fops;
1161                 sprintf(disk->disk_name, "loop%d", i);
1162                 sprintf(disk->devfs_name, "loop/%d", i);
1163                 disk->private_data = lo;
1164                 disk->queue = lo->lo_queue;
1165         }
1166
1167         /* We cannot fail after we call this, so another loop!*/
1168         for (i = 0; i < max_loop; i++)
1169                 add_disk(disks[i]);
1170         printk(KERN_INFO "loop: loaded (max %d devices)\n", max_loop);
1171         return 0;
1172
1173 out_mem4:
1174         while (i--)
1175                 blk_put_queue(loop_dev[i].lo_queue);
1176         devfs_remove("loop");
1177         i = max_loop;
1178 out_mem3:
1179         while (i--)
1180                 put_disk(disks[i]);
1181         kfree(disks);
1182 out_mem2:
1183         kfree(loop_dev);
1184 out_mem1:
1185         unregister_blkdev(LOOP_MAJOR, "loop");
1186         printk(KERN_ERR "loop: ran out of memory\n");
1187         return -ENOMEM;
1188 }
1189
1190 void loop_exit(void)
1191 {
1192         int i;
1193
1194         for (i = 0; i < max_loop; i++) {
1195                 del_gendisk(disks[i]);
1196                 blk_put_queue(loop_dev[i].lo_queue);
1197                 put_disk(disks[i]);
1198         }
1199         devfs_remove("loop");
1200         if (unregister_blkdev(LOOP_MAJOR, "loop"))
1201                 printk(KERN_WARNING "loop: cannot unregister blkdev\n");
1202
1203         kfree(disks);
1204         kfree(loop_dev);
1205 }
1206
1207 module_init(loop_init);
1208 module_exit(loop_exit);
1209
1210 #ifndef MODULE
1211 static int __init max_loop_setup(char *str)
1212 {
1213         max_loop = simple_strtol(str, NULL, 0);
1214         return 1;
1215 }
1216
1217 __setup("max_loop=", max_loop_setup);
1218 #endif