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