get rid of block_write_begin_newtrunc
[pandora-kernel.git] / fs / block_dev.c
1 /*
2  *  linux/fs/block_dev.c
3  *
4  *  Copyright (C) 1991, 1992  Linus Torvalds
5  *  Copyright (C) 2001  Andrea Arcangeli <andrea@suse.de> SuSE
6  */
7
8 #include <linux/init.h>
9 #include <linux/mm.h>
10 #include <linux/fcntl.h>
11 #include <linux/slab.h>
12 #include <linux/kmod.h>
13 #include <linux/major.h>
14 #include <linux/smp_lock.h>
15 #include <linux/device_cgroup.h>
16 #include <linux/highmem.h>
17 #include <linux/blkdev.h>
18 #include <linux/module.h>
19 #include <linux/blkpg.h>
20 #include <linux/buffer_head.h>
21 #include <linux/pagevec.h>
22 #include <linux/writeback.h>
23 #include <linux/mpage.h>
24 #include <linux/mount.h>
25 #include <linux/uio.h>
26 #include <linux/namei.h>
27 #include <linux/log2.h>
28 #include <linux/kmemleak.h>
29 #include <asm/uaccess.h>
30 #include "internal.h"
31
32 struct bdev_inode {
33         struct block_device bdev;
34         struct inode vfs_inode;
35 };
36
37 static const struct address_space_operations def_blk_aops;
38
39 static inline struct bdev_inode *BDEV_I(struct inode *inode)
40 {
41         return container_of(inode, struct bdev_inode, vfs_inode);
42 }
43
44 inline struct block_device *I_BDEV(struct inode *inode)
45 {
46         return &BDEV_I(inode)->bdev;
47 }
48
49 EXPORT_SYMBOL(I_BDEV);
50
51 static sector_t max_block(struct block_device *bdev)
52 {
53         sector_t retval = ~((sector_t)0);
54         loff_t sz = i_size_read(bdev->bd_inode);
55
56         if (sz) {
57                 unsigned int size = block_size(bdev);
58                 unsigned int sizebits = blksize_bits(size);
59                 retval = (sz >> sizebits);
60         }
61         return retval;
62 }
63
64 /* Kill _all_ buffers and pagecache , dirty or not.. */
65 static void kill_bdev(struct block_device *bdev)
66 {
67         if (bdev->bd_inode->i_mapping->nrpages == 0)
68                 return;
69         invalidate_bh_lrus();
70         truncate_inode_pages(bdev->bd_inode->i_mapping, 0);
71 }       
72
73 int set_blocksize(struct block_device *bdev, int size)
74 {
75         /* Size must be a power of two, and between 512 and PAGE_SIZE */
76         if (size > PAGE_SIZE || size < 512 || !is_power_of_2(size))
77                 return -EINVAL;
78
79         /* Size cannot be smaller than the size supported by the device */
80         if (size < bdev_logical_block_size(bdev))
81                 return -EINVAL;
82
83         /* Don't change the size if it is same as current */
84         if (bdev->bd_block_size != size) {
85                 sync_blockdev(bdev);
86                 bdev->bd_block_size = size;
87                 bdev->bd_inode->i_blkbits = blksize_bits(size);
88                 kill_bdev(bdev);
89         }
90         return 0;
91 }
92
93 EXPORT_SYMBOL(set_blocksize);
94
95 int sb_set_blocksize(struct super_block *sb, int size)
96 {
97         if (set_blocksize(sb->s_bdev, size))
98                 return 0;
99         /* If we get here, we know size is power of two
100          * and it's value is between 512 and PAGE_SIZE */
101         sb->s_blocksize = size;
102         sb->s_blocksize_bits = blksize_bits(size);
103         return sb->s_blocksize;
104 }
105
106 EXPORT_SYMBOL(sb_set_blocksize);
107
108 int sb_min_blocksize(struct super_block *sb, int size)
109 {
110         int minsize = bdev_logical_block_size(sb->s_bdev);
111         if (size < minsize)
112                 size = minsize;
113         return sb_set_blocksize(sb, size);
114 }
115
116 EXPORT_SYMBOL(sb_min_blocksize);
117
118 static int
119 blkdev_get_block(struct inode *inode, sector_t iblock,
120                 struct buffer_head *bh, int create)
121 {
122         if (iblock >= max_block(I_BDEV(inode))) {
123                 if (create)
124                         return -EIO;
125
126                 /*
127                  * for reads, we're just trying to fill a partial page.
128                  * return a hole, they will have to call get_block again
129                  * before they can fill it, and they will get -EIO at that
130                  * time
131                  */
132                 return 0;
133         }
134         bh->b_bdev = I_BDEV(inode);
135         bh->b_blocknr = iblock;
136         set_buffer_mapped(bh);
137         return 0;
138 }
139
140 static int
141 blkdev_get_blocks(struct inode *inode, sector_t iblock,
142                 struct buffer_head *bh, int create)
143 {
144         sector_t end_block = max_block(I_BDEV(inode));
145         unsigned long max_blocks = bh->b_size >> inode->i_blkbits;
146
147         if ((iblock + max_blocks) > end_block) {
148                 max_blocks = end_block - iblock;
149                 if ((long)max_blocks <= 0) {
150                         if (create)
151                                 return -EIO;    /* write fully beyond EOF */
152                         /*
153                          * It is a read which is fully beyond EOF.  We return
154                          * a !buffer_mapped buffer
155                          */
156                         max_blocks = 0;
157                 }
158         }
159
160         bh->b_bdev = I_BDEV(inode);
161         bh->b_blocknr = iblock;
162         bh->b_size = max_blocks << inode->i_blkbits;
163         if (max_blocks)
164                 set_buffer_mapped(bh);
165         return 0;
166 }
167
168 static ssize_t
169 blkdev_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov,
170                         loff_t offset, unsigned long nr_segs)
171 {
172         struct file *file = iocb->ki_filp;
173         struct inode *inode = file->f_mapping->host;
174
175         return __blockdev_direct_IO(rw, iocb, inode, I_BDEV(inode), iov, offset,
176                                     nr_segs, blkdev_get_blocks, NULL, NULL, 0);
177 }
178
179 int __sync_blockdev(struct block_device *bdev, int wait)
180 {
181         if (!bdev)
182                 return 0;
183         if (!wait)
184                 return filemap_flush(bdev->bd_inode->i_mapping);
185         return filemap_write_and_wait(bdev->bd_inode->i_mapping);
186 }
187
188 /*
189  * Write out and wait upon all the dirty data associated with a block
190  * device via its mapping.  Does not take the superblock lock.
191  */
192 int sync_blockdev(struct block_device *bdev)
193 {
194         return __sync_blockdev(bdev, 1);
195 }
196 EXPORT_SYMBOL(sync_blockdev);
197
198 /*
199  * Write out and wait upon all dirty data associated with this
200  * device.   Filesystem data as well as the underlying block
201  * device.  Takes the superblock lock.
202  */
203 int fsync_bdev(struct block_device *bdev)
204 {
205         struct super_block *sb = get_super(bdev);
206         if (sb) {
207                 int res = sync_filesystem(sb);
208                 drop_super(sb);
209                 return res;
210         }
211         return sync_blockdev(bdev);
212 }
213 EXPORT_SYMBOL(fsync_bdev);
214
215 /**
216  * freeze_bdev  --  lock a filesystem and force it into a consistent state
217  * @bdev:       blockdevice to lock
218  *
219  * If a superblock is found on this device, we take the s_umount semaphore
220  * on it to make sure nobody unmounts until the snapshot creation is done.
221  * The reference counter (bd_fsfreeze_count) guarantees that only the last
222  * unfreeze process can unfreeze the frozen filesystem actually when multiple
223  * freeze requests arrive simultaneously. It counts up in freeze_bdev() and
224  * count down in thaw_bdev(). When it becomes 0, thaw_bdev() will unfreeze
225  * actually.
226  */
227 struct super_block *freeze_bdev(struct block_device *bdev)
228 {
229         struct super_block *sb;
230         int error = 0;
231
232         mutex_lock(&bdev->bd_fsfreeze_mutex);
233         if (++bdev->bd_fsfreeze_count > 1) {
234                 /*
235                  * We don't even need to grab a reference - the first call
236                  * to freeze_bdev grab an active reference and only the last
237                  * thaw_bdev drops it.
238                  */
239                 sb = get_super(bdev);
240                 drop_super(sb);
241                 mutex_unlock(&bdev->bd_fsfreeze_mutex);
242                 return sb;
243         }
244
245         sb = get_active_super(bdev);
246         if (!sb)
247                 goto out;
248         error = freeze_super(sb);
249         if (error) {
250                 deactivate_super(sb);
251                 bdev->bd_fsfreeze_count--;
252                 mutex_unlock(&bdev->bd_fsfreeze_mutex);
253                 return ERR_PTR(error);
254         }
255         deactivate_super(sb);
256  out:
257         sync_blockdev(bdev);
258         mutex_unlock(&bdev->bd_fsfreeze_mutex);
259         return sb;      /* thaw_bdev releases s->s_umount */
260 }
261 EXPORT_SYMBOL(freeze_bdev);
262
263 /**
264  * thaw_bdev  -- unlock filesystem
265  * @bdev:       blockdevice to unlock
266  * @sb:         associated superblock
267  *
268  * Unlocks the filesystem and marks it writeable again after freeze_bdev().
269  */
270 int thaw_bdev(struct block_device *bdev, struct super_block *sb)
271 {
272         int error = -EINVAL;
273
274         mutex_lock(&bdev->bd_fsfreeze_mutex);
275         if (!bdev->bd_fsfreeze_count)
276                 goto out;
277
278         error = 0;
279         if (--bdev->bd_fsfreeze_count > 0)
280                 goto out;
281
282         if (!sb)
283                 goto out;
284
285         error = thaw_super(sb);
286         if (error) {
287                 bdev->bd_fsfreeze_count++;
288                 mutex_unlock(&bdev->bd_fsfreeze_mutex);
289                 return error;
290         }
291 out:
292         mutex_unlock(&bdev->bd_fsfreeze_mutex);
293         return 0;
294 }
295 EXPORT_SYMBOL(thaw_bdev);
296
297 static int blkdev_writepage(struct page *page, struct writeback_control *wbc)
298 {
299         return block_write_full_page(page, blkdev_get_block, wbc);
300 }
301
302 static int blkdev_readpage(struct file * file, struct page * page)
303 {
304         return block_read_full_page(page, blkdev_get_block);
305 }
306
307 static int blkdev_write_begin(struct file *file, struct address_space *mapping,
308                         loff_t pos, unsigned len, unsigned flags,
309                         struct page **pagep, void **fsdata)
310 {
311         return block_write_begin(mapping, pos, len, flags, pagep,
312                                  blkdev_get_block);
313 }
314
315 static int blkdev_write_end(struct file *file, struct address_space *mapping,
316                         loff_t pos, unsigned len, unsigned copied,
317                         struct page *page, void *fsdata)
318 {
319         int ret;
320         ret = block_write_end(file, mapping, pos, len, copied, page, fsdata);
321
322         unlock_page(page);
323         page_cache_release(page);
324
325         return ret;
326 }
327
328 /*
329  * private llseek:
330  * for a block special file file->f_path.dentry->d_inode->i_size is zero
331  * so we compute the size by hand (just as in block_read/write above)
332  */
333 static loff_t block_llseek(struct file *file, loff_t offset, int origin)
334 {
335         struct inode *bd_inode = file->f_mapping->host;
336         loff_t size;
337         loff_t retval;
338
339         mutex_lock(&bd_inode->i_mutex);
340         size = i_size_read(bd_inode);
341
342         switch (origin) {
343                 case 2:
344                         offset += size;
345                         break;
346                 case 1:
347                         offset += file->f_pos;
348         }
349         retval = -EINVAL;
350         if (offset >= 0 && offset <= size) {
351                 if (offset != file->f_pos) {
352                         file->f_pos = offset;
353                 }
354                 retval = offset;
355         }
356         mutex_unlock(&bd_inode->i_mutex);
357         return retval;
358 }
359         
360 int blkdev_fsync(struct file *filp, int datasync)
361 {
362         struct inode *bd_inode = filp->f_mapping->host;
363         struct block_device *bdev = I_BDEV(bd_inode);
364         int error;
365
366         /*
367          * There is no need to serialise calls to blkdev_issue_flush with
368          * i_mutex and doing so causes performance issues with concurrent
369          * O_SYNC writers to a block device.
370          */
371         mutex_unlock(&bd_inode->i_mutex);
372
373         error = blkdev_issue_flush(bdev, GFP_KERNEL, NULL, BLKDEV_IFL_WAIT);
374         if (error == -EOPNOTSUPP)
375                 error = 0;
376
377         mutex_lock(&bd_inode->i_mutex);
378
379         return error;
380 }
381 EXPORT_SYMBOL(blkdev_fsync);
382
383 /*
384  * pseudo-fs
385  */
386
387 static  __cacheline_aligned_in_smp DEFINE_SPINLOCK(bdev_lock);
388 static struct kmem_cache * bdev_cachep __read_mostly;
389
390 static struct inode *bdev_alloc_inode(struct super_block *sb)
391 {
392         struct bdev_inode *ei = kmem_cache_alloc(bdev_cachep, GFP_KERNEL);
393         if (!ei)
394                 return NULL;
395         return &ei->vfs_inode;
396 }
397
398 static void bdev_destroy_inode(struct inode *inode)
399 {
400         struct bdev_inode *bdi = BDEV_I(inode);
401
402         kmem_cache_free(bdev_cachep, bdi);
403 }
404
405 static void init_once(void *foo)
406 {
407         struct bdev_inode *ei = (struct bdev_inode *) foo;
408         struct block_device *bdev = &ei->bdev;
409
410         memset(bdev, 0, sizeof(*bdev));
411         mutex_init(&bdev->bd_mutex);
412         INIT_LIST_HEAD(&bdev->bd_inodes);
413         INIT_LIST_HEAD(&bdev->bd_list);
414 #ifdef CONFIG_SYSFS
415         INIT_LIST_HEAD(&bdev->bd_holder_list);
416 #endif
417         inode_init_once(&ei->vfs_inode);
418         /* Initialize mutex for freeze. */
419         mutex_init(&bdev->bd_fsfreeze_mutex);
420 }
421
422 static inline void __bd_forget(struct inode *inode)
423 {
424         list_del_init(&inode->i_devices);
425         inode->i_bdev = NULL;
426         inode->i_mapping = &inode->i_data;
427 }
428
429 static void bdev_clear_inode(struct inode *inode)
430 {
431         struct block_device *bdev = &BDEV_I(inode)->bdev;
432         struct list_head *p;
433         spin_lock(&bdev_lock);
434         while ( (p = bdev->bd_inodes.next) != &bdev->bd_inodes ) {
435                 __bd_forget(list_entry(p, struct inode, i_devices));
436         }
437         list_del_init(&bdev->bd_list);
438         spin_unlock(&bdev_lock);
439 }
440
441 static const struct super_operations bdev_sops = {
442         .statfs = simple_statfs,
443         .alloc_inode = bdev_alloc_inode,
444         .destroy_inode = bdev_destroy_inode,
445         .drop_inode = generic_delete_inode,
446         .clear_inode = bdev_clear_inode,
447 };
448
449 static int bd_get_sb(struct file_system_type *fs_type,
450         int flags, const char *dev_name, void *data, struct vfsmount *mnt)
451 {
452         return get_sb_pseudo(fs_type, "bdev:", &bdev_sops, 0x62646576, mnt);
453 }
454
455 static struct file_system_type bd_type = {
456         .name           = "bdev",
457         .get_sb         = bd_get_sb,
458         .kill_sb        = kill_anon_super,
459 };
460
461 struct super_block *blockdev_superblock __read_mostly;
462
463 void __init bdev_cache_init(void)
464 {
465         int err;
466         struct vfsmount *bd_mnt;
467
468         bdev_cachep = kmem_cache_create("bdev_cache", sizeof(struct bdev_inode),
469                         0, (SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT|
470                                 SLAB_MEM_SPREAD|SLAB_PANIC),
471                         init_once);
472         err = register_filesystem(&bd_type);
473         if (err)
474                 panic("Cannot register bdev pseudo-fs");
475         bd_mnt = kern_mount(&bd_type);
476         if (IS_ERR(bd_mnt))
477                 panic("Cannot create bdev pseudo-fs");
478         /*
479          * This vfsmount structure is only used to obtain the
480          * blockdev_superblock, so tell kmemleak not to report it.
481          */
482         kmemleak_not_leak(bd_mnt);
483         blockdev_superblock = bd_mnt->mnt_sb;   /* For writeback */
484 }
485
486 /*
487  * Most likely _very_ bad one - but then it's hardly critical for small
488  * /dev and can be fixed when somebody will need really large one.
489  * Keep in mind that it will be fed through icache hash function too.
490  */
491 static inline unsigned long hash(dev_t dev)
492 {
493         return MAJOR(dev)+MINOR(dev);
494 }
495
496 static int bdev_test(struct inode *inode, void *data)
497 {
498         return BDEV_I(inode)->bdev.bd_dev == *(dev_t *)data;
499 }
500
501 static int bdev_set(struct inode *inode, void *data)
502 {
503         BDEV_I(inode)->bdev.bd_dev = *(dev_t *)data;
504         return 0;
505 }
506
507 static LIST_HEAD(all_bdevs);
508
509 struct block_device *bdget(dev_t dev)
510 {
511         struct block_device *bdev;
512         struct inode *inode;
513
514         inode = iget5_locked(blockdev_superblock, hash(dev),
515                         bdev_test, bdev_set, &dev);
516
517         if (!inode)
518                 return NULL;
519
520         bdev = &BDEV_I(inode)->bdev;
521
522         if (inode->i_state & I_NEW) {
523                 bdev->bd_contains = NULL;
524                 bdev->bd_inode = inode;
525                 bdev->bd_block_size = (1 << inode->i_blkbits);
526                 bdev->bd_part_count = 0;
527                 bdev->bd_invalidated = 0;
528                 inode->i_mode = S_IFBLK;
529                 inode->i_rdev = dev;
530                 inode->i_bdev = bdev;
531                 inode->i_data.a_ops = &def_blk_aops;
532                 mapping_set_gfp_mask(&inode->i_data, GFP_USER);
533                 inode->i_data.backing_dev_info = &default_backing_dev_info;
534                 spin_lock(&bdev_lock);
535                 list_add(&bdev->bd_list, &all_bdevs);
536                 spin_unlock(&bdev_lock);
537                 unlock_new_inode(inode);
538         }
539         return bdev;
540 }
541
542 EXPORT_SYMBOL(bdget);
543
544 /**
545  * bdgrab -- Grab a reference to an already referenced block device
546  * @bdev:       Block device to grab a reference to.
547  */
548 struct block_device *bdgrab(struct block_device *bdev)
549 {
550         atomic_inc(&bdev->bd_inode->i_count);
551         return bdev;
552 }
553
554 long nr_blockdev_pages(void)
555 {
556         struct block_device *bdev;
557         long ret = 0;
558         spin_lock(&bdev_lock);
559         list_for_each_entry(bdev, &all_bdevs, bd_list) {
560                 ret += bdev->bd_inode->i_mapping->nrpages;
561         }
562         spin_unlock(&bdev_lock);
563         return ret;
564 }
565
566 void bdput(struct block_device *bdev)
567 {
568         iput(bdev->bd_inode);
569 }
570
571 EXPORT_SYMBOL(bdput);
572  
573 static struct block_device *bd_acquire(struct inode *inode)
574 {
575         struct block_device *bdev;
576
577         spin_lock(&bdev_lock);
578         bdev = inode->i_bdev;
579         if (bdev) {
580                 atomic_inc(&bdev->bd_inode->i_count);
581                 spin_unlock(&bdev_lock);
582                 return bdev;
583         }
584         spin_unlock(&bdev_lock);
585
586         bdev = bdget(inode->i_rdev);
587         if (bdev) {
588                 spin_lock(&bdev_lock);
589                 if (!inode->i_bdev) {
590                         /*
591                          * We take an additional bd_inode->i_count for inode,
592                          * and it's released in clear_inode() of inode.
593                          * So, we can access it via ->i_mapping always
594                          * without igrab().
595                          */
596                         atomic_inc(&bdev->bd_inode->i_count);
597                         inode->i_bdev = bdev;
598                         inode->i_mapping = bdev->bd_inode->i_mapping;
599                         list_add(&inode->i_devices, &bdev->bd_inodes);
600                 }
601                 spin_unlock(&bdev_lock);
602         }
603         return bdev;
604 }
605
606 /* Call when you free inode */
607
608 void bd_forget(struct inode *inode)
609 {
610         struct block_device *bdev = NULL;
611
612         spin_lock(&bdev_lock);
613         if (inode->i_bdev) {
614                 if (!sb_is_blkdev_sb(inode->i_sb))
615                         bdev = inode->i_bdev;
616                 __bd_forget(inode);
617         }
618         spin_unlock(&bdev_lock);
619
620         if (bdev)
621                 iput(bdev->bd_inode);
622 }
623
624 /**
625  * bd_may_claim - test whether a block device can be claimed
626  * @bdev: block device of interest
627  * @whole: whole block device containing @bdev, may equal @bdev
628  * @holder: holder trying to claim @bdev
629  *
630  * Test whther @bdev can be claimed by @holder.
631  *
632  * CONTEXT:
633  * spin_lock(&bdev_lock).
634  *
635  * RETURNS:
636  * %true if @bdev can be claimed, %false otherwise.
637  */
638 static bool bd_may_claim(struct block_device *bdev, struct block_device *whole,
639                          void *holder)
640 {
641         if (bdev->bd_holder == holder)
642                 return true;     /* already a holder */
643         else if (bdev->bd_holder != NULL)
644                 return false;    /* held by someone else */
645         else if (bdev->bd_contains == bdev)
646                 return true;     /* is a whole device which isn't held */
647
648         else if (whole->bd_holder == bd_claim)
649                 return true;     /* is a partition of a device that is being partitioned */
650         else if (whole->bd_holder != NULL)
651                 return false;    /* is a partition of a held device */
652         else
653                 return true;     /* is a partition of an un-held device */
654 }
655
656 /**
657  * bd_prepare_to_claim - prepare to claim a block device
658  * @bdev: block device of interest
659  * @whole: the whole device containing @bdev, may equal @bdev
660  * @holder: holder trying to claim @bdev
661  *
662  * Prepare to claim @bdev.  This function fails if @bdev is already
663  * claimed by another holder and waits if another claiming is in
664  * progress.  This function doesn't actually claim.  On successful
665  * return, the caller has ownership of bd_claiming and bd_holder[s].
666  *
667  * CONTEXT:
668  * spin_lock(&bdev_lock).  Might release bdev_lock, sleep and regrab
669  * it multiple times.
670  *
671  * RETURNS:
672  * 0 if @bdev can be claimed, -EBUSY otherwise.
673  */
674 static int bd_prepare_to_claim(struct block_device *bdev,
675                                struct block_device *whole, void *holder)
676 {
677 retry:
678         /* if someone else claimed, fail */
679         if (!bd_may_claim(bdev, whole, holder))
680                 return -EBUSY;
681
682         /* if someone else is claiming, wait for it to finish */
683         if (whole->bd_claiming && whole->bd_claiming != holder) {
684                 wait_queue_head_t *wq = bit_waitqueue(&whole->bd_claiming, 0);
685                 DEFINE_WAIT(wait);
686
687                 prepare_to_wait(wq, &wait, TASK_UNINTERRUPTIBLE);
688                 spin_unlock(&bdev_lock);
689                 schedule();
690                 finish_wait(wq, &wait);
691                 spin_lock(&bdev_lock);
692                 goto retry;
693         }
694
695         /* yay, all mine */
696         return 0;
697 }
698
699 /**
700  * bd_start_claiming - start claiming a block device
701  * @bdev: block device of interest
702  * @holder: holder trying to claim @bdev
703  *
704  * @bdev is about to be opened exclusively.  Check @bdev can be opened
705  * exclusively and mark that an exclusive open is in progress.  Each
706  * successful call to this function must be matched with a call to
707  * either bd_finish_claiming() or bd_abort_claiming() (which do not
708  * fail).
709  *
710  * This function is used to gain exclusive access to the block device
711  * without actually causing other exclusive open attempts to fail. It
712  * should be used when the open sequence itself requires exclusive
713  * access but may subsequently fail.
714  *
715  * CONTEXT:
716  * Might sleep.
717  *
718  * RETURNS:
719  * Pointer to the block device containing @bdev on success, ERR_PTR()
720  * value on failure.
721  */
722 static struct block_device *bd_start_claiming(struct block_device *bdev,
723                                               void *holder)
724 {
725         struct gendisk *disk;
726         struct block_device *whole;
727         int partno, err;
728
729         might_sleep();
730
731         /*
732          * @bdev might not have been initialized properly yet, look up
733          * and grab the outer block device the hard way.
734          */
735         disk = get_gendisk(bdev->bd_dev, &partno);
736         if (!disk)
737                 return ERR_PTR(-ENXIO);
738
739         whole = bdget_disk(disk, 0);
740         module_put(disk->fops->owner);
741         put_disk(disk);
742         if (!whole)
743                 return ERR_PTR(-ENOMEM);
744
745         /* prepare to claim, if successful, mark claiming in progress */
746         spin_lock(&bdev_lock);
747
748         err = bd_prepare_to_claim(bdev, whole, holder);
749         if (err == 0) {
750                 whole->bd_claiming = holder;
751                 spin_unlock(&bdev_lock);
752                 return whole;
753         } else {
754                 spin_unlock(&bdev_lock);
755                 bdput(whole);
756                 return ERR_PTR(err);
757         }
758 }
759
760 /* releases bdev_lock */
761 static void __bd_abort_claiming(struct block_device *whole, void *holder)
762 {
763         BUG_ON(whole->bd_claiming != holder);
764         whole->bd_claiming = NULL;
765         wake_up_bit(&whole->bd_claiming, 0);
766
767         spin_unlock(&bdev_lock);
768         bdput(whole);
769 }
770
771 /**
772  * bd_abort_claiming - abort claiming a block device
773  * @whole: whole block device returned by bd_start_claiming()
774  * @holder: holder trying to claim @bdev
775  *
776  * Abort a claiming block started by bd_start_claiming().  Note that
777  * @whole is not the block device to be claimed but the whole device
778  * returned by bd_start_claiming().
779  *
780  * CONTEXT:
781  * Grabs and releases bdev_lock.
782  */
783 static void bd_abort_claiming(struct block_device *whole, void *holder)
784 {
785         spin_lock(&bdev_lock);
786         __bd_abort_claiming(whole, holder);             /* releases bdev_lock */
787 }
788
789 /* increment holders when we have a legitimate claim. requires bdev_lock */
790 static void __bd_claim(struct block_device *bdev, struct block_device *whole,
791                                         void *holder)
792 {
793         /* note that for a whole device bd_holders
794          * will be incremented twice, and bd_holder will
795          * be set to bd_claim before being set to holder
796          */
797         whole->bd_holders++;
798         whole->bd_holder = bd_claim;
799         bdev->bd_holders++;
800         bdev->bd_holder = holder;
801 }
802
803 /**
804  * bd_finish_claiming - finish claiming a block device
805  * @bdev: block device of interest (passed to bd_start_claiming())
806  * @whole: whole block device returned by bd_start_claiming()
807  * @holder: holder trying to claim @bdev
808  *
809  * Finish a claiming block started by bd_start_claiming().
810  *
811  * CONTEXT:
812  * Grabs and releases bdev_lock.
813  */
814 static void bd_finish_claiming(struct block_device *bdev,
815                                 struct block_device *whole, void *holder)
816 {
817         spin_lock(&bdev_lock);
818         BUG_ON(!bd_may_claim(bdev, whole, holder));
819         __bd_claim(bdev, whole, holder);
820         __bd_abort_claiming(whole, holder); /* not actually an abort */
821 }
822
823 /**
824  * bd_claim - claim a block device
825  * @bdev: block device to claim
826  * @holder: holder trying to claim @bdev
827  *
828  * Try to claim @bdev which must have been opened successfully.
829  *
830  * CONTEXT:
831  * Might sleep.
832  *
833  * RETURNS:
834  * 0 if successful, -EBUSY if @bdev is already claimed.
835  */
836 int bd_claim(struct block_device *bdev, void *holder)
837 {
838         struct block_device *whole = bdev->bd_contains;
839         int res;
840
841         might_sleep();
842
843         spin_lock(&bdev_lock);
844         res = bd_prepare_to_claim(bdev, whole, holder);
845         if (res == 0)
846                 __bd_claim(bdev, whole, holder);
847         spin_unlock(&bdev_lock);
848
849         return res;
850 }
851 EXPORT_SYMBOL(bd_claim);
852
853 void bd_release(struct block_device *bdev)
854 {
855         spin_lock(&bdev_lock);
856         if (!--bdev->bd_contains->bd_holders)
857                 bdev->bd_contains->bd_holder = NULL;
858         if (!--bdev->bd_holders)
859                 bdev->bd_holder = NULL;
860         spin_unlock(&bdev_lock);
861 }
862
863 EXPORT_SYMBOL(bd_release);
864
865 #ifdef CONFIG_SYSFS
866 /*
867  * Functions for bd_claim_by_kobject / bd_release_from_kobject
868  *
869  *     If a kobject is passed to bd_claim_by_kobject()
870  *     and the kobject has a parent directory,
871  *     following symlinks are created:
872  *        o from the kobject to the claimed bdev
873  *        o from "holders" directory of the bdev to the parent of the kobject
874  *     bd_release_from_kobject() removes these symlinks.
875  *
876  *     Example:
877  *        If /dev/dm-0 maps to /dev/sda, kobject corresponding to
878  *        /sys/block/dm-0/slaves is passed to bd_claim_by_kobject(), then:
879  *           /sys/block/dm-0/slaves/sda --> /sys/block/sda
880  *           /sys/block/sda/holders/dm-0 --> /sys/block/dm-0
881  */
882
883 static int add_symlink(struct kobject *from, struct kobject *to)
884 {
885         if (!from || !to)
886                 return 0;
887         return sysfs_create_link(from, to, kobject_name(to));
888 }
889
890 static void del_symlink(struct kobject *from, struct kobject *to)
891 {
892         if (!from || !to)
893                 return;
894         sysfs_remove_link(from, kobject_name(to));
895 }
896
897 /*
898  * 'struct bd_holder' contains pointers to kobjects symlinked by
899  * bd_claim_by_kobject.
900  * It's connected to bd_holder_list which is protected by bdev->bd_sem.
901  */
902 struct bd_holder {
903         struct list_head list;  /* chain of holders of the bdev */
904         int count;              /* references from the holder */
905         struct kobject *sdir;   /* holder object, e.g. "/block/dm-0/slaves" */
906         struct kobject *hdev;   /* e.g. "/block/dm-0" */
907         struct kobject *hdir;   /* e.g. "/block/sda/holders" */
908         struct kobject *sdev;   /* e.g. "/block/sda" */
909 };
910
911 /*
912  * Get references of related kobjects at once.
913  * Returns 1 on success. 0 on failure.
914  *
915  * Should call bd_holder_release_dirs() after successful use.
916  */
917 static int bd_holder_grab_dirs(struct block_device *bdev,
918                         struct bd_holder *bo)
919 {
920         if (!bdev || !bo)
921                 return 0;
922
923         bo->sdir = kobject_get(bo->sdir);
924         if (!bo->sdir)
925                 return 0;
926
927         bo->hdev = kobject_get(bo->sdir->parent);
928         if (!bo->hdev)
929                 goto fail_put_sdir;
930
931         bo->sdev = kobject_get(&part_to_dev(bdev->bd_part)->kobj);
932         if (!bo->sdev)
933                 goto fail_put_hdev;
934
935         bo->hdir = kobject_get(bdev->bd_part->holder_dir);
936         if (!bo->hdir)
937                 goto fail_put_sdev;
938
939         return 1;
940
941 fail_put_sdev:
942         kobject_put(bo->sdev);
943 fail_put_hdev:
944         kobject_put(bo->hdev);
945 fail_put_sdir:
946         kobject_put(bo->sdir);
947
948         return 0;
949 }
950
951 /* Put references of related kobjects at once. */
952 static void bd_holder_release_dirs(struct bd_holder *bo)
953 {
954         kobject_put(bo->hdir);
955         kobject_put(bo->sdev);
956         kobject_put(bo->hdev);
957         kobject_put(bo->sdir);
958 }
959
960 static struct bd_holder *alloc_bd_holder(struct kobject *kobj)
961 {
962         struct bd_holder *bo;
963
964         bo = kzalloc(sizeof(*bo), GFP_KERNEL);
965         if (!bo)
966                 return NULL;
967
968         bo->count = 1;
969         bo->sdir = kobj;
970
971         return bo;
972 }
973
974 static void free_bd_holder(struct bd_holder *bo)
975 {
976         kfree(bo);
977 }
978
979 /**
980  * find_bd_holder - find matching struct bd_holder from the block device
981  *
982  * @bdev:       struct block device to be searched
983  * @bo:         target struct bd_holder
984  *
985  * Returns matching entry with @bo in @bdev->bd_holder_list.
986  * If found, increment the reference count and return the pointer.
987  * If not found, returns NULL.
988  */
989 static struct bd_holder *find_bd_holder(struct block_device *bdev,
990                                         struct bd_holder *bo)
991 {
992         struct bd_holder *tmp;
993
994         list_for_each_entry(tmp, &bdev->bd_holder_list, list)
995                 if (tmp->sdir == bo->sdir) {
996                         tmp->count++;
997                         return tmp;
998                 }
999
1000         return NULL;
1001 }
1002
1003 /**
1004  * add_bd_holder - create sysfs symlinks for bd_claim() relationship
1005  *
1006  * @bdev:       block device to be bd_claimed
1007  * @bo:         preallocated and initialized by alloc_bd_holder()
1008  *
1009  * Add @bo to @bdev->bd_holder_list, create symlinks.
1010  *
1011  * Returns 0 if symlinks are created.
1012  * Returns -ve if something fails.
1013  */
1014 static int add_bd_holder(struct block_device *bdev, struct bd_holder *bo)
1015 {
1016         int err;
1017
1018         if (!bo)
1019                 return -EINVAL;
1020
1021         if (!bd_holder_grab_dirs(bdev, bo))
1022                 return -EBUSY;
1023
1024         err = add_symlink(bo->sdir, bo->sdev);
1025         if (err)
1026                 return err;
1027
1028         err = add_symlink(bo->hdir, bo->hdev);
1029         if (err) {
1030                 del_symlink(bo->sdir, bo->sdev);
1031                 return err;
1032         }
1033
1034         list_add_tail(&bo->list, &bdev->bd_holder_list);
1035         return 0;
1036 }
1037
1038 /**
1039  * del_bd_holder - delete sysfs symlinks for bd_claim() relationship
1040  *
1041  * @bdev:       block device to be bd_claimed
1042  * @kobj:       holder's kobject
1043  *
1044  * If there is matching entry with @kobj in @bdev->bd_holder_list
1045  * and no other bd_claim() from the same kobject,
1046  * remove the struct bd_holder from the list, delete symlinks for it.
1047  *
1048  * Returns a pointer to the struct bd_holder when it's removed from the list
1049  * and ready to be freed.
1050  * Returns NULL if matching claim isn't found or there is other bd_claim()
1051  * by the same kobject.
1052  */
1053 static struct bd_holder *del_bd_holder(struct block_device *bdev,
1054                                         struct kobject *kobj)
1055 {
1056         struct bd_holder *bo;
1057
1058         list_for_each_entry(bo, &bdev->bd_holder_list, list) {
1059                 if (bo->sdir == kobj) {
1060                         bo->count--;
1061                         BUG_ON(bo->count < 0);
1062                         if (!bo->count) {
1063                                 list_del(&bo->list);
1064                                 del_symlink(bo->sdir, bo->sdev);
1065                                 del_symlink(bo->hdir, bo->hdev);
1066                                 bd_holder_release_dirs(bo);
1067                                 return bo;
1068                         }
1069                         break;
1070                 }
1071         }
1072
1073         return NULL;
1074 }
1075
1076 /**
1077  * bd_claim_by_kobject - bd_claim() with additional kobject signature
1078  *
1079  * @bdev:       block device to be claimed
1080  * @holder:     holder's signature
1081  * @kobj:       holder's kobject
1082  *
1083  * Do bd_claim() and if it succeeds, create sysfs symlinks between
1084  * the bdev and the holder's kobject.
1085  * Use bd_release_from_kobject() when relesing the claimed bdev.
1086  *
1087  * Returns 0 on success. (same as bd_claim())
1088  * Returns errno on failure.
1089  */
1090 static int bd_claim_by_kobject(struct block_device *bdev, void *holder,
1091                                 struct kobject *kobj)
1092 {
1093         int err;
1094         struct bd_holder *bo, *found;
1095
1096         if (!kobj)
1097                 return -EINVAL;
1098
1099         bo = alloc_bd_holder(kobj);
1100         if (!bo)
1101                 return -ENOMEM;
1102
1103         mutex_lock(&bdev->bd_mutex);
1104
1105         err = bd_claim(bdev, holder);
1106         if (err)
1107                 goto fail;
1108
1109         found = find_bd_holder(bdev, bo);
1110         if (found)
1111                 goto fail;
1112
1113         err = add_bd_holder(bdev, bo);
1114         if (err)
1115                 bd_release(bdev);
1116         else
1117                 bo = NULL;
1118 fail:
1119         mutex_unlock(&bdev->bd_mutex);
1120         free_bd_holder(bo);
1121         return err;
1122 }
1123
1124 /**
1125  * bd_release_from_kobject - bd_release() with additional kobject signature
1126  *
1127  * @bdev:       block device to be released
1128  * @kobj:       holder's kobject
1129  *
1130  * Do bd_release() and remove sysfs symlinks created by bd_claim_by_kobject().
1131  */
1132 static void bd_release_from_kobject(struct block_device *bdev,
1133                                         struct kobject *kobj)
1134 {
1135         if (!kobj)
1136                 return;
1137
1138         mutex_lock(&bdev->bd_mutex);
1139         bd_release(bdev);
1140         free_bd_holder(del_bd_holder(bdev, kobj));
1141         mutex_unlock(&bdev->bd_mutex);
1142 }
1143
1144 /**
1145  * bd_claim_by_disk - wrapper function for bd_claim_by_kobject()
1146  *
1147  * @bdev:       block device to be claimed
1148  * @holder:     holder's signature
1149  * @disk:       holder's gendisk
1150  *
1151  * Call bd_claim_by_kobject() with getting @disk->slave_dir.
1152  */
1153 int bd_claim_by_disk(struct block_device *bdev, void *holder,
1154                         struct gendisk *disk)
1155 {
1156         return bd_claim_by_kobject(bdev, holder, kobject_get(disk->slave_dir));
1157 }
1158 EXPORT_SYMBOL_GPL(bd_claim_by_disk);
1159
1160 /**
1161  * bd_release_from_disk - wrapper function for bd_release_from_kobject()
1162  *
1163  * @bdev:       block device to be claimed
1164  * @disk:       holder's gendisk
1165  *
1166  * Call bd_release_from_kobject() and put @disk->slave_dir.
1167  */
1168 void bd_release_from_disk(struct block_device *bdev, struct gendisk *disk)
1169 {
1170         bd_release_from_kobject(bdev, disk->slave_dir);
1171         kobject_put(disk->slave_dir);
1172 }
1173 EXPORT_SYMBOL_GPL(bd_release_from_disk);
1174 #endif
1175
1176 /*
1177  * Tries to open block device by device number.  Use it ONLY if you
1178  * really do not have anything better - i.e. when you are behind a
1179  * truly sucky interface and all you are given is a device number.  _Never_
1180  * to be used for internal purposes.  If you ever need it - reconsider
1181  * your API.
1182  */
1183 struct block_device *open_by_devnum(dev_t dev, fmode_t mode)
1184 {
1185         struct block_device *bdev = bdget(dev);
1186         int err = -ENOMEM;
1187         if (bdev)
1188                 err = blkdev_get(bdev, mode);
1189         return err ? ERR_PTR(err) : bdev;
1190 }
1191
1192 EXPORT_SYMBOL(open_by_devnum);
1193
1194 /**
1195  * flush_disk - invalidates all buffer-cache entries on a disk
1196  *
1197  * @bdev:      struct block device to be flushed
1198  *
1199  * Invalidates all buffer-cache entries on a disk. It should be called
1200  * when a disk has been changed -- either by a media change or online
1201  * resize.
1202  */
1203 static void flush_disk(struct block_device *bdev)
1204 {
1205         if (__invalidate_device(bdev)) {
1206                 char name[BDEVNAME_SIZE] = "";
1207
1208                 if (bdev->bd_disk)
1209                         disk_name(bdev->bd_disk, 0, name);
1210                 printk(KERN_WARNING "VFS: busy inodes on changed media or "
1211                        "resized disk %s\n", name);
1212         }
1213
1214         if (!bdev->bd_disk)
1215                 return;
1216         if (disk_partitionable(bdev->bd_disk))
1217                 bdev->bd_invalidated = 1;
1218 }
1219
1220 /**
1221  * check_disk_size_change - checks for disk size change and adjusts bdev size.
1222  * @disk: struct gendisk to check
1223  * @bdev: struct bdev to adjust.
1224  *
1225  * This routine checks to see if the bdev size does not match the disk size
1226  * and adjusts it if it differs.
1227  */
1228 void check_disk_size_change(struct gendisk *disk, struct block_device *bdev)
1229 {
1230         loff_t disk_size, bdev_size;
1231
1232         disk_size = (loff_t)get_capacity(disk) << 9;
1233         bdev_size = i_size_read(bdev->bd_inode);
1234         if (disk_size != bdev_size) {
1235                 char name[BDEVNAME_SIZE];
1236
1237                 disk_name(disk, 0, name);
1238                 printk(KERN_INFO
1239                        "%s: detected capacity change from %lld to %lld\n",
1240                        name, bdev_size, disk_size);
1241                 i_size_write(bdev->bd_inode, disk_size);
1242                 flush_disk(bdev);
1243         }
1244 }
1245 EXPORT_SYMBOL(check_disk_size_change);
1246
1247 /**
1248  * revalidate_disk - wrapper for lower-level driver's revalidate_disk call-back
1249  * @disk: struct gendisk to be revalidated
1250  *
1251  * This routine is a wrapper for lower-level driver's revalidate_disk
1252  * call-backs.  It is used to do common pre and post operations needed
1253  * for all revalidate_disk operations.
1254  */
1255 int revalidate_disk(struct gendisk *disk)
1256 {
1257         struct block_device *bdev;
1258         int ret = 0;
1259
1260         if (disk->fops->revalidate_disk)
1261                 ret = disk->fops->revalidate_disk(disk);
1262
1263         bdev = bdget_disk(disk, 0);
1264         if (!bdev)
1265                 return ret;
1266
1267         mutex_lock(&bdev->bd_mutex);
1268         check_disk_size_change(disk, bdev);
1269         mutex_unlock(&bdev->bd_mutex);
1270         bdput(bdev);
1271         return ret;
1272 }
1273 EXPORT_SYMBOL(revalidate_disk);
1274
1275 /*
1276  * This routine checks whether a removable media has been changed,
1277  * and invalidates all buffer-cache-entries in that case. This
1278  * is a relatively slow routine, so we have to try to minimize using
1279  * it. Thus it is called only upon a 'mount' or 'open'. This
1280  * is the best way of combining speed and utility, I think.
1281  * People changing diskettes in the middle of an operation deserve
1282  * to lose :-)
1283  */
1284 int check_disk_change(struct block_device *bdev)
1285 {
1286         struct gendisk *disk = bdev->bd_disk;
1287         const struct block_device_operations *bdops = disk->fops;
1288
1289         if (!bdops->media_changed)
1290                 return 0;
1291         if (!bdops->media_changed(bdev->bd_disk))
1292                 return 0;
1293
1294         flush_disk(bdev);
1295         if (bdops->revalidate_disk)
1296                 bdops->revalidate_disk(bdev->bd_disk);
1297         return 1;
1298 }
1299
1300 EXPORT_SYMBOL(check_disk_change);
1301
1302 void bd_set_size(struct block_device *bdev, loff_t size)
1303 {
1304         unsigned bsize = bdev_logical_block_size(bdev);
1305
1306         bdev->bd_inode->i_size = size;
1307         while (bsize < PAGE_CACHE_SIZE) {
1308                 if (size & bsize)
1309                         break;
1310                 bsize <<= 1;
1311         }
1312         bdev->bd_block_size = bsize;
1313         bdev->bd_inode->i_blkbits = blksize_bits(bsize);
1314 }
1315 EXPORT_SYMBOL(bd_set_size);
1316
1317 static int __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part);
1318
1319 /*
1320  * bd_mutex locking:
1321  *
1322  *  mutex_lock(part->bd_mutex)
1323  *    mutex_lock_nested(whole->bd_mutex, 1)
1324  */
1325
1326 static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
1327 {
1328         struct gendisk *disk;
1329         int ret;
1330         int partno;
1331         int perm = 0;
1332
1333         if (mode & FMODE_READ)
1334                 perm |= MAY_READ;
1335         if (mode & FMODE_WRITE)
1336                 perm |= MAY_WRITE;
1337         /*
1338          * hooks: /n/, see "layering violations".
1339          */
1340         ret = devcgroup_inode_permission(bdev->bd_inode, perm);
1341         if (ret != 0) {
1342                 bdput(bdev);
1343                 return ret;
1344         }
1345
1346         lock_kernel();
1347  restart:
1348
1349         ret = -ENXIO;
1350         disk = get_gendisk(bdev->bd_dev, &partno);
1351         if (!disk)
1352                 goto out_unlock_kernel;
1353
1354         mutex_lock_nested(&bdev->bd_mutex, for_part);
1355         if (!bdev->bd_openers) {
1356                 bdev->bd_disk = disk;
1357                 bdev->bd_contains = bdev;
1358                 if (!partno) {
1359                         struct backing_dev_info *bdi;
1360
1361                         ret = -ENXIO;
1362                         bdev->bd_part = disk_get_part(disk, partno);
1363                         if (!bdev->bd_part)
1364                                 goto out_clear;
1365
1366                         if (disk->fops->open) {
1367                                 ret = disk->fops->open(bdev, mode);
1368                                 if (ret == -ERESTARTSYS) {
1369                                         /* Lost a race with 'disk' being
1370                                          * deleted, try again.
1371                                          * See md.c
1372                                          */
1373                                         disk_put_part(bdev->bd_part);
1374                                         bdev->bd_part = NULL;
1375                                         module_put(disk->fops->owner);
1376                                         put_disk(disk);
1377                                         bdev->bd_disk = NULL;
1378                                         mutex_unlock(&bdev->bd_mutex);
1379                                         goto restart;
1380                                 }
1381                                 if (ret)
1382                                         goto out_clear;
1383                         }
1384                         if (!bdev->bd_openers) {
1385                                 bd_set_size(bdev,(loff_t)get_capacity(disk)<<9);
1386                                 bdi = blk_get_backing_dev_info(bdev);
1387                                 if (bdi == NULL)
1388                                         bdi = &default_backing_dev_info;
1389                                 bdev->bd_inode->i_data.backing_dev_info = bdi;
1390                         }
1391                         if (bdev->bd_invalidated)
1392                                 rescan_partitions(disk, bdev);
1393                 } else {
1394                         struct block_device *whole;
1395                         whole = bdget_disk(disk, 0);
1396                         ret = -ENOMEM;
1397                         if (!whole)
1398                                 goto out_clear;
1399                         BUG_ON(for_part);
1400                         ret = __blkdev_get(whole, mode, 1);
1401                         if (ret)
1402                                 goto out_clear;
1403                         bdev->bd_contains = whole;
1404                         bdev->bd_inode->i_data.backing_dev_info =
1405                            whole->bd_inode->i_data.backing_dev_info;
1406                         bdev->bd_part = disk_get_part(disk, partno);
1407                         if (!(disk->flags & GENHD_FL_UP) ||
1408                             !bdev->bd_part || !bdev->bd_part->nr_sects) {
1409                                 ret = -ENXIO;
1410                                 goto out_clear;
1411                         }
1412                         bd_set_size(bdev, (loff_t)bdev->bd_part->nr_sects << 9);
1413                 }
1414         } else {
1415                 module_put(disk->fops->owner);
1416                 put_disk(disk);
1417                 disk = NULL;
1418                 if (bdev->bd_contains == bdev) {
1419                         if (bdev->bd_disk->fops->open) {
1420                                 ret = bdev->bd_disk->fops->open(bdev, mode);
1421                                 if (ret)
1422                                         goto out_unlock_bdev;
1423                         }
1424                         if (bdev->bd_invalidated)
1425                                 rescan_partitions(bdev->bd_disk, bdev);
1426                 }
1427         }
1428         bdev->bd_openers++;
1429         if (for_part)
1430                 bdev->bd_part_count++;
1431         mutex_unlock(&bdev->bd_mutex);
1432         unlock_kernel();
1433         return 0;
1434
1435  out_clear:
1436         disk_put_part(bdev->bd_part);
1437         bdev->bd_disk = NULL;
1438         bdev->bd_part = NULL;
1439         bdev->bd_inode->i_data.backing_dev_info = &default_backing_dev_info;
1440         if (bdev != bdev->bd_contains)
1441                 __blkdev_put(bdev->bd_contains, mode, 1);
1442         bdev->bd_contains = NULL;
1443  out_unlock_bdev:
1444         mutex_unlock(&bdev->bd_mutex);
1445  out_unlock_kernel:
1446         unlock_kernel();
1447
1448         if (disk)
1449                 module_put(disk->fops->owner);
1450         put_disk(disk);
1451         bdput(bdev);
1452
1453         return ret;
1454 }
1455
1456 int blkdev_get(struct block_device *bdev, fmode_t mode)
1457 {
1458         return __blkdev_get(bdev, mode, 0);
1459 }
1460 EXPORT_SYMBOL(blkdev_get);
1461
1462 static int blkdev_open(struct inode * inode, struct file * filp)
1463 {
1464         struct block_device *whole = NULL;
1465         struct block_device *bdev;
1466         int res;
1467
1468         /*
1469          * Preserve backwards compatibility and allow large file access
1470          * even if userspace doesn't ask for it explicitly. Some mkfs
1471          * binary needs it. We might want to drop this workaround
1472          * during an unstable branch.
1473          */
1474         filp->f_flags |= O_LARGEFILE;
1475
1476         if (filp->f_flags & O_NDELAY)
1477                 filp->f_mode |= FMODE_NDELAY;
1478         if (filp->f_flags & O_EXCL)
1479                 filp->f_mode |= FMODE_EXCL;
1480         if ((filp->f_flags & O_ACCMODE) == 3)
1481                 filp->f_mode |= FMODE_WRITE_IOCTL;
1482
1483         bdev = bd_acquire(inode);
1484         if (bdev == NULL)
1485                 return -ENOMEM;
1486
1487         if (filp->f_mode & FMODE_EXCL) {
1488                 whole = bd_start_claiming(bdev, filp);
1489                 if (IS_ERR(whole)) {
1490                         bdput(bdev);
1491                         return PTR_ERR(whole);
1492                 }
1493         }
1494
1495         filp->f_mapping = bdev->bd_inode->i_mapping;
1496
1497         res = blkdev_get(bdev, filp->f_mode);
1498
1499         if (whole) {
1500                 if (res == 0)
1501                         bd_finish_claiming(bdev, whole, filp);
1502                 else
1503                         bd_abort_claiming(whole, filp);
1504         }
1505
1506         return res;
1507 }
1508
1509 static int __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part)
1510 {
1511         int ret = 0;
1512         struct gendisk *disk = bdev->bd_disk;
1513         struct block_device *victim = NULL;
1514
1515         mutex_lock_nested(&bdev->bd_mutex, for_part);
1516         lock_kernel();
1517         if (for_part)
1518                 bdev->bd_part_count--;
1519
1520         if (!--bdev->bd_openers) {
1521                 sync_blockdev(bdev);
1522                 kill_bdev(bdev);
1523         }
1524         if (bdev->bd_contains == bdev) {
1525                 if (disk->fops->release)
1526                         ret = disk->fops->release(disk, mode);
1527         }
1528         if (!bdev->bd_openers) {
1529                 struct module *owner = disk->fops->owner;
1530
1531                 put_disk(disk);
1532                 module_put(owner);
1533                 disk_put_part(bdev->bd_part);
1534                 bdev->bd_part = NULL;
1535                 bdev->bd_disk = NULL;
1536                 bdev->bd_inode->i_data.backing_dev_info = &default_backing_dev_info;
1537                 if (bdev != bdev->bd_contains)
1538                         victim = bdev->bd_contains;
1539                 bdev->bd_contains = NULL;
1540         }
1541         unlock_kernel();
1542         mutex_unlock(&bdev->bd_mutex);
1543         bdput(bdev);
1544         if (victim)
1545                 __blkdev_put(victim, mode, 1);
1546         return ret;
1547 }
1548
1549 int blkdev_put(struct block_device *bdev, fmode_t mode)
1550 {
1551         return __blkdev_put(bdev, mode, 0);
1552 }
1553 EXPORT_SYMBOL(blkdev_put);
1554
1555 static int blkdev_close(struct inode * inode, struct file * filp)
1556 {
1557         struct block_device *bdev = I_BDEV(filp->f_mapping->host);
1558         if (bdev->bd_holder == filp)
1559                 bd_release(bdev);
1560         return blkdev_put(bdev, filp->f_mode);
1561 }
1562
1563 static long block_ioctl(struct file *file, unsigned cmd, unsigned long arg)
1564 {
1565         struct block_device *bdev = I_BDEV(file->f_mapping->host);
1566         fmode_t mode = file->f_mode;
1567
1568         /*
1569          * O_NDELAY can be altered using fcntl(.., F_SETFL, ..), so we have
1570          * to updated it before every ioctl.
1571          */
1572         if (file->f_flags & O_NDELAY)
1573                 mode |= FMODE_NDELAY;
1574         else
1575                 mode &= ~FMODE_NDELAY;
1576
1577         return blkdev_ioctl(bdev, mode, cmd, arg);
1578 }
1579
1580 /*
1581  * Write data to the block device.  Only intended for the block device itself
1582  * and the raw driver which basically is a fake block device.
1583  *
1584  * Does not take i_mutex for the write and thus is not for general purpose
1585  * use.
1586  */
1587 ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov,
1588                          unsigned long nr_segs, loff_t pos)
1589 {
1590         struct file *file = iocb->ki_filp;
1591         ssize_t ret;
1592
1593         BUG_ON(iocb->ki_pos != pos);
1594
1595         ret = __generic_file_aio_write(iocb, iov, nr_segs, &iocb->ki_pos);
1596         if (ret > 0 || ret == -EIOCBQUEUED) {
1597                 ssize_t err;
1598
1599                 err = generic_write_sync(file, pos, ret);
1600                 if (err < 0 && ret > 0)
1601                         ret = err;
1602         }
1603         return ret;
1604 }
1605 EXPORT_SYMBOL_GPL(blkdev_aio_write);
1606
1607 /*
1608  * Try to release a page associated with block device when the system
1609  * is under memory pressure.
1610  */
1611 static int blkdev_releasepage(struct page *page, gfp_t wait)
1612 {
1613         struct super_block *super = BDEV_I(page->mapping->host)->bdev.bd_super;
1614
1615         if (super && super->s_op->bdev_try_to_free_page)
1616                 return super->s_op->bdev_try_to_free_page(super, page, wait);
1617
1618         return try_to_free_buffers(page);
1619 }
1620
1621 static const struct address_space_operations def_blk_aops = {
1622         .readpage       = blkdev_readpage,
1623         .writepage      = blkdev_writepage,
1624         .sync_page      = block_sync_page,
1625         .write_begin    = blkdev_write_begin,
1626         .write_end      = blkdev_write_end,
1627         .writepages     = generic_writepages,
1628         .releasepage    = blkdev_releasepage,
1629         .direct_IO      = blkdev_direct_IO,
1630 };
1631
1632 const struct file_operations def_blk_fops = {
1633         .open           = blkdev_open,
1634         .release        = blkdev_close,
1635         .llseek         = block_llseek,
1636         .read           = do_sync_read,
1637         .write          = do_sync_write,
1638         .aio_read       = generic_file_aio_read,
1639         .aio_write      = blkdev_aio_write,
1640         .mmap           = generic_file_mmap,
1641         .fsync          = blkdev_fsync,
1642         .unlocked_ioctl = block_ioctl,
1643 #ifdef CONFIG_COMPAT
1644         .compat_ioctl   = compat_blkdev_ioctl,
1645 #endif
1646         .splice_read    = generic_file_splice_read,
1647         .splice_write   = generic_file_splice_write,
1648 };
1649
1650 int ioctl_by_bdev(struct block_device *bdev, unsigned cmd, unsigned long arg)
1651 {
1652         int res;
1653         mm_segment_t old_fs = get_fs();
1654         set_fs(KERNEL_DS);
1655         res = blkdev_ioctl(bdev, 0, cmd, arg);
1656         set_fs(old_fs);
1657         return res;
1658 }
1659
1660 EXPORT_SYMBOL(ioctl_by_bdev);
1661
1662 /**
1663  * lookup_bdev  - lookup a struct block_device by name
1664  * @pathname:   special file representing the block device
1665  *
1666  * Get a reference to the blockdevice at @pathname in the current
1667  * namespace if possible and return it.  Return ERR_PTR(error)
1668  * otherwise.
1669  */
1670 struct block_device *lookup_bdev(const char *pathname)
1671 {
1672         struct block_device *bdev;
1673         struct inode *inode;
1674         struct path path;
1675         int error;
1676
1677         if (!pathname || !*pathname)
1678                 return ERR_PTR(-EINVAL);
1679
1680         error = kern_path(pathname, LOOKUP_FOLLOW, &path);
1681         if (error)
1682                 return ERR_PTR(error);
1683
1684         inode = path.dentry->d_inode;
1685         error = -ENOTBLK;
1686         if (!S_ISBLK(inode->i_mode))
1687                 goto fail;
1688         error = -EACCES;
1689         if (path.mnt->mnt_flags & MNT_NODEV)
1690                 goto fail;
1691         error = -ENOMEM;
1692         bdev = bd_acquire(inode);
1693         if (!bdev)
1694                 goto fail;
1695 out:
1696         path_put(&path);
1697         return bdev;
1698 fail:
1699         bdev = ERR_PTR(error);
1700         goto out;
1701 }
1702 EXPORT_SYMBOL(lookup_bdev);
1703
1704 /**
1705  * open_bdev_exclusive  -  open a block device by name and set it up for use
1706  *
1707  * @path:       special file representing the block device
1708  * @mode:       FMODE_... combination to pass be used
1709  * @holder:     owner for exclusion
1710  *
1711  * Open the blockdevice described by the special file at @path, claim it
1712  * for the @holder.
1713  */
1714 struct block_device *open_bdev_exclusive(const char *path, fmode_t mode, void *holder)
1715 {
1716         struct block_device *bdev, *whole;
1717         int error;
1718
1719         bdev = lookup_bdev(path);
1720         if (IS_ERR(bdev))
1721                 return bdev;
1722
1723         whole = bd_start_claiming(bdev, holder);
1724         if (IS_ERR(whole)) {
1725                 bdput(bdev);
1726                 return whole;
1727         }
1728
1729         error = blkdev_get(bdev, mode);
1730         if (error)
1731                 goto out_abort_claiming;
1732
1733         error = -EACCES;
1734         if ((mode & FMODE_WRITE) && bdev_read_only(bdev))
1735                 goto out_blkdev_put;
1736
1737         bd_finish_claiming(bdev, whole, holder);
1738         return bdev;
1739
1740 out_blkdev_put:
1741         blkdev_put(bdev, mode);
1742 out_abort_claiming:
1743         bd_abort_claiming(whole, holder);
1744         return ERR_PTR(error);
1745 }
1746
1747 EXPORT_SYMBOL(open_bdev_exclusive);
1748
1749 /**
1750  * close_bdev_exclusive  -  close a blockdevice opened by open_bdev_exclusive()
1751  *
1752  * @bdev:       blockdevice to close
1753  * @mode:       mode, must match that used to open.
1754  *
1755  * This is the counterpart to open_bdev_exclusive().
1756  */
1757 void close_bdev_exclusive(struct block_device *bdev, fmode_t mode)
1758 {
1759         bd_release(bdev);
1760         blkdev_put(bdev, mode);
1761 }
1762
1763 EXPORT_SYMBOL(close_bdev_exclusive);
1764
1765 int __invalidate_device(struct block_device *bdev)
1766 {
1767         struct super_block *sb = get_super(bdev);
1768         int res = 0;
1769
1770         if (sb) {
1771                 /*
1772                  * no need to lock the super, get_super holds the
1773                  * read mutex so the filesystem cannot go away
1774                  * under us (->put_super runs with the write lock
1775                  * hold).
1776                  */
1777                 shrink_dcache_sb(sb);
1778                 res = invalidate_inodes(sb);
1779                 drop_super(sb);
1780         }
1781         invalidate_bdev(bdev);
1782         return res;
1783 }
1784 EXPORT_SYMBOL(__invalidate_device);