Merge branch 'for-3.2/core' of git://git.kernel.dk/linux-block
[linux-flexiantxendom0-3.2.10.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  * Support for falling back on the write file operation when the address space
43  * operations write_begin is not available on the backing filesystem.
44  * Anton Altaparmakov, 16 Feb 2005
45  *
46  * Still To Fix:
47  * - Advisory locking is ignored here.
48  * - Should use an own CAP_* category instead of CAP_SYS_ADMIN
49  *
50  */
51
52 #include <linux/module.h>
53 #include <linux/moduleparam.h>
54 #include <linux/sched.h>
55 #include <linux/fs.h>
56 #include <linux/file.h>
57 #include <linux/stat.h>
58 #include <linux/errno.h>
59 #include <linux/major.h>
60 #include <linux/wait.h>
61 #include <linux/blkdev.h>
62 #include <linux/blkpg.h>
63 #include <linux/init.h>
64 #include <linux/swap.h>
65 #include <linux/slab.h>
66 #include <linux/loop.h>
67 #include <linux/compat.h>
68 #include <linux/suspend.h>
69 #include <linux/freezer.h>
70 #include <linux/mutex.h>
71 #include <linux/writeback.h>
72 #include <linux/buffer_head.h>          /* for invalidate_bdev() */
73 #include <linux/completion.h>
74 #include <linux/highmem.h>
75 #include <linux/kthread.h>
76 #include <linux/splice.h>
77 #include <linux/sysfs.h>
78 #include <linux/miscdevice.h>
79 #include <asm/uaccess.h>
80
81 static DEFINE_IDR(loop_index_idr);
82 static DEFINE_MUTEX(loop_index_mutex);
83
84 static int max_part;
85 static int part_shift;
86
87 /*
88  * Transfer functions
89  */
90 static int transfer_none(struct loop_device *lo, int cmd,
91                          struct page *raw_page, unsigned raw_off,
92                          struct page *loop_page, unsigned loop_off,
93                          int size, sector_t real_block)
94 {
95         char *raw_buf = kmap_atomic(raw_page, KM_USER0) + raw_off;
96         char *loop_buf = kmap_atomic(loop_page, KM_USER1) + loop_off;
97
98         if (cmd == READ)
99                 memcpy(loop_buf, raw_buf, size);
100         else
101                 memcpy(raw_buf, loop_buf, size);
102
103         kunmap_atomic(loop_buf, KM_USER1);
104         kunmap_atomic(raw_buf, KM_USER0);
105         cond_resched();
106         return 0;
107 }
108
109 static int transfer_xor(struct loop_device *lo, int cmd,
110                         struct page *raw_page, unsigned raw_off,
111                         struct page *loop_page, unsigned loop_off,
112                         int size, sector_t real_block)
113 {
114         char *raw_buf = kmap_atomic(raw_page, KM_USER0) + raw_off;
115         char *loop_buf = kmap_atomic(loop_page, KM_USER1) + loop_off;
116         char *in, *out, *key;
117         int i, keysize;
118
119         if (cmd == READ) {
120                 in = raw_buf;
121                 out = loop_buf;
122         } else {
123                 in = loop_buf;
124                 out = raw_buf;
125         }
126
127         key = lo->lo_encrypt_key;
128         keysize = lo->lo_encrypt_key_size;
129         for (i = 0; i < size; i++)
130                 *out++ = *in++ ^ key[(i & 511) % keysize];
131
132         kunmap_atomic(loop_buf, KM_USER1);
133         kunmap_atomic(raw_buf, KM_USER0);
134         cond_resched();
135         return 0;
136 }
137
138 static int xor_init(struct loop_device *lo, const struct loop_info64 *info)
139 {
140         if (unlikely(info->lo_encrypt_key_size <= 0))
141                 return -EINVAL;
142         return 0;
143 }
144
145 static struct loop_func_table none_funcs = {
146         .number = LO_CRYPT_NONE,
147         .transfer = transfer_none,
148 };      
149
150 static struct loop_func_table xor_funcs = {
151         .number = LO_CRYPT_XOR,
152         .transfer = transfer_xor,
153         .init = xor_init
154 };      
155
156 /* xfer_funcs[0] is special - its release function is never called */
157 static struct loop_func_table *xfer_funcs[MAX_LO_CRYPT] = {
158         &none_funcs,
159         &xor_funcs
160 };
161
162 static loff_t get_loop_size(struct loop_device *lo, struct file *file)
163 {
164         loff_t size, offset, loopsize;
165
166         /* Compute loopsize in bytes */
167         size = i_size_read(file->f_mapping->host);
168         offset = lo->lo_offset;
169         loopsize = size - offset;
170         if (lo->lo_sizelimit > 0 && lo->lo_sizelimit < loopsize)
171                 loopsize = lo->lo_sizelimit;
172
173         /*
174          * Unfortunately, if we want to do I/O on the device,
175          * the number of 512-byte sectors has to fit into a sector_t.
176          */
177         return loopsize >> 9;
178 }
179
180 static int
181 figure_loop_size(struct loop_device *lo)
182 {
183         loff_t size = get_loop_size(lo, lo->lo_backing_file);
184         sector_t x = (sector_t)size;
185
186         if (unlikely((loff_t)x != size))
187                 return -EFBIG;
188
189         set_capacity(lo->lo_disk, x);
190         return 0;                                       
191 }
192
193 static inline int
194 lo_do_transfer(struct loop_device *lo, int cmd,
195                struct page *rpage, unsigned roffs,
196                struct page *lpage, unsigned loffs,
197                int size, sector_t rblock)
198 {
199         if (unlikely(!lo->transfer))
200                 return 0;
201
202         return lo->transfer(lo, cmd, rpage, roffs, lpage, loffs, size, rblock);
203 }
204
205 /**
206  * __do_lo_send_write - helper for writing data to a loop device
207  *
208  * This helper just factors out common code between do_lo_send_direct_write()
209  * and do_lo_send_write().
210  */
211 static int __do_lo_send_write(struct file *file,
212                 u8 *buf, const int len, loff_t pos)
213 {
214         ssize_t bw;
215         mm_segment_t old_fs = get_fs();
216
217         set_fs(get_ds());
218         bw = file->f_op->write(file, buf, len, &pos);
219         set_fs(old_fs);
220         if (likely(bw == len))
221                 return 0;
222         printk(KERN_ERR "loop: Write error at byte offset %llu, length %i.\n",
223                         (unsigned long long)pos, len);
224         if (bw >= 0)
225                 bw = -EIO;
226         return bw;
227 }
228
229 /**
230  * do_lo_send_direct_write - helper for writing data to a loop device
231  *
232  * This is the fast, non-transforming version that does not need double
233  * buffering.
234  */
235 static int do_lo_send_direct_write(struct loop_device *lo,
236                 struct bio_vec *bvec, loff_t pos, struct page *page)
237 {
238         ssize_t bw = __do_lo_send_write(lo->lo_backing_file,
239                         kmap(bvec->bv_page) + bvec->bv_offset,
240                         bvec->bv_len, pos);
241         kunmap(bvec->bv_page);
242         cond_resched();
243         return bw;
244 }
245
246 /**
247  * do_lo_send_write - helper for writing data to a loop device
248  *
249  * This is the slow, transforming version that needs to double buffer the
250  * data as it cannot do the transformations in place without having direct
251  * access to the destination pages of the backing file.
252  */
253 static int do_lo_send_write(struct loop_device *lo, struct bio_vec *bvec,
254                 loff_t pos, struct page *page)
255 {
256         int ret = lo_do_transfer(lo, WRITE, page, 0, bvec->bv_page,
257                         bvec->bv_offset, bvec->bv_len, pos >> 9);
258         if (likely(!ret))
259                 return __do_lo_send_write(lo->lo_backing_file,
260                                 page_address(page), bvec->bv_len,
261                                 pos);
262         printk(KERN_ERR "loop: Transfer error at byte offset %llu, "
263                         "length %i.\n", (unsigned long long)pos, bvec->bv_len);
264         if (ret > 0)
265                 ret = -EIO;
266         return ret;
267 }
268
269 static int lo_send(struct loop_device *lo, struct bio *bio, loff_t pos)
270 {
271         int (*do_lo_send)(struct loop_device *, struct bio_vec *, loff_t,
272                         struct page *page);
273         struct bio_vec *bvec;
274         struct page *page = NULL;
275         int i, ret = 0;
276
277         if (lo->transfer != transfer_none) {
278                 page = alloc_page(GFP_NOIO | __GFP_HIGHMEM);
279                 if (unlikely(!page))
280                         goto fail;
281                 kmap(page);
282                 do_lo_send = do_lo_send_write;
283         } else {
284                 do_lo_send = do_lo_send_direct_write;
285         }
286
287         bio_for_each_segment(bvec, bio, i) {
288                 ret = do_lo_send(lo, bvec, pos, page);
289                 if (ret < 0)
290                         break;
291                 pos += bvec->bv_len;
292         }
293         if (page) {
294                 kunmap(page);
295                 __free_page(page);
296         }
297 out:
298         return ret;
299 fail:
300         printk(KERN_ERR "loop: Failed to allocate temporary page for write.\n");
301         ret = -ENOMEM;
302         goto out;
303 }
304
305 struct lo_read_data {
306         struct loop_device *lo;
307         struct page *page;
308         unsigned offset;
309         int bsize;
310 };
311
312 static int
313 lo_splice_actor(struct pipe_inode_info *pipe, struct pipe_buffer *buf,
314                 struct splice_desc *sd)
315 {
316         struct lo_read_data *p = sd->u.data;
317         struct loop_device *lo = p->lo;
318         struct page *page = buf->page;
319         sector_t IV;
320         int size;
321
322         IV = ((sector_t) page->index << (PAGE_CACHE_SHIFT - 9)) +
323                                                         (buf->offset >> 9);
324         size = sd->len;
325         if (size > p->bsize)
326                 size = p->bsize;
327
328         if (lo_do_transfer(lo, READ, page, buf->offset, p->page, p->offset, size, IV)) {
329                 printk(KERN_ERR "loop: transfer error block %ld\n",
330                        page->index);
331                 size = -EINVAL;
332         }
333
334         flush_dcache_page(p->page);
335
336         if (size > 0)
337                 p->offset += size;
338
339         return size;
340 }
341
342 static int
343 lo_direct_splice_actor(struct pipe_inode_info *pipe, struct splice_desc *sd)
344 {
345         return __splice_from_pipe(pipe, sd, lo_splice_actor);
346 }
347
348 static int
349 do_lo_receive(struct loop_device *lo,
350               struct bio_vec *bvec, int bsize, loff_t pos)
351 {
352         struct lo_read_data cookie;
353         struct splice_desc sd;
354         struct file *file;
355         long retval;
356
357         cookie.lo = lo;
358         cookie.page = bvec->bv_page;
359         cookie.offset = bvec->bv_offset;
360         cookie.bsize = bsize;
361
362         sd.len = 0;
363         sd.total_len = bvec->bv_len;
364         sd.flags = 0;
365         sd.pos = pos;
366         sd.u.data = &cookie;
367
368         file = lo->lo_backing_file;
369         retval = splice_direct_to_actor(file, &sd, lo_direct_splice_actor);
370
371         if (retval < 0)
372                 return retval;
373
374         return 0;
375 }
376
377 static int
378 lo_receive(struct loop_device *lo, struct bio *bio, int bsize, loff_t pos)
379 {
380         struct bio_vec *bvec;
381         int i, ret = 0;
382
383         bio_for_each_segment(bvec, bio, i) {
384                 ret = do_lo_receive(lo, bvec, bsize, pos);
385                 if (ret < 0)
386                         break;
387                 pos += bvec->bv_len;
388         }
389         return ret;
390 }
391
392 static int do_bio_filebacked(struct loop_device *lo, struct bio *bio)
393 {
394         loff_t pos;
395         int ret;
396
397         pos = ((loff_t) bio->bi_sector << 9) + lo->lo_offset;
398
399         if (bio_rw(bio) == WRITE) {
400                 struct file *file = lo->lo_backing_file;
401
402                 if (bio->bi_rw & REQ_FLUSH) {
403                         ret = vfs_fsync(file, 0);
404                         if (unlikely(ret && ret != -EINVAL)) {
405                                 ret = -EIO;
406                                 goto out;
407                         }
408                 }
409
410                 ret = lo_send(lo, bio, pos);
411
412                 if ((bio->bi_rw & REQ_FUA) && !ret) {
413                         ret = vfs_fsync(file, 0);
414                         if (unlikely(ret && ret != -EINVAL))
415                                 ret = -EIO;
416                 }
417         } else
418                 ret = lo_receive(lo, bio, lo->lo_blocksize, pos);
419
420 out:
421         return ret;
422 }
423
424 /*
425  * Add bio to back of pending list
426  */
427 static void loop_add_bio(struct loop_device *lo, struct bio *bio)
428 {
429         bio_list_add(&lo->lo_bio_list, bio);
430 }
431
432 /*
433  * Grab first pending buffer
434  */
435 static struct bio *loop_get_bio(struct loop_device *lo)
436 {
437         return bio_list_pop(&lo->lo_bio_list);
438 }
439
440 static void loop_make_request(struct request_queue *q, struct bio *old_bio)
441 {
442         struct loop_device *lo = q->queuedata;
443         int rw = bio_rw(old_bio);
444
445         if (rw == READA)
446                 rw = READ;
447
448         BUG_ON(!lo || (rw != READ && rw != WRITE));
449
450         spin_lock_irq(&lo->lo_lock);
451         if (lo->lo_state != Lo_bound)
452                 goto out;
453         if (unlikely(rw == WRITE && (lo->lo_flags & LO_FLAGS_READ_ONLY)))
454                 goto out;
455         loop_add_bio(lo, old_bio);
456         wake_up(&lo->lo_event);
457         spin_unlock_irq(&lo->lo_lock);
458         return;
459
460 out:
461         spin_unlock_irq(&lo->lo_lock);
462         bio_io_error(old_bio);
463 }
464
465 struct switch_request {
466         struct file *file;
467         struct completion wait;
468 };
469
470 static void do_loop_switch(struct loop_device *, struct switch_request *);
471
472 static inline void loop_handle_bio(struct loop_device *lo, struct bio *bio)
473 {
474         if (unlikely(!bio->bi_bdev)) {
475                 do_loop_switch(lo, bio->bi_private);
476                 bio_put(bio);
477         } else {
478                 int ret = do_bio_filebacked(lo, bio);
479                 bio_endio(bio, ret);
480         }
481 }
482
483 /*
484  * worker thread that handles reads/writes to file backed loop devices,
485  * to avoid blocking in our make_request_fn. it also does loop decrypting
486  * on reads for block backed loop, as that is too heavy to do from
487  * b_end_io context where irqs may be disabled.
488  *
489  * Loop explanation:  loop_clr_fd() sets lo_state to Lo_rundown before
490  * calling kthread_stop().  Therefore once kthread_should_stop() is
491  * true, make_request will not place any more requests.  Therefore
492  * once kthread_should_stop() is true and lo_bio is NULL, we are
493  * done with the loop.
494  */
495 static int loop_thread(void *data)
496 {
497         struct loop_device *lo = data;
498         struct bio *bio;
499
500         set_user_nice(current, -20);
501
502         while (!kthread_should_stop() || !bio_list_empty(&lo->lo_bio_list)) {
503
504                 wait_event_interruptible(lo->lo_event,
505                                 !bio_list_empty(&lo->lo_bio_list) ||
506                                 kthread_should_stop());
507
508                 if (bio_list_empty(&lo->lo_bio_list))
509                         continue;
510                 spin_lock_irq(&lo->lo_lock);
511                 bio = loop_get_bio(lo);
512                 spin_unlock_irq(&lo->lo_lock);
513
514                 BUG_ON(!bio);
515                 loop_handle_bio(lo, bio);
516         }
517
518         return 0;
519 }
520
521 /*
522  * loop_switch performs the hard work of switching a backing store.
523  * First it needs to flush existing IO, it does this by sending a magic
524  * BIO down the pipe. The completion of this BIO does the actual switch.
525  */
526 static int loop_switch(struct loop_device *lo, struct file *file)
527 {
528         struct switch_request w;
529         struct bio *bio = bio_alloc(GFP_KERNEL, 0);
530         if (!bio)
531                 return -ENOMEM;
532         init_completion(&w.wait);
533         w.file = file;
534         bio->bi_private = &w;
535         bio->bi_bdev = NULL;
536         loop_make_request(lo->lo_queue, bio);
537         wait_for_completion(&w.wait);
538         return 0;
539 }
540
541 /*
542  * Helper to flush the IOs in loop, but keeping loop thread running
543  */
544 static int loop_flush(struct loop_device *lo)
545 {
546         /* loop not yet configured, no running thread, nothing to flush */
547         if (!lo->lo_thread)
548                 return 0;
549
550         return loop_switch(lo, NULL);
551 }
552
553 /*
554  * Do the actual switch; called from the BIO completion routine
555  */
556 static void do_loop_switch(struct loop_device *lo, struct switch_request *p)
557 {
558         struct file *file = p->file;
559         struct file *old_file = lo->lo_backing_file;
560         struct address_space *mapping;
561
562         /* if no new file, only flush of queued bios requested */
563         if (!file)
564                 goto out;
565
566         mapping = file->f_mapping;
567         mapping_set_gfp_mask(old_file->f_mapping, lo->old_gfp_mask);
568         lo->lo_backing_file = file;
569         lo->lo_blocksize = S_ISBLK(mapping->host->i_mode) ?
570                 mapping->host->i_bdev->bd_block_size : PAGE_SIZE;
571         lo->old_gfp_mask = mapping_gfp_mask(mapping);
572         mapping_set_gfp_mask(mapping, lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS));
573 out:
574         complete(&p->wait);
575 }
576
577
578 /*
579  * loop_change_fd switched the backing store of a loopback device to
580  * a new file. This is useful for operating system installers to free up
581  * the original file and in High Availability environments to switch to
582  * an alternative location for the content in case of server meltdown.
583  * This can only work if the loop device is used read-only, and if the
584  * new backing store is the same size and type as the old backing store.
585  */
586 static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
587                           unsigned int arg)
588 {
589         struct file     *file, *old_file;
590         struct inode    *inode;
591         int             error;
592
593         error = -ENXIO;
594         if (lo->lo_state != Lo_bound)
595                 goto out;
596
597         /* the loop device has to be read-only */
598         error = -EINVAL;
599         if (!(lo->lo_flags & LO_FLAGS_READ_ONLY))
600                 goto out;
601
602         error = -EBADF;
603         file = fget(arg);
604         if (!file)
605                 goto out;
606
607         inode = file->f_mapping->host;
608         old_file = lo->lo_backing_file;
609
610         error = -EINVAL;
611
612         if (!S_ISREG(inode->i_mode) && !S_ISBLK(inode->i_mode))
613                 goto out_putf;
614
615         /* size of the new backing store needs to be the same */
616         if (get_loop_size(lo, file) != get_loop_size(lo, old_file))
617                 goto out_putf;
618
619         /* and ... switch */
620         error = loop_switch(lo, file);
621         if (error)
622                 goto out_putf;
623
624         fput(old_file);
625         if (max_part > 0)
626                 ioctl_by_bdev(bdev, BLKRRPART, 0);
627         return 0;
628
629  out_putf:
630         fput(file);
631  out:
632         return error;
633 }
634
635 static inline int is_loop_device(struct file *file)
636 {
637         struct inode *i = file->f_mapping->host;
638
639         return i && S_ISBLK(i->i_mode) && MAJOR(i->i_rdev) == LOOP_MAJOR;
640 }
641
642 /* loop sysfs attributes */
643
644 static ssize_t loop_attr_show(struct device *dev, char *page,
645                               ssize_t (*callback)(struct loop_device *, char *))
646 {
647         struct gendisk *disk = dev_to_disk(dev);
648         struct loop_device *lo = disk->private_data;
649
650         return callback(lo, page);
651 }
652
653 #define LOOP_ATTR_RO(_name)                                             \
654 static ssize_t loop_attr_##_name##_show(struct loop_device *, char *);  \
655 static ssize_t loop_attr_do_show_##_name(struct device *d,              \
656                                 struct device_attribute *attr, char *b) \
657 {                                                                       \
658         return loop_attr_show(d, b, loop_attr_##_name##_show);          \
659 }                                                                       \
660 static struct device_attribute loop_attr_##_name =                      \
661         __ATTR(_name, S_IRUGO, loop_attr_do_show_##_name, NULL);
662
663 static ssize_t loop_attr_backing_file_show(struct loop_device *lo, char *buf)
664 {
665         ssize_t ret;
666         char *p = NULL;
667
668         spin_lock_irq(&lo->lo_lock);
669         if (lo->lo_backing_file)
670                 p = d_path(&lo->lo_backing_file->f_path, buf, PAGE_SIZE - 1);
671         spin_unlock_irq(&lo->lo_lock);
672
673         if (IS_ERR_OR_NULL(p))
674                 ret = PTR_ERR(p);
675         else {
676                 ret = strlen(p);
677                 memmove(buf, p, ret);
678                 buf[ret++] = '\n';
679                 buf[ret] = 0;
680         }
681
682         return ret;
683 }
684
685 static ssize_t loop_attr_offset_show(struct loop_device *lo, char *buf)
686 {
687         return sprintf(buf, "%llu\n", (unsigned long long)lo->lo_offset);
688 }
689
690 static ssize_t loop_attr_sizelimit_show(struct loop_device *lo, char *buf)
691 {
692         return sprintf(buf, "%llu\n", (unsigned long long)lo->lo_sizelimit);
693 }
694
695 static ssize_t loop_attr_autoclear_show(struct loop_device *lo, char *buf)
696 {
697         int autoclear = (lo->lo_flags & LO_FLAGS_AUTOCLEAR);
698
699         return sprintf(buf, "%s\n", autoclear ? "1" : "0");
700 }
701
702 LOOP_ATTR_RO(backing_file);
703 LOOP_ATTR_RO(offset);
704 LOOP_ATTR_RO(sizelimit);
705 LOOP_ATTR_RO(autoclear);
706
707 static struct attribute *loop_attrs[] = {
708         &loop_attr_backing_file.attr,
709         &loop_attr_offset.attr,
710         &loop_attr_sizelimit.attr,
711         &loop_attr_autoclear.attr,
712         NULL,
713 };
714
715 static struct attribute_group loop_attribute_group = {
716         .name = "loop",
717         .attrs= loop_attrs,
718 };
719
720 static int loop_sysfs_init(struct loop_device *lo)
721 {
722         return sysfs_create_group(&disk_to_dev(lo->lo_disk)->kobj,
723                                   &loop_attribute_group);
724 }
725
726 static void loop_sysfs_exit(struct loop_device *lo)
727 {
728         sysfs_remove_group(&disk_to_dev(lo->lo_disk)->kobj,
729                            &loop_attribute_group);
730 }
731
732 static int loop_set_fd(struct loop_device *lo, fmode_t mode,
733                        struct block_device *bdev, unsigned int arg)
734 {
735         struct file     *file, *f;
736         struct inode    *inode;
737         struct address_space *mapping;
738         unsigned lo_blocksize;
739         int             lo_flags = 0;
740         int             error;
741         loff_t          size;
742
743         /* This is safe, since we have a reference from open(). */
744         __module_get(THIS_MODULE);
745
746         error = -EBADF;
747         file = fget(arg);
748         if (!file)
749                 goto out;
750
751         error = -EBUSY;
752         if (lo->lo_state != Lo_unbound)
753                 goto out_putf;
754
755         /* Avoid recursion */
756         f = file;
757         while (is_loop_device(f)) {
758                 struct loop_device *l;
759
760                 if (f->f_mapping->host->i_bdev == bdev)
761                         goto out_putf;
762
763                 l = f->f_mapping->host->i_bdev->bd_disk->private_data;
764                 if (l->lo_state == Lo_unbound) {
765                         error = -EINVAL;
766                         goto out_putf;
767                 }
768                 f = l->lo_backing_file;
769         }
770
771         mapping = file->f_mapping;
772         inode = mapping->host;
773
774         error = -EINVAL;
775         if (!S_ISREG(inode->i_mode) && !S_ISBLK(inode->i_mode))
776                 goto out_putf;
777
778         if (!(file->f_mode & FMODE_WRITE) || !(mode & FMODE_WRITE) ||
779             !file->f_op->write)
780                 lo_flags |= LO_FLAGS_READ_ONLY;
781
782         lo_blocksize = S_ISBLK(inode->i_mode) ?
783                 inode->i_bdev->bd_block_size : PAGE_SIZE;
784
785         error = -EFBIG;
786         size = get_loop_size(lo, file);
787         if ((loff_t)(sector_t)size != size)
788                 goto out_putf;
789
790         error = 0;
791
792         set_device_ro(bdev, (lo_flags & LO_FLAGS_READ_ONLY) != 0);
793
794         lo->lo_blocksize = lo_blocksize;
795         lo->lo_device = bdev;
796         lo->lo_flags = lo_flags;
797         lo->lo_backing_file = file;
798         lo->transfer = transfer_none;
799         lo->ioctl = NULL;
800         lo->lo_sizelimit = 0;
801         lo->old_gfp_mask = mapping_gfp_mask(mapping);
802         mapping_set_gfp_mask(mapping, lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS));
803
804         bio_list_init(&lo->lo_bio_list);
805
806         /*
807          * set queue make_request_fn, and add limits based on lower level
808          * device
809          */
810         blk_queue_make_request(lo->lo_queue, loop_make_request);
811         lo->lo_queue->queuedata = lo;
812
813         if (!(lo_flags & LO_FLAGS_READ_ONLY) && file->f_op->fsync)
814                 blk_queue_flush(lo->lo_queue, REQ_FLUSH);
815
816         set_capacity(lo->lo_disk, size);
817         bd_set_size(bdev, size << 9);
818         loop_sysfs_init(lo);
819         /* let user-space know about the new size */
820         kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
821
822         set_blocksize(bdev, lo_blocksize);
823
824         lo->lo_thread = kthread_create(loop_thread, lo, "loop%d",
825                                                 lo->lo_number);
826         if (IS_ERR(lo->lo_thread)) {
827                 error = PTR_ERR(lo->lo_thread);
828                 goto out_clr;
829         }
830         lo->lo_state = Lo_bound;
831         wake_up_process(lo->lo_thread);
832         if (max_part > 0)
833                 ioctl_by_bdev(bdev, BLKRRPART, 0);
834         return 0;
835
836 out_clr:
837         loop_sysfs_exit(lo);
838         lo->lo_thread = NULL;
839         lo->lo_device = NULL;
840         lo->lo_backing_file = NULL;
841         lo->lo_flags = 0;
842         set_capacity(lo->lo_disk, 0);
843         invalidate_bdev(bdev);
844         bd_set_size(bdev, 0);
845         kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
846         mapping_set_gfp_mask(mapping, lo->old_gfp_mask);
847         lo->lo_state = Lo_unbound;
848  out_putf:
849         fput(file);
850  out:
851         /* This is safe: open() is still holding a reference. */
852         module_put(THIS_MODULE);
853         return error;
854 }
855
856 static int
857 loop_release_xfer(struct loop_device *lo)
858 {
859         int err = 0;
860         struct loop_func_table *xfer = lo->lo_encryption;
861
862         if (xfer) {
863                 if (xfer->release)
864                         err = xfer->release(lo);
865                 lo->transfer = NULL;
866                 lo->lo_encryption = NULL;
867                 module_put(xfer->owner);
868         }
869         return err;
870 }
871
872 static int
873 loop_init_xfer(struct loop_device *lo, struct loop_func_table *xfer,
874                const struct loop_info64 *i)
875 {
876         int err = 0;
877
878         if (xfer) {
879                 struct module *owner = xfer->owner;
880
881                 if (!try_module_get(owner))
882                         return -EINVAL;
883                 if (xfer->init)
884                         err = xfer->init(lo, i);
885                 if (err)
886                         module_put(owner);
887                 else
888                         lo->lo_encryption = xfer;
889         }
890         return err;
891 }
892
893 static int loop_clr_fd(struct loop_device *lo, struct block_device *bdev)
894 {
895         struct file *filp = lo->lo_backing_file;
896         gfp_t gfp = lo->old_gfp_mask;
897
898         if (lo->lo_state != Lo_bound)
899                 return -ENXIO;
900
901         if (lo->lo_refcnt > 1)  /* we needed one fd for the ioctl */
902                 return -EBUSY;
903
904         if (filp == NULL)
905                 return -EINVAL;
906
907         spin_lock_irq(&lo->lo_lock);
908         lo->lo_state = Lo_rundown;
909         spin_unlock_irq(&lo->lo_lock);
910
911         kthread_stop(lo->lo_thread);
912
913         spin_lock_irq(&lo->lo_lock);
914         lo->lo_backing_file = NULL;
915         spin_unlock_irq(&lo->lo_lock);
916
917         loop_release_xfer(lo);
918         lo->transfer = NULL;
919         lo->ioctl = NULL;
920         lo->lo_device = NULL;
921         lo->lo_encryption = NULL;
922         lo->lo_offset = 0;
923         lo->lo_sizelimit = 0;
924         lo->lo_encrypt_key_size = 0;
925         lo->lo_flags = 0;
926         lo->lo_thread = NULL;
927         memset(lo->lo_encrypt_key, 0, LO_KEY_SIZE);
928         memset(lo->lo_crypt_name, 0, LO_NAME_SIZE);
929         memset(lo->lo_file_name, 0, LO_NAME_SIZE);
930         if (bdev)
931                 invalidate_bdev(bdev);
932         set_capacity(lo->lo_disk, 0);
933         loop_sysfs_exit(lo);
934         if (bdev) {
935                 bd_set_size(bdev, 0);
936                 /* let user-space know about this change */
937                 kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
938         }
939         mapping_set_gfp_mask(filp->f_mapping, gfp);
940         lo->lo_state = Lo_unbound;
941         /* This is safe: open() is still holding a reference. */
942         module_put(THIS_MODULE);
943         if (max_part > 0 && bdev)
944                 ioctl_by_bdev(bdev, BLKRRPART, 0);
945         mutex_unlock(&lo->lo_ctl_mutex);
946         /*
947          * Need not hold lo_ctl_mutex to fput backing file.
948          * Calling fput holding lo_ctl_mutex triggers a circular
949          * lock dependency possibility warning as fput can take
950          * bd_mutex which is usually taken before lo_ctl_mutex.
951          */
952         fput(filp);
953         return 0;
954 }
955
956 static int
957 loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
958 {
959         int err;
960         struct loop_func_table *xfer;
961         uid_t uid = current_uid();
962
963         if (lo->lo_encrypt_key_size &&
964             lo->lo_key_owner != uid &&
965             !capable(CAP_SYS_ADMIN))
966                 return -EPERM;
967         if (lo->lo_state != Lo_bound)
968                 return -ENXIO;
969         if ((unsigned int) info->lo_encrypt_key_size > LO_KEY_SIZE)
970                 return -EINVAL;
971
972         err = loop_release_xfer(lo);
973         if (err)
974                 return err;
975
976         if (info->lo_encrypt_type) {
977                 unsigned int type = info->lo_encrypt_type;
978
979                 if (type >= MAX_LO_CRYPT)
980                         return -EINVAL;
981                 xfer = xfer_funcs[type];
982                 if (xfer == NULL)
983                         return -EINVAL;
984         } else
985                 xfer = NULL;
986
987         err = loop_init_xfer(lo, xfer, info);
988         if (err)
989                 return err;
990
991         if (lo->lo_offset != info->lo_offset ||
992             lo->lo_sizelimit != info->lo_sizelimit) {
993                 lo->lo_offset = info->lo_offset;
994                 lo->lo_sizelimit = info->lo_sizelimit;
995                 if (figure_loop_size(lo))
996                         return -EFBIG;
997         }
998
999         memcpy(lo->lo_file_name, info->lo_file_name, LO_NAME_SIZE);
1000         memcpy(lo->lo_crypt_name, info->lo_crypt_name, LO_NAME_SIZE);
1001         lo->lo_file_name[LO_NAME_SIZE-1] = 0;
1002         lo->lo_crypt_name[LO_NAME_SIZE-1] = 0;
1003
1004         if (!xfer)
1005                 xfer = &none_funcs;
1006         lo->transfer = xfer->transfer;
1007         lo->ioctl = xfer->ioctl;
1008
1009         if ((lo->lo_flags & LO_FLAGS_AUTOCLEAR) !=
1010              (info->lo_flags & LO_FLAGS_AUTOCLEAR))
1011                 lo->lo_flags ^= LO_FLAGS_AUTOCLEAR;
1012
1013         lo->lo_encrypt_key_size = info->lo_encrypt_key_size;
1014         lo->lo_init[0] = info->lo_init[0];
1015         lo->lo_init[1] = info->lo_init[1];
1016         if (info->lo_encrypt_key_size) {
1017                 memcpy(lo->lo_encrypt_key, info->lo_encrypt_key,
1018                        info->lo_encrypt_key_size);
1019                 lo->lo_key_owner = uid;
1020         }       
1021
1022         return 0;
1023 }
1024
1025 static int
1026 loop_get_status(struct loop_device *lo, struct loop_info64 *info)
1027 {
1028         struct file *file = lo->lo_backing_file;
1029         struct kstat stat;
1030         int error;
1031
1032         if (lo->lo_state != Lo_bound)
1033                 return -ENXIO;
1034         error = vfs_getattr(file->f_path.mnt, file->f_path.dentry, &stat);
1035         if (error)
1036                 return error;
1037         memset(info, 0, sizeof(*info));
1038         info->lo_number = lo->lo_number;
1039         info->lo_device = huge_encode_dev(stat.dev);
1040         info->lo_inode = stat.ino;
1041         info->lo_rdevice = huge_encode_dev(lo->lo_device ? stat.rdev : stat.dev);
1042         info->lo_offset = lo->lo_offset;
1043         info->lo_sizelimit = lo->lo_sizelimit;
1044         info->lo_flags = lo->lo_flags;
1045         memcpy(info->lo_file_name, lo->lo_file_name, LO_NAME_SIZE);
1046         memcpy(info->lo_crypt_name, lo->lo_crypt_name, LO_NAME_SIZE);
1047         info->lo_encrypt_type =
1048                 lo->lo_encryption ? lo->lo_encryption->number : 0;
1049         if (lo->lo_encrypt_key_size && capable(CAP_SYS_ADMIN)) {
1050                 info->lo_encrypt_key_size = lo->lo_encrypt_key_size;
1051                 memcpy(info->lo_encrypt_key, lo->lo_encrypt_key,
1052                        lo->lo_encrypt_key_size);
1053         }
1054         return 0;
1055 }
1056
1057 static void
1058 loop_info64_from_old(const struct loop_info *info, struct loop_info64 *info64)
1059 {
1060         memset(info64, 0, sizeof(*info64));
1061         info64->lo_number = info->lo_number;
1062         info64->lo_device = info->lo_device;
1063         info64->lo_inode = info->lo_inode;
1064         info64->lo_rdevice = info->lo_rdevice;
1065         info64->lo_offset = info->lo_offset;
1066         info64->lo_sizelimit = 0;
1067         info64->lo_encrypt_type = info->lo_encrypt_type;
1068         info64->lo_encrypt_key_size = info->lo_encrypt_key_size;
1069         info64->lo_flags = info->lo_flags;
1070         info64->lo_init[0] = info->lo_init[0];
1071         info64->lo_init[1] = info->lo_init[1];
1072         if (info->lo_encrypt_type == LO_CRYPT_CRYPTOAPI)
1073                 memcpy(info64->lo_crypt_name, info->lo_name, LO_NAME_SIZE);
1074         else
1075                 memcpy(info64->lo_file_name, info->lo_name, LO_NAME_SIZE);
1076         memcpy(info64->lo_encrypt_key, info->lo_encrypt_key, LO_KEY_SIZE);
1077 }
1078
1079 static int
1080 loop_info64_to_old(const struct loop_info64 *info64, struct loop_info *info)
1081 {
1082         memset(info, 0, sizeof(*info));
1083         info->lo_number = info64->lo_number;
1084         info->lo_device = info64->lo_device;
1085         info->lo_inode = info64->lo_inode;
1086         info->lo_rdevice = info64->lo_rdevice;
1087         info->lo_offset = info64->lo_offset;
1088         info->lo_encrypt_type = info64->lo_encrypt_type;
1089         info->lo_encrypt_key_size = info64->lo_encrypt_key_size;
1090         info->lo_flags = info64->lo_flags;
1091         info->lo_init[0] = info64->lo_init[0];
1092         info->lo_init[1] = info64->lo_init[1];
1093         if (info->lo_encrypt_type == LO_CRYPT_CRYPTOAPI)
1094                 memcpy(info->lo_name, info64->lo_crypt_name, LO_NAME_SIZE);
1095         else
1096                 memcpy(info->lo_name, info64->lo_file_name, LO_NAME_SIZE);
1097         memcpy(info->lo_encrypt_key, info64->lo_encrypt_key, LO_KEY_SIZE);
1098
1099         /* error in case values were truncated */
1100         if (info->lo_device != info64->lo_device ||
1101             info->lo_rdevice != info64->lo_rdevice ||
1102             info->lo_inode != info64->lo_inode ||
1103             info->lo_offset != info64->lo_offset)
1104                 return -EOVERFLOW;
1105
1106         return 0;
1107 }
1108
1109 static int
1110 loop_set_status_old(struct loop_device *lo, const struct loop_info __user *arg)
1111 {
1112         struct loop_info info;
1113         struct loop_info64 info64;
1114
1115         if (copy_from_user(&info, arg, sizeof (struct loop_info)))
1116                 return -EFAULT;
1117         loop_info64_from_old(&info, &info64);
1118         return loop_set_status(lo, &info64);
1119 }
1120
1121 static int
1122 loop_set_status64(struct loop_device *lo, const struct loop_info64 __user *arg)
1123 {
1124         struct loop_info64 info64;
1125
1126         if (copy_from_user(&info64, arg, sizeof (struct loop_info64)))
1127                 return -EFAULT;
1128         return loop_set_status(lo, &info64);
1129 }
1130
1131 static int
1132 loop_get_status_old(struct loop_device *lo, struct loop_info __user *arg) {
1133         struct loop_info info;
1134         struct loop_info64 info64;
1135         int err = 0;
1136
1137         if (!arg)
1138                 err = -EINVAL;
1139         if (!err)
1140                 err = loop_get_status(lo, &info64);
1141         if (!err)
1142                 err = loop_info64_to_old(&info64, &info);
1143         if (!err && copy_to_user(arg, &info, sizeof(info)))
1144                 err = -EFAULT;
1145
1146         return err;
1147 }
1148
1149 static int
1150 loop_get_status64(struct loop_device *lo, struct loop_info64 __user *arg) {
1151         struct loop_info64 info64;
1152         int err = 0;
1153
1154         if (!arg)
1155                 err = -EINVAL;
1156         if (!err)
1157                 err = loop_get_status(lo, &info64);
1158         if (!err && copy_to_user(arg, &info64, sizeof(info64)))
1159                 err = -EFAULT;
1160
1161         return err;
1162 }
1163
1164 static int loop_set_capacity(struct loop_device *lo, struct block_device *bdev)
1165 {
1166         int err;
1167         sector_t sec;
1168         loff_t sz;
1169
1170         err = -ENXIO;
1171         if (unlikely(lo->lo_state != Lo_bound))
1172                 goto out;
1173         err = figure_loop_size(lo);
1174         if (unlikely(err))
1175                 goto out;
1176         sec = get_capacity(lo->lo_disk);
1177         /* the width of sector_t may be narrow for bit-shift */
1178         sz = sec;
1179         sz <<= 9;
1180         mutex_lock(&bdev->bd_mutex);
1181         bd_set_size(bdev, sz);
1182         /* let user-space know about the new size */
1183         kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
1184         mutex_unlock(&bdev->bd_mutex);
1185
1186  out:
1187         return err;
1188 }
1189
1190 static int lo_ioctl(struct block_device *bdev, fmode_t mode,
1191         unsigned int cmd, unsigned long arg)
1192 {
1193         struct loop_device *lo = bdev->bd_disk->private_data;
1194         int err;
1195
1196         mutex_lock_nested(&lo->lo_ctl_mutex, 1);
1197         switch (cmd) {
1198         case LOOP_SET_FD:
1199                 err = loop_set_fd(lo, mode, bdev, arg);
1200                 break;
1201         case LOOP_CHANGE_FD:
1202                 err = loop_change_fd(lo, bdev, arg);
1203                 break;
1204         case LOOP_CLR_FD:
1205                 /* loop_clr_fd would have unlocked lo_ctl_mutex on success */
1206                 err = loop_clr_fd(lo, bdev);
1207                 if (!err)
1208                         goto out_unlocked;
1209                 break;
1210         case LOOP_SET_STATUS:
1211                 err = loop_set_status_old(lo, (struct loop_info __user *) arg);
1212                 break;
1213         case LOOP_GET_STATUS:
1214                 err = loop_get_status_old(lo, (struct loop_info __user *) arg);
1215                 break;
1216         case LOOP_SET_STATUS64:
1217                 err = loop_set_status64(lo, (struct loop_info64 __user *) arg);
1218                 break;
1219         case LOOP_GET_STATUS64:
1220                 err = loop_get_status64(lo, (struct loop_info64 __user *) arg);
1221                 break;
1222         case LOOP_SET_CAPACITY:
1223                 err = -EPERM;
1224                 if ((mode & FMODE_WRITE) || capable(CAP_SYS_ADMIN))
1225                         err = loop_set_capacity(lo, bdev);
1226                 break;
1227         default:
1228                 err = lo->ioctl ? lo->ioctl(lo, cmd, arg) : -EINVAL;
1229         }
1230         mutex_unlock(&lo->lo_ctl_mutex);
1231
1232 out_unlocked:
1233         return err;
1234 }
1235
1236 #ifdef CONFIG_COMPAT
1237 struct compat_loop_info {
1238         compat_int_t    lo_number;      /* ioctl r/o */
1239         compat_dev_t    lo_device;      /* ioctl r/o */
1240         compat_ulong_t  lo_inode;       /* ioctl r/o */
1241         compat_dev_t    lo_rdevice;     /* ioctl r/o */
1242         compat_int_t    lo_offset;
1243         compat_int_t    lo_encrypt_type;
1244         compat_int_t    lo_encrypt_key_size;    /* ioctl w/o */
1245         compat_int_t    lo_flags;       /* ioctl r/o */
1246         char            lo_name[LO_NAME_SIZE];
1247         unsigned char   lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
1248         compat_ulong_t  lo_init[2];
1249         char            reserved[4];
1250 };
1251
1252 /*
1253  * Transfer 32-bit compatibility structure in userspace to 64-bit loop info
1254  * - noinlined to reduce stack space usage in main part of driver
1255  */
1256 static noinline int
1257 loop_info64_from_compat(const struct compat_loop_info __user *arg,
1258                         struct loop_info64 *info64)
1259 {
1260         struct compat_loop_info info;
1261
1262         if (copy_from_user(&info, arg, sizeof(info)))
1263                 return -EFAULT;
1264
1265         memset(info64, 0, sizeof(*info64));
1266         info64->lo_number = info.lo_number;
1267         info64->lo_device = info.lo_device;
1268         info64->lo_inode = info.lo_inode;
1269         info64->lo_rdevice = info.lo_rdevice;
1270         info64->lo_offset = info.lo_offset;
1271         info64->lo_sizelimit = 0;
1272         info64->lo_encrypt_type = info.lo_encrypt_type;
1273         info64->lo_encrypt_key_size = info.lo_encrypt_key_size;
1274         info64->lo_flags = info.lo_flags;
1275         info64->lo_init[0] = info.lo_init[0];
1276         info64->lo_init[1] = info.lo_init[1];
1277         if (info.lo_encrypt_type == LO_CRYPT_CRYPTOAPI)
1278                 memcpy(info64->lo_crypt_name, info.lo_name, LO_NAME_SIZE);
1279         else
1280                 memcpy(info64->lo_file_name, info.lo_name, LO_NAME_SIZE);
1281         memcpy(info64->lo_encrypt_key, info.lo_encrypt_key, LO_KEY_SIZE);
1282         return 0;
1283 }
1284
1285 /*
1286  * Transfer 64-bit loop info to 32-bit compatibility structure in userspace
1287  * - noinlined to reduce stack space usage in main part of driver
1288  */
1289 static noinline int
1290 loop_info64_to_compat(const struct loop_info64 *info64,
1291                       struct compat_loop_info __user *arg)
1292 {
1293         struct compat_loop_info info;
1294
1295         memset(&info, 0, sizeof(info));
1296         info.lo_number = info64->lo_number;
1297         info.lo_device = info64->lo_device;
1298         info.lo_inode = info64->lo_inode;
1299         info.lo_rdevice = info64->lo_rdevice;
1300         info.lo_offset = info64->lo_offset;
1301         info.lo_encrypt_type = info64->lo_encrypt_type;
1302         info.lo_encrypt_key_size = info64->lo_encrypt_key_size;
1303         info.lo_flags = info64->lo_flags;
1304         info.lo_init[0] = info64->lo_init[0];
1305         info.lo_init[1] = info64->lo_init[1];
1306         if (info.lo_encrypt_type == LO_CRYPT_CRYPTOAPI)
1307                 memcpy(info.lo_name, info64->lo_crypt_name, LO_NAME_SIZE);
1308         else
1309                 memcpy(info.lo_name, info64->lo_file_name, LO_NAME_SIZE);
1310         memcpy(info.lo_encrypt_key, info64->lo_encrypt_key, LO_KEY_SIZE);
1311
1312         /* error in case values were truncated */
1313         if (info.lo_device != info64->lo_device ||
1314             info.lo_rdevice != info64->lo_rdevice ||
1315             info.lo_inode != info64->lo_inode ||
1316             info.lo_offset != info64->lo_offset ||
1317             info.lo_init[0] != info64->lo_init[0] ||
1318             info.lo_init[1] != info64->lo_init[1])
1319                 return -EOVERFLOW;
1320
1321         if (copy_to_user(arg, &info, sizeof(info)))
1322                 return -EFAULT;
1323         return 0;
1324 }
1325
1326 static int
1327 loop_set_status_compat(struct loop_device *lo,
1328                        const struct compat_loop_info __user *arg)
1329 {
1330         struct loop_info64 info64;
1331         int ret;
1332
1333         ret = loop_info64_from_compat(arg, &info64);
1334         if (ret < 0)
1335                 return ret;
1336         return loop_set_status(lo, &info64);
1337 }
1338
1339 static int
1340 loop_get_status_compat(struct loop_device *lo,
1341                        struct compat_loop_info __user *arg)
1342 {
1343         struct loop_info64 info64;
1344         int err = 0;
1345
1346         if (!arg)
1347                 err = -EINVAL;
1348         if (!err)
1349                 err = loop_get_status(lo, &info64);
1350         if (!err)
1351                 err = loop_info64_to_compat(&info64, arg);
1352         return err;
1353 }
1354
1355 static int lo_compat_ioctl(struct block_device *bdev, fmode_t mode,
1356                            unsigned int cmd, unsigned long arg)
1357 {
1358         struct loop_device *lo = bdev->bd_disk->private_data;
1359         int err;
1360
1361         switch(cmd) {
1362         case LOOP_SET_STATUS:
1363                 mutex_lock(&lo->lo_ctl_mutex);
1364                 err = loop_set_status_compat(
1365                         lo, (const struct compat_loop_info __user *) arg);
1366                 mutex_unlock(&lo->lo_ctl_mutex);
1367                 break;
1368         case LOOP_GET_STATUS:
1369                 mutex_lock(&lo->lo_ctl_mutex);
1370                 err = loop_get_status_compat(
1371                         lo, (struct compat_loop_info __user *) arg);
1372                 mutex_unlock(&lo->lo_ctl_mutex);
1373                 break;
1374         case LOOP_SET_CAPACITY:
1375         case LOOP_CLR_FD:
1376         case LOOP_GET_STATUS64:
1377         case LOOP_SET_STATUS64:
1378                 arg = (unsigned long) compat_ptr(arg);
1379         case LOOP_SET_FD:
1380         case LOOP_CHANGE_FD:
1381                 err = lo_ioctl(bdev, mode, cmd, arg);
1382                 break;
1383         default:
1384                 err = -ENOIOCTLCMD;
1385                 break;
1386         }
1387         return err;
1388 }
1389 #endif
1390
1391 static int lo_open(struct block_device *bdev, fmode_t mode)
1392 {
1393         struct loop_device *lo;
1394         int err = 0;
1395
1396         mutex_lock(&loop_index_mutex);
1397         lo = bdev->bd_disk->private_data;
1398         if (!lo) {
1399                 err = -ENXIO;
1400                 goto out;
1401         }
1402
1403         mutex_lock(&lo->lo_ctl_mutex);
1404         lo->lo_refcnt++;
1405         mutex_unlock(&lo->lo_ctl_mutex);
1406 out:
1407         mutex_unlock(&loop_index_mutex);
1408         return err;
1409 }
1410
1411 static int lo_release(struct gendisk *disk, fmode_t mode)
1412 {
1413         struct loop_device *lo = disk->private_data;
1414         int err;
1415
1416         mutex_lock(&lo->lo_ctl_mutex);
1417
1418         if (--lo->lo_refcnt)
1419                 goto out;
1420
1421         if (lo->lo_flags & LO_FLAGS_AUTOCLEAR) {
1422                 /*
1423                  * In autoclear mode, stop the loop thread
1424                  * and remove configuration after last close.
1425                  */
1426                 err = loop_clr_fd(lo, NULL);
1427                 if (!err)
1428                         goto out_unlocked;
1429         } else {
1430                 /*
1431                  * Otherwise keep thread (if running) and config,
1432                  * but flush possible ongoing bios in thread.
1433                  */
1434                 loop_flush(lo);
1435         }
1436
1437 out:
1438         mutex_unlock(&lo->lo_ctl_mutex);
1439 out_unlocked:
1440         return 0;
1441 }
1442
1443 static const struct block_device_operations lo_fops = {
1444         .owner =        THIS_MODULE,
1445         .open =         lo_open,
1446         .release =      lo_release,
1447         .ioctl =        lo_ioctl,
1448 #ifdef CONFIG_COMPAT
1449         .compat_ioctl = lo_compat_ioctl,
1450 #endif
1451 };
1452
1453 /*
1454  * And now the modules code and kernel interface.
1455  */
1456 static int max_loop;
1457 module_param(max_loop, int, S_IRUGO);
1458 MODULE_PARM_DESC(max_loop, "Maximum number of loop devices");
1459 module_param(max_part, int, S_IRUGO);
1460 MODULE_PARM_DESC(max_part, "Maximum number of partitions per loop device");
1461 MODULE_LICENSE("GPL");
1462 MODULE_ALIAS_BLOCKDEV_MAJOR(LOOP_MAJOR);
1463
1464 int loop_register_transfer(struct loop_func_table *funcs)
1465 {
1466         unsigned int n = funcs->number;
1467
1468         if (n >= MAX_LO_CRYPT || xfer_funcs[n])
1469                 return -EINVAL;
1470         xfer_funcs[n] = funcs;
1471         return 0;
1472 }
1473
1474 static int unregister_transfer_cb(int id, void *ptr, void *data)
1475 {
1476         struct loop_device *lo = ptr;
1477         struct loop_func_table *xfer = data;
1478
1479         mutex_lock(&lo->lo_ctl_mutex);
1480         if (lo->lo_encryption == xfer)
1481                 loop_release_xfer(lo);
1482         mutex_unlock(&lo->lo_ctl_mutex);
1483         return 0;
1484 }
1485
1486 int loop_unregister_transfer(int number)
1487 {
1488         unsigned int n = number;
1489         struct loop_func_table *xfer;
1490
1491         if (n == 0 || n >= MAX_LO_CRYPT || (xfer = xfer_funcs[n]) == NULL)
1492                 return -EINVAL;
1493
1494         xfer_funcs[n] = NULL;
1495         idr_for_each(&loop_index_idr, &unregister_transfer_cb, xfer);
1496         return 0;
1497 }
1498
1499 EXPORT_SYMBOL(loop_register_transfer);
1500 EXPORT_SYMBOL(loop_unregister_transfer);
1501
1502 static int loop_add(struct loop_device **l, int i)
1503 {
1504         struct loop_device *lo;
1505         struct gendisk *disk;
1506         int err;
1507
1508         lo = kzalloc(sizeof(*lo), GFP_KERNEL);
1509         if (!lo) {
1510                 err = -ENOMEM;
1511                 goto out;
1512         }
1513
1514         err = idr_pre_get(&loop_index_idr, GFP_KERNEL);
1515         if (err < 0)
1516                 goto out_free_dev;
1517
1518         if (i >= 0) {
1519                 int m;
1520
1521                 /* create specific i in the index */
1522                 err = idr_get_new_above(&loop_index_idr, lo, i, &m);
1523                 if (err >= 0 && i != m) {
1524                         idr_remove(&loop_index_idr, m);
1525                         err = -EEXIST;
1526                 }
1527         } else if (i == -1) {
1528                 int m;
1529
1530                 /* get next free nr */
1531                 err = idr_get_new(&loop_index_idr, lo, &m);
1532                 if (err >= 0)
1533                         i = m;
1534         } else {
1535                 err = -EINVAL;
1536         }
1537         if (err < 0)
1538                 goto out_free_dev;
1539
1540         lo->lo_queue = blk_alloc_queue(GFP_KERNEL);
1541         if (!lo->lo_queue)
1542                 goto out_free_dev;
1543
1544         disk = lo->lo_disk = alloc_disk(1 << part_shift);
1545         if (!disk)
1546                 goto out_free_queue;
1547
1548         mutex_init(&lo->lo_ctl_mutex);
1549         lo->lo_number           = i;
1550         lo->lo_thread           = NULL;
1551         init_waitqueue_head(&lo->lo_event);
1552         spin_lock_init(&lo->lo_lock);
1553         disk->major             = LOOP_MAJOR;
1554         disk->first_minor       = i << part_shift;
1555         disk->fops              = &lo_fops;
1556         disk->private_data      = lo;
1557         disk->queue             = lo->lo_queue;
1558         sprintf(disk->disk_name, "loop%d", i);
1559         add_disk(disk);
1560         *l = lo;
1561         return lo->lo_number;
1562
1563 out_free_queue:
1564         blk_cleanup_queue(lo->lo_queue);
1565 out_free_dev:
1566         kfree(lo);
1567 out:
1568         return err;
1569 }
1570
1571 static void loop_remove(struct loop_device *lo)
1572 {
1573         del_gendisk(lo->lo_disk);
1574         blk_cleanup_queue(lo->lo_queue);
1575         put_disk(lo->lo_disk);
1576         kfree(lo);
1577 }
1578
1579 static int find_free_cb(int id, void *ptr, void *data)
1580 {
1581         struct loop_device *lo = ptr;
1582         struct loop_device **l = data;
1583
1584         if (lo->lo_state == Lo_unbound) {
1585                 *l = lo;
1586                 return 1;
1587         }
1588         return 0;
1589 }
1590
1591 static int loop_lookup(struct loop_device **l, int i)
1592 {
1593         struct loop_device *lo;
1594         int ret = -ENODEV;
1595
1596         if (i < 0) {
1597                 int err;
1598
1599                 err = idr_for_each(&loop_index_idr, &find_free_cb, &lo);
1600                 if (err == 1) {
1601                         *l = lo;
1602                         ret = lo->lo_number;
1603                 }
1604                 goto out;
1605         }
1606
1607         /* lookup and return a specific i */
1608         lo = idr_find(&loop_index_idr, i);
1609         if (lo) {
1610                 *l = lo;
1611                 ret = lo->lo_number;
1612         }
1613 out:
1614         return ret;
1615 }
1616
1617 static struct kobject *loop_probe(dev_t dev, int *part, void *data)
1618 {
1619         struct loop_device *lo;
1620         struct kobject *kobj;
1621         int err;
1622
1623         mutex_lock(&loop_index_mutex);
1624         err = loop_lookup(&lo, MINOR(dev) >> part_shift);
1625         if (err < 0)
1626                 err = loop_add(&lo, MINOR(dev) >> part_shift);
1627         if (err < 0)
1628                 kobj = ERR_PTR(err);
1629         else
1630                 kobj = get_disk(lo->lo_disk);
1631         mutex_unlock(&loop_index_mutex);
1632
1633         *part = 0;
1634         return kobj;
1635 }
1636
1637 static long loop_control_ioctl(struct file *file, unsigned int cmd,
1638                                unsigned long parm)
1639 {
1640         struct loop_device *lo;
1641         int ret = -ENOSYS;
1642
1643         mutex_lock(&loop_index_mutex);
1644         switch (cmd) {
1645         case LOOP_CTL_ADD:
1646                 ret = loop_lookup(&lo, parm);
1647                 if (ret >= 0) {
1648                         ret = -EEXIST;
1649                         break;
1650                 }
1651                 ret = loop_add(&lo, parm);
1652                 break;
1653         case LOOP_CTL_REMOVE:
1654                 ret = loop_lookup(&lo, parm);
1655                 if (ret < 0)
1656                         break;
1657                 mutex_lock(&lo->lo_ctl_mutex);
1658                 if (lo->lo_state != Lo_unbound) {
1659                         ret = -EBUSY;
1660                         mutex_unlock(&lo->lo_ctl_mutex);
1661                         break;
1662                 }
1663                 if (lo->lo_refcnt > 0) {
1664                         ret = -EBUSY;
1665                         mutex_unlock(&lo->lo_ctl_mutex);
1666                         break;
1667                 }
1668                 lo->lo_disk->private_data = NULL;
1669                 mutex_unlock(&lo->lo_ctl_mutex);
1670                 idr_remove(&loop_index_idr, lo->lo_number);
1671                 loop_remove(lo);
1672                 break;
1673         case LOOP_CTL_GET_FREE:
1674                 ret = loop_lookup(&lo, -1);
1675                 if (ret >= 0)
1676                         break;
1677                 ret = loop_add(&lo, -1);
1678         }
1679         mutex_unlock(&loop_index_mutex);
1680
1681         return ret;
1682 }
1683
1684 static const struct file_operations loop_ctl_fops = {
1685         .open           = nonseekable_open,
1686         .unlocked_ioctl = loop_control_ioctl,
1687         .compat_ioctl   = loop_control_ioctl,
1688         .owner          = THIS_MODULE,
1689         .llseek         = noop_llseek,
1690 };
1691
1692 static struct miscdevice loop_misc = {
1693         .minor          = LOOP_CTRL_MINOR,
1694         .name           = "loop-control",
1695         .fops           = &loop_ctl_fops,
1696 };
1697
1698 MODULE_ALIAS_MISCDEV(LOOP_CTRL_MINOR);
1699 MODULE_ALIAS("devname:loop-control");
1700
1701 static int __init loop_init(void)
1702 {
1703         int i, nr;
1704         unsigned long range;
1705         struct loop_device *lo;
1706         int err;
1707
1708         err = misc_register(&loop_misc);
1709         if (err < 0)
1710                 return err;
1711
1712         part_shift = 0;
1713         if (max_part > 0) {
1714                 part_shift = fls(max_part);
1715
1716                 /*
1717                  * Adjust max_part according to part_shift as it is exported
1718                  * to user space so that user can decide correct minor number
1719                  * if [s]he want to create more devices.
1720                  *
1721                  * Note that -1 is required because partition 0 is reserved
1722                  * for the whole disk.
1723                  */
1724                 max_part = (1UL << part_shift) - 1;
1725         }
1726
1727         if ((1UL << part_shift) > DISK_MAX_PARTS)
1728                 return -EINVAL;
1729
1730         if (max_loop > 1UL << (MINORBITS - part_shift))
1731                 return -EINVAL;
1732
1733         /*
1734          * If max_loop is specified, create that many devices upfront.
1735          * This also becomes a hard limit. If max_loop is not specified,
1736          * create CONFIG_BLK_DEV_LOOP_MIN_COUNT loop devices at module
1737          * init time. Loop devices can be requested on-demand with the
1738          * /dev/loop-control interface, or be instantiated by accessing
1739          * a 'dead' device node.
1740          */
1741         if (max_loop) {
1742                 nr = max_loop;
1743                 range = max_loop << part_shift;
1744         } else {
1745                 nr = CONFIG_BLK_DEV_LOOP_MIN_COUNT;
1746                 range = 1UL << MINORBITS;
1747         }
1748
1749         if (register_blkdev(LOOP_MAJOR, "loop"))
1750                 return -EIO;
1751
1752         blk_register_region(MKDEV(LOOP_MAJOR, 0), range,
1753                                   THIS_MODULE, loop_probe, NULL, NULL);
1754
1755         /* pre-create number of devices given by config or max_loop */
1756         mutex_lock(&loop_index_mutex);
1757         for (i = 0; i < nr; i++)
1758                 loop_add(&lo, i);
1759         mutex_unlock(&loop_index_mutex);
1760
1761         printk(KERN_INFO "loop: module loaded\n");
1762         return 0;
1763 }
1764
1765 static int loop_exit_cb(int id, void *ptr, void *data)
1766 {
1767         struct loop_device *lo = ptr;
1768
1769         loop_remove(lo);
1770         return 0;
1771 }
1772
1773 static void __exit loop_exit(void)
1774 {
1775         unsigned long range;
1776
1777         range = max_loop ? max_loop << part_shift : 1UL << MINORBITS;
1778
1779         idr_for_each(&loop_index_idr, &loop_exit_cb, NULL);
1780         idr_remove_all(&loop_index_idr);
1781         idr_destroy(&loop_index_idr);
1782
1783         blk_unregister_region(MKDEV(LOOP_MAJOR, 0), range);
1784         unregister_blkdev(LOOP_MAJOR, "loop");
1785
1786         misc_deregister(&loop_misc);
1787 }
1788
1789 module_init(loop_init);
1790 module_exit(loop_exit);
1791
1792 #ifndef MODULE
1793 static int __init max_loop_setup(char *str)
1794 {
1795         max_loop = simple_strtol(str, NULL, 0);
1796         return 1;
1797 }
1798
1799 __setup("max_loop=", max_loop_setup);
1800 #endif