1
2
3
4
5
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/device_cgroup.h>
15#include <linux/highmem.h>
16#include <linux/blkdev.h>
17#include <linux/backing-dev.h>
18#include <linux/module.h>
19#include <linux/blkpg.h>
20#include <linux/magic.h>
21#include <linux/buffer_head.h>
22#include <linux/swap.h>
23#include <linux/pagevec.h>
24#include <linux/writeback.h>
25#include <linux/mpage.h>
26#include <linux/mount.h>
27#include <linux/uio.h>
28#include <linux/namei.h>
29#include <linux/log2.h>
30#include <linux/cleancache.h>
31#include <linux/dax.h>
32#include <linux/badblocks.h>
33#include <asm/uaccess.h>
34#include "internal.h"
35
36struct bdev_inode {
37 struct block_device bdev;
38 struct inode vfs_inode;
39};
40
41static const struct address_space_operations def_blk_aops;
42
43static inline struct bdev_inode *BDEV_I(struct inode *inode)
44{
45 return container_of(inode, struct bdev_inode, vfs_inode);
46}
47
48struct block_device *I_BDEV(struct inode *inode)
49{
50 return &BDEV_I(inode)->bdev;
51}
52EXPORT_SYMBOL(I_BDEV);
53
54void __vfs_msg(struct super_block *sb, const char *prefix, const char *fmt, ...)
55{
56 struct va_format vaf;
57 va_list args;
58
59 va_start(args, fmt);
60 vaf.fmt = fmt;
61 vaf.va = &args;
62 printk_ratelimited("%sVFS (%s): %pV\n", prefix, sb->s_id, &vaf);
63 va_end(args);
64}
65
66static void bdev_write_inode(struct block_device *bdev)
67{
68 struct inode *inode = bdev->bd_inode;
69 int ret;
70
71 spin_lock(&inode->i_lock);
72 while (inode->i_state & I_DIRTY) {
73 spin_unlock(&inode->i_lock);
74 ret = write_inode_now(inode, true);
75 if (ret) {
76 char name[BDEVNAME_SIZE];
77 pr_warn_ratelimited("VFS: Dirty inode writeback failed "
78 "for block device %s (err=%d).\n",
79 bdevname(bdev, name), ret);
80 }
81 spin_lock(&inode->i_lock);
82 }
83 spin_unlock(&inode->i_lock);
84}
85
86
87void kill_bdev(struct block_device *bdev)
88{
89 struct address_space *mapping = bdev->bd_inode->i_mapping;
90
91 if (mapping->nrpages == 0 && mapping->nrexceptional == 0)
92 return;
93
94 invalidate_bh_lrus();
95 truncate_inode_pages(mapping, 0);
96}
97EXPORT_SYMBOL(kill_bdev);
98
99
100void invalidate_bdev(struct block_device *bdev)
101{
102 struct address_space *mapping = bdev->bd_inode->i_mapping;
103
104 if (mapping->nrpages == 0)
105 return;
106
107 invalidate_bh_lrus();
108 lru_add_drain_all();
109 invalidate_mapping_pages(mapping, 0, -1);
110
111
112
113 cleancache_invalidate_inode(mapping);
114}
115EXPORT_SYMBOL(invalidate_bdev);
116
117int set_blocksize(struct block_device *bdev, int size)
118{
119
120 if (size > PAGE_SIZE || size < 512 || !is_power_of_2(size))
121 return -EINVAL;
122
123
124 if (size < bdev_logical_block_size(bdev))
125 return -EINVAL;
126
127
128 if (bdev->bd_block_size != size) {
129 sync_blockdev(bdev);
130 bdev->bd_block_size = size;
131 bdev->bd_inode->i_blkbits = blksize_bits(size);
132 kill_bdev(bdev);
133 }
134 return 0;
135}
136
137EXPORT_SYMBOL(set_blocksize);
138
139int sb_set_blocksize(struct super_block *sb, int size)
140{
141 if (set_blocksize(sb->s_bdev, size))
142 return 0;
143
144
145 sb->s_blocksize = size;
146 sb->s_blocksize_bits = blksize_bits(size);
147 return sb->s_blocksize;
148}
149
150EXPORT_SYMBOL(sb_set_blocksize);
151
152int sb_min_blocksize(struct super_block *sb, int size)
153{
154 int minsize = bdev_logical_block_size(sb->s_bdev);
155 if (size < minsize)
156 size = minsize;
157 return sb_set_blocksize(sb, size);
158}
159
160EXPORT_SYMBOL(sb_min_blocksize);
161
162static int
163blkdev_get_block(struct inode *inode, sector_t iblock,
164 struct buffer_head *bh, int create)
165{
166 bh->b_bdev = I_BDEV(inode);
167 bh->b_blocknr = iblock;
168 set_buffer_mapped(bh);
169 return 0;
170}
171
172static struct inode *bdev_file_inode(struct file *file)
173{
174 return file->f_mapping->host;
175}
176
177static ssize_t
178blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
179{
180 struct file *file = iocb->ki_filp;
181 struct inode *inode = bdev_file_inode(file);
182
183 if (IS_DAX(inode))
184 return dax_do_io(iocb, inode, iter, blkdev_get_block,
185 NULL, DIO_SKIP_DIO_COUNT);
186 return __blockdev_direct_IO(iocb, inode, I_BDEV(inode), iter,
187 blkdev_get_block, NULL, NULL,
188 DIO_SKIP_DIO_COUNT);
189}
190
191int __sync_blockdev(struct block_device *bdev, int wait)
192{
193 if (!bdev)
194 return 0;
195 if (!wait)
196 return filemap_flush(bdev->bd_inode->i_mapping);
197 return filemap_write_and_wait(bdev->bd_inode->i_mapping);
198}
199
200
201
202
203
204int sync_blockdev(struct block_device *bdev)
205{
206 return __sync_blockdev(bdev, 1);
207}
208EXPORT_SYMBOL(sync_blockdev);
209
210
211
212
213
214
215int fsync_bdev(struct block_device *bdev)
216{
217 struct super_block *sb = get_super(bdev);
218 if (sb) {
219 int res = sync_filesystem(sb);
220 drop_super(sb);
221 return res;
222 }
223 return sync_blockdev(bdev);
224}
225EXPORT_SYMBOL(fsync_bdev);
226
227
228
229
230
231
232
233
234
235
236
237
238
239struct super_block *freeze_bdev(struct block_device *bdev)
240{
241 struct super_block *sb;
242 int error = 0;
243
244 mutex_lock(&bdev->bd_fsfreeze_mutex);
245 if (++bdev->bd_fsfreeze_count > 1) {
246
247
248
249
250
251 sb = get_super(bdev);
252 drop_super(sb);
253 mutex_unlock(&bdev->bd_fsfreeze_mutex);
254 return sb;
255 }
256
257 sb = get_active_super(bdev);
258 if (!sb)
259 goto out;
260 if (sb->s_op->freeze_super)
261 error = sb->s_op->freeze_super(sb);
262 else
263 error = freeze_super(sb);
264 if (error) {
265 deactivate_super(sb);
266 bdev->bd_fsfreeze_count--;
267 mutex_unlock(&bdev->bd_fsfreeze_mutex);
268 return ERR_PTR(error);
269 }
270 deactivate_super(sb);
271 out:
272 sync_blockdev(bdev);
273 mutex_unlock(&bdev->bd_fsfreeze_mutex);
274 return sb;
275}
276EXPORT_SYMBOL(freeze_bdev);
277
278
279
280
281
282
283
284
285int thaw_bdev(struct block_device *bdev, struct super_block *sb)
286{
287 int error = -EINVAL;
288
289 mutex_lock(&bdev->bd_fsfreeze_mutex);
290 if (!bdev->bd_fsfreeze_count)
291 goto out;
292
293 error = 0;
294 if (--bdev->bd_fsfreeze_count > 0)
295 goto out;
296
297 if (!sb)
298 goto out;
299
300 if (sb->s_op->thaw_super)
301 error = sb->s_op->thaw_super(sb);
302 else
303 error = thaw_super(sb);
304 if (error) {
305 bdev->bd_fsfreeze_count++;
306 mutex_unlock(&bdev->bd_fsfreeze_mutex);
307 return error;
308 }
309out:
310 mutex_unlock(&bdev->bd_fsfreeze_mutex);
311 return 0;
312}
313EXPORT_SYMBOL(thaw_bdev);
314
315static int blkdev_writepage(struct page *page, struct writeback_control *wbc)
316{
317 return block_write_full_page(page, blkdev_get_block, wbc);
318}
319
320static int blkdev_readpage(struct file * file, struct page * page)
321{
322 return block_read_full_page(page, blkdev_get_block);
323}
324
325static int blkdev_readpages(struct file *file, struct address_space *mapping,
326 struct list_head *pages, unsigned nr_pages)
327{
328 return mpage_readpages(mapping, pages, nr_pages, blkdev_get_block);
329}
330
331static int blkdev_write_begin(struct file *file, struct address_space *mapping,
332 loff_t pos, unsigned len, unsigned flags,
333 struct page **pagep, void **fsdata)
334{
335 return block_write_begin(mapping, pos, len, flags, pagep,
336 blkdev_get_block);
337}
338
339static int blkdev_write_end(struct file *file, struct address_space *mapping,
340 loff_t pos, unsigned len, unsigned copied,
341 struct page *page, void *fsdata)
342{
343 int ret;
344 ret = block_write_end(file, mapping, pos, len, copied, page, fsdata);
345
346 unlock_page(page);
347 put_page(page);
348
349 return ret;
350}
351
352
353
354
355
356
357static loff_t block_llseek(struct file *file, loff_t offset, int whence)
358{
359 struct inode *bd_inode = bdev_file_inode(file);
360 loff_t retval;
361
362 inode_lock(bd_inode);
363 retval = fixed_size_llseek(file, offset, whence, i_size_read(bd_inode));
364 inode_unlock(bd_inode);
365 return retval;
366}
367
368int blkdev_fsync(struct file *filp, loff_t start, loff_t end, int datasync)
369{
370 struct inode *bd_inode = bdev_file_inode(filp);
371 struct block_device *bdev = I_BDEV(bd_inode);
372 int error;
373
374 error = filemap_write_and_wait_range(filp->f_mapping, start, end);
375 if (error)
376 return error;
377
378
379
380
381
382
383 error = blkdev_issue_flush(bdev, GFP_KERNEL, NULL);
384 if (error == -EOPNOTSUPP)
385 error = 0;
386
387 return error;
388}
389EXPORT_SYMBOL(blkdev_fsync);
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407int bdev_read_page(struct block_device *bdev, sector_t sector,
408 struct page *page)
409{
410 const struct block_device_operations *ops = bdev->bd_disk->fops;
411 int result = -EOPNOTSUPP;
412
413 if (!ops->rw_page || bdev_get_integrity(bdev))
414 return result;
415
416 result = blk_queue_enter(bdev->bd_queue, false);
417 if (result)
418 return result;
419 result = ops->rw_page(bdev, sector + get_start_sect(bdev), page, READ);
420 blk_queue_exit(bdev->bd_queue);
421 return result;
422}
423EXPORT_SYMBOL_GPL(bdev_read_page);
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444int bdev_write_page(struct block_device *bdev, sector_t sector,
445 struct page *page, struct writeback_control *wbc)
446{
447 int result;
448 int rw = (wbc->sync_mode == WB_SYNC_ALL) ? WRITE_SYNC : WRITE;
449 const struct block_device_operations *ops = bdev->bd_disk->fops;
450
451 if (!ops->rw_page || bdev_get_integrity(bdev))
452 return -EOPNOTSUPP;
453 result = blk_queue_enter(bdev->bd_queue, false);
454 if (result)
455 return result;
456
457 set_page_writeback(page);
458 result = ops->rw_page(bdev, sector + get_start_sect(bdev), page, rw);
459 if (result)
460 end_page_writeback(page);
461 else
462 unlock_page(page);
463 blk_queue_exit(bdev->bd_queue);
464 return result;
465}
466EXPORT_SYMBOL_GPL(bdev_write_page);
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482long bdev_direct_access(struct block_device *bdev, struct blk_dax_ctl *dax)
483{
484 sector_t sector = dax->sector;
485 long avail, size = dax->size;
486 const struct block_device_operations *ops = bdev->bd_disk->fops;
487
488
489
490
491
492 might_sleep();
493
494 if (size < 0)
495 return size;
496 if (!ops->direct_access)
497 return -EOPNOTSUPP;
498 if ((sector + DIV_ROUND_UP(size, 512)) >
499 part_nr_sects_read(bdev->bd_part))
500 return -ERANGE;
501 sector += get_start_sect(bdev);
502 if (sector % (PAGE_SIZE / 512))
503 return -EINVAL;
504 avail = ops->direct_access(bdev, sector, &dax->addr, &dax->pfn, size);
505 if (!avail)
506 return -ERANGE;
507 if (avail > 0 && avail & ~PAGE_MASK)
508 return -ENXIO;
509 return min(avail, size);
510}
511EXPORT_SYMBOL_GPL(bdev_direct_access);
512
513
514
515
516
517
518
519
520
521
522
523int bdev_dax_supported(struct super_block *sb, int blocksize)
524{
525 struct blk_dax_ctl dax = {
526 .sector = 0,
527 .size = PAGE_SIZE,
528 };
529 int err;
530
531 if (blocksize != PAGE_SIZE) {
532 vfs_msg(sb, KERN_ERR, "error: unsupported blocksize for dax");
533 return -EINVAL;
534 }
535
536 err = bdev_direct_access(sb->s_bdev, &dax);
537 if (err < 0) {
538 switch (err) {
539 case -EOPNOTSUPP:
540 vfs_msg(sb, KERN_ERR,
541 "error: device does not support dax");
542 break;
543 case -EINVAL:
544 vfs_msg(sb, KERN_ERR,
545 "error: unaligned partition for dax");
546 break;
547 default:
548 vfs_msg(sb, KERN_ERR,
549 "error: dax access failed (%d)", err);
550 }
551 return err;
552 }
553
554 return 0;
555}
556EXPORT_SYMBOL_GPL(bdev_dax_supported);
557
558
559
560
561
562bool bdev_dax_capable(struct block_device *bdev)
563{
564 struct blk_dax_ctl dax = {
565 .size = PAGE_SIZE,
566 };
567
568 if (!IS_ENABLED(CONFIG_FS_DAX))
569 return false;
570
571 dax.sector = 0;
572 if (bdev_direct_access(bdev, &dax) < 0)
573 return false;
574
575 dax.sector = bdev->bd_part->nr_sects - (PAGE_SIZE / 512);
576 if (bdev_direct_access(bdev, &dax) < 0)
577 return false;
578
579 return true;
580}
581
582
583
584
585
586static __cacheline_aligned_in_smp DEFINE_SPINLOCK(bdev_lock);
587static struct kmem_cache * bdev_cachep __read_mostly;
588
589static struct inode *bdev_alloc_inode(struct super_block *sb)
590{
591 struct bdev_inode *ei = kmem_cache_alloc(bdev_cachep, GFP_KERNEL);
592 if (!ei)
593 return NULL;
594 return &ei->vfs_inode;
595}
596
597static void bdev_i_callback(struct rcu_head *head)
598{
599 struct inode *inode = container_of(head, struct inode, i_rcu);
600 struct bdev_inode *bdi = BDEV_I(inode);
601
602 kmem_cache_free(bdev_cachep, bdi);
603}
604
605static void bdev_destroy_inode(struct inode *inode)
606{
607 call_rcu(&inode->i_rcu, bdev_i_callback);
608}
609
610static void init_once(void *foo)
611{
612 struct bdev_inode *ei = (struct bdev_inode *) foo;
613 struct block_device *bdev = &ei->bdev;
614
615 memset(bdev, 0, sizeof(*bdev));
616 mutex_init(&bdev->bd_mutex);
617 INIT_LIST_HEAD(&bdev->bd_inodes);
618 INIT_LIST_HEAD(&bdev->bd_list);
619#ifdef CONFIG_SYSFS
620 INIT_LIST_HEAD(&bdev->bd_holder_disks);
621#endif
622 inode_init_once(&ei->vfs_inode);
623
624 mutex_init(&bdev->bd_fsfreeze_mutex);
625}
626
627static inline void __bd_forget(struct inode *inode)
628{
629 list_del_init(&inode->i_devices);
630 inode->i_bdev = NULL;
631 inode->i_mapping = &inode->i_data;
632}
633
634static void bdev_evict_inode(struct inode *inode)
635{
636 struct block_device *bdev = &BDEV_I(inode)->bdev;
637 struct list_head *p;
638 truncate_inode_pages_final(&inode->i_data);
639 invalidate_inode_buffers(inode);
640 clear_inode(inode);
641 spin_lock(&bdev_lock);
642 while ( (p = bdev->bd_inodes.next) != &bdev->bd_inodes ) {
643 __bd_forget(list_entry(p, struct inode, i_devices));
644 }
645 list_del_init(&bdev->bd_list);
646 spin_unlock(&bdev_lock);
647}
648
649static const struct super_operations bdev_sops = {
650 .statfs = simple_statfs,
651 .alloc_inode = bdev_alloc_inode,
652 .destroy_inode = bdev_destroy_inode,
653 .drop_inode = generic_delete_inode,
654 .evict_inode = bdev_evict_inode,
655};
656
657static struct dentry *bd_mount(struct file_system_type *fs_type,
658 int flags, const char *dev_name, void *data)
659{
660 struct dentry *dent;
661 dent = mount_pseudo(fs_type, "bdev:", &bdev_sops, NULL, BDEVFS_MAGIC);
662 if (dent)
663 dent->d_sb->s_iflags |= SB_I_CGROUPWB;
664 return dent;
665}
666
667static struct file_system_type bd_type = {
668 .name = "bdev",
669 .mount = bd_mount,
670 .kill_sb = kill_anon_super,
671};
672
673struct super_block *blockdev_superblock __read_mostly;
674EXPORT_SYMBOL_GPL(blockdev_superblock);
675
676void __init bdev_cache_init(void)
677{
678 int err;
679 static struct vfsmount *bd_mnt;
680
681 bdev_cachep = kmem_cache_create("bdev_cache", sizeof(struct bdev_inode),
682 0, (SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT|
683 SLAB_MEM_SPREAD|SLAB_ACCOUNT|SLAB_PANIC),
684 init_once);
685 err = register_filesystem(&bd_type);
686 if (err)
687 panic("Cannot register bdev pseudo-fs");
688 bd_mnt = kern_mount(&bd_type);
689 if (IS_ERR(bd_mnt))
690 panic("Cannot create bdev pseudo-fs");
691 blockdev_superblock = bd_mnt->mnt_sb;
692}
693
694
695
696
697
698
699static inline unsigned long hash(dev_t dev)
700{
701 return MAJOR(dev)+MINOR(dev);
702}
703
704static int bdev_test(struct inode *inode, void *data)
705{
706 return BDEV_I(inode)->bdev.bd_dev == *(dev_t *)data;
707}
708
709static int bdev_set(struct inode *inode, void *data)
710{
711 BDEV_I(inode)->bdev.bd_dev = *(dev_t *)data;
712 return 0;
713}
714
715static LIST_HEAD(all_bdevs);
716
717struct block_device *bdget(dev_t dev)
718{
719 struct block_device *bdev;
720 struct inode *inode;
721
722 inode = iget5_locked(blockdev_superblock, hash(dev),
723 bdev_test, bdev_set, &dev);
724
725 if (!inode)
726 return NULL;
727
728 bdev = &BDEV_I(inode)->bdev;
729
730 if (inode->i_state & I_NEW) {
731 bdev->bd_contains = NULL;
732 bdev->bd_super = NULL;
733 bdev->bd_inode = inode;
734 bdev->bd_block_size = (1 << inode->i_blkbits);
735 bdev->bd_part_count = 0;
736 bdev->bd_invalidated = 0;
737 inode->i_mode = S_IFBLK;
738 inode->i_rdev = dev;
739 inode->i_bdev = bdev;
740 inode->i_data.a_ops = &def_blk_aops;
741 mapping_set_gfp_mask(&inode->i_data, GFP_USER);
742 spin_lock(&bdev_lock);
743 list_add(&bdev->bd_list, &all_bdevs);
744 spin_unlock(&bdev_lock);
745 unlock_new_inode(inode);
746 }
747 return bdev;
748}
749
750EXPORT_SYMBOL(bdget);
751
752
753
754
755
756struct block_device *bdgrab(struct block_device *bdev)
757{
758 ihold(bdev->bd_inode);
759 return bdev;
760}
761EXPORT_SYMBOL(bdgrab);
762
763long nr_blockdev_pages(void)
764{
765 struct block_device *bdev;
766 long ret = 0;
767 spin_lock(&bdev_lock);
768 list_for_each_entry(bdev, &all_bdevs, bd_list) {
769 ret += bdev->bd_inode->i_mapping->nrpages;
770 }
771 spin_unlock(&bdev_lock);
772 return ret;
773}
774
775void bdput(struct block_device *bdev)
776{
777 iput(bdev->bd_inode);
778}
779
780EXPORT_SYMBOL(bdput);
781
782static struct block_device *bd_acquire(struct inode *inode)
783{
784 struct block_device *bdev;
785
786 spin_lock(&bdev_lock);
787 bdev = inode->i_bdev;
788 if (bdev) {
789 bdgrab(bdev);
790 spin_unlock(&bdev_lock);
791 return bdev;
792 }
793 spin_unlock(&bdev_lock);
794
795 bdev = bdget(inode->i_rdev);
796 if (bdev) {
797 spin_lock(&bdev_lock);
798 if (!inode->i_bdev) {
799
800
801
802
803
804
805 bdgrab(bdev);
806 inode->i_bdev = bdev;
807 inode->i_mapping = bdev->bd_inode->i_mapping;
808 list_add(&inode->i_devices, &bdev->bd_inodes);
809 }
810 spin_unlock(&bdev_lock);
811 }
812 return bdev;
813}
814
815
816
817void bd_forget(struct inode *inode)
818{
819 struct block_device *bdev = NULL;
820
821 spin_lock(&bdev_lock);
822 if (!sb_is_blkdev_sb(inode->i_sb))
823 bdev = inode->i_bdev;
824 __bd_forget(inode);
825 spin_unlock(&bdev_lock);
826
827 if (bdev)
828 bdput(bdev);
829}
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845static bool bd_may_claim(struct block_device *bdev, struct block_device *whole,
846 void *holder)
847{
848 if (bdev->bd_holder == holder)
849 return true;
850 else if (bdev->bd_holder != NULL)
851 return false;
852 else if (bdev->bd_contains == bdev)
853 return true;
854
855 else if (whole->bd_holder == bd_may_claim)
856 return true;
857 else if (whole->bd_holder != NULL)
858 return false;
859 else
860 return true;
861}
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881static int bd_prepare_to_claim(struct block_device *bdev,
882 struct block_device *whole, void *holder)
883{
884retry:
885
886 if (!bd_may_claim(bdev, whole, holder))
887 return -EBUSY;
888
889
890 if (whole->bd_claiming) {
891 wait_queue_head_t *wq = bit_waitqueue(&whole->bd_claiming, 0);
892 DEFINE_WAIT(wait);
893
894 prepare_to_wait(wq, &wait, TASK_UNINTERRUPTIBLE);
895 spin_unlock(&bdev_lock);
896 schedule();
897 finish_wait(wq, &wait);
898 spin_lock(&bdev_lock);
899 goto retry;
900 }
901
902
903 return 0;
904}
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929static struct block_device *bd_start_claiming(struct block_device *bdev,
930 void *holder)
931{
932 struct gendisk *disk;
933 struct block_device *whole;
934 int partno, err;
935
936 might_sleep();
937
938
939
940
941
942 disk = get_gendisk(bdev->bd_dev, &partno);
943 if (!disk)
944 return ERR_PTR(-ENXIO);
945
946
947
948
949
950
951
952
953
954 if (partno)
955 whole = bdget_disk(disk, 0);
956 else
957 whole = bdgrab(bdev);
958
959 module_put(disk->fops->owner);
960 put_disk(disk);
961 if (!whole)
962 return ERR_PTR(-ENOMEM);
963
964
965 spin_lock(&bdev_lock);
966
967 err = bd_prepare_to_claim(bdev, whole, holder);
968 if (err == 0) {
969 whole->bd_claiming = holder;
970 spin_unlock(&bdev_lock);
971 return whole;
972 } else {
973 spin_unlock(&bdev_lock);
974 bdput(whole);
975 return ERR_PTR(err);
976 }
977}
978
979#ifdef CONFIG_SYSFS
980struct bd_holder_disk {
981 struct list_head list;
982 struct gendisk *disk;
983 int refcnt;
984};
985
986static struct bd_holder_disk *bd_find_holder_disk(struct block_device *bdev,
987 struct gendisk *disk)
988{
989 struct bd_holder_disk *holder;
990
991 list_for_each_entry(holder, &bdev->bd_holder_disks, list)
992 if (holder->disk == disk)
993 return holder;
994 return NULL;
995}
996
997static int add_symlink(struct kobject *from, struct kobject *to)
998{
999 return sysfs_create_link(from, to, kobject_name(to));
1000}
1001
1002static void del_symlink(struct kobject *from, struct kobject *to)
1003{
1004 sysfs_remove_link(from, kobject_name(to));
1005}
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk)
1036{
1037 struct bd_holder_disk *holder;
1038 int ret = 0;
1039
1040 mutex_lock(&bdev->bd_mutex);
1041
1042 WARN_ON_ONCE(!bdev->bd_holder);
1043
1044
1045 if (WARN_ON(!disk->slave_dir || !bdev->bd_part->holder_dir))
1046 goto out_unlock;
1047
1048 holder = bd_find_holder_disk(bdev, disk);
1049 if (holder) {
1050 holder->refcnt++;
1051 goto out_unlock;
1052 }
1053
1054 holder = kzalloc(sizeof(*holder), GFP_KERNEL);
1055 if (!holder) {
1056 ret = -ENOMEM;
1057 goto out_unlock;
1058 }
1059
1060 INIT_LIST_HEAD(&holder->list);
1061 holder->disk = disk;
1062 holder->refcnt = 1;
1063
1064 ret = add_symlink(disk->slave_dir, &part_to_dev(bdev->bd_part)->kobj);
1065 if (ret)
1066 goto out_free;
1067
1068 ret = add_symlink(bdev->bd_part->holder_dir, &disk_to_dev(disk)->kobj);
1069 if (ret)
1070 goto out_del;
1071
1072
1073
1074
1075 kobject_get(bdev->bd_part->holder_dir);
1076
1077 list_add(&holder->list, &bdev->bd_holder_disks);
1078 goto out_unlock;
1079
1080out_del:
1081 del_symlink(disk->slave_dir, &part_to_dev(bdev->bd_part)->kobj);
1082out_free:
1083 kfree(holder);
1084out_unlock:
1085 mutex_unlock(&bdev->bd_mutex);
1086 return ret;
1087}
1088EXPORT_SYMBOL_GPL(bd_link_disk_holder);
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100void bd_unlink_disk_holder(struct block_device *bdev, struct gendisk *disk)
1101{
1102 struct bd_holder_disk *holder;
1103
1104 mutex_lock(&bdev->bd_mutex);
1105
1106 holder = bd_find_holder_disk(bdev, disk);
1107
1108 if (!WARN_ON_ONCE(holder == NULL) && !--holder->refcnt) {
1109 del_symlink(disk->slave_dir, &part_to_dev(bdev->bd_part)->kobj);
1110 del_symlink(bdev->bd_part->holder_dir,
1111 &disk_to_dev(disk)->kobj);
1112 kobject_put(bdev->bd_part->holder_dir);
1113 list_del_init(&holder->list);
1114 kfree(holder);
1115 }
1116
1117 mutex_unlock(&bdev->bd_mutex);
1118}
1119EXPORT_SYMBOL_GPL(bd_unlink_disk_holder);
1120#endif
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132static void flush_disk(struct block_device *bdev, bool kill_dirty)
1133{
1134 if (__invalidate_device(bdev, kill_dirty)) {
1135 printk(KERN_WARNING "VFS: busy inodes on changed media or "
1136 "resized disk %s\n",
1137 bdev->bd_disk ? bdev->bd_disk->disk_name : "");
1138 }
1139
1140 if (!bdev->bd_disk)
1141 return;
1142 if (disk_part_scan_enabled(bdev->bd_disk))
1143 bdev->bd_invalidated = 1;
1144}
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154void check_disk_size_change(struct gendisk *disk, struct block_device *bdev)
1155{
1156 loff_t disk_size, bdev_size;
1157
1158 disk_size = (loff_t)get_capacity(disk) << 9;
1159 bdev_size = i_size_read(bdev->bd_inode);
1160 if (disk_size != bdev_size) {
1161 printk(KERN_INFO
1162 "%s: detected capacity change from %lld to %lld\n",
1163 disk->disk_name, bdev_size, disk_size);
1164 i_size_write(bdev->bd_inode, disk_size);
1165 flush_disk(bdev, false);
1166 }
1167}
1168EXPORT_SYMBOL(check_disk_size_change);
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178int revalidate_disk(struct gendisk *disk)
1179{
1180 struct block_device *bdev;
1181 int ret = 0;
1182
1183 if (disk->fops->revalidate_disk)
1184 ret = disk->fops->revalidate_disk(disk);
1185 blk_integrity_revalidate(disk);
1186 bdev = bdget_disk(disk, 0);
1187 if (!bdev)
1188 return ret;
1189
1190 mutex_lock(&bdev->bd_mutex);
1191 check_disk_size_change(disk, bdev);
1192 bdev->bd_invalidated = 0;
1193 mutex_unlock(&bdev->bd_mutex);
1194 bdput(bdev);
1195 return ret;
1196}
1197EXPORT_SYMBOL(revalidate_disk);
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208int check_disk_change(struct block_device *bdev)
1209{
1210 struct gendisk *disk = bdev->bd_disk;
1211 const struct block_device_operations *bdops = disk->fops;
1212 unsigned int events;
1213
1214 events = disk_clear_events(disk, DISK_EVENT_MEDIA_CHANGE |
1215 DISK_EVENT_EJECT_REQUEST);
1216 if (!(events & DISK_EVENT_MEDIA_CHANGE))
1217 return 0;
1218
1219 flush_disk(bdev, true);
1220 if (bdops->revalidate_disk)
1221 bdops->revalidate_disk(bdev->bd_disk);
1222 return 1;
1223}
1224
1225EXPORT_SYMBOL(check_disk_change);
1226
1227void bd_set_size(struct block_device *bdev, loff_t size)
1228{
1229 unsigned bsize = bdev_logical_block_size(bdev);
1230
1231 inode_lock(bdev->bd_inode);
1232 i_size_write(bdev->bd_inode, size);
1233 inode_unlock(bdev->bd_inode);
1234 while (bsize < PAGE_SIZE) {
1235 if (size & bsize)
1236 break;
1237 bsize <<= 1;
1238 }
1239 bdev->bd_block_size = bsize;
1240 bdev->bd_inode->i_blkbits = blksize_bits(bsize);
1241}
1242EXPORT_SYMBOL(bd_set_size);
1243
1244static void __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part);
1245
1246
1247
1248
1249
1250
1251
1252
1253static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
1254{
1255 struct gendisk *disk;
1256 struct module *owner;
1257 int ret;
1258 int partno;
1259 int perm = 0;
1260
1261 if (mode & FMODE_READ)
1262 perm |= MAY_READ;
1263 if (mode & FMODE_WRITE)
1264 perm |= MAY_WRITE;
1265
1266
1267
1268 if (!for_part) {
1269 ret = devcgroup_inode_permission(bdev->bd_inode, perm);
1270 if (ret != 0) {
1271 bdput(bdev);
1272 return ret;
1273 }
1274 }
1275
1276 restart:
1277
1278 ret = -ENXIO;
1279 disk = get_gendisk(bdev->bd_dev, &partno);
1280 if (!disk)
1281 goto out;
1282 owner = disk->fops->owner;
1283
1284 disk_block_events(disk);
1285 mutex_lock_nested(&bdev->bd_mutex, for_part);
1286 if (!bdev->bd_openers) {
1287 bdev->bd_disk = disk;
1288 bdev->bd_queue = disk->queue;
1289 bdev->bd_contains = bdev;
1290 if (IS_ENABLED(CONFIG_BLK_DEV_DAX) && disk->fops->direct_access)
1291 bdev->bd_inode->i_flags = S_DAX;
1292 else
1293 bdev->bd_inode->i_flags = 0;
1294
1295 if (!partno) {
1296 ret = -ENXIO;
1297 bdev->bd_part = disk_get_part(disk, partno);
1298 if (!bdev->bd_part)
1299 goto out_clear;
1300
1301 ret = 0;
1302 if (disk->fops->open) {
1303 ret = disk->fops->open(bdev, mode);
1304 if (ret == -ERESTARTSYS) {
1305
1306
1307
1308
1309 disk_put_part(bdev->bd_part);
1310 bdev->bd_part = NULL;
1311 bdev->bd_disk = NULL;
1312 bdev->bd_queue = NULL;
1313 mutex_unlock(&bdev->bd_mutex);
1314 disk_unblock_events(disk);
1315 put_disk(disk);
1316 module_put(owner);
1317 goto restart;
1318 }
1319 }
1320
1321 if (!ret) {
1322 bd_set_size(bdev,(loff_t)get_capacity(disk)<<9);
1323 if (!bdev_dax_capable(bdev))
1324 bdev->bd_inode->i_flags &= ~S_DAX;
1325 }
1326
1327
1328
1329
1330
1331
1332
1333 if (bdev->bd_invalidated) {
1334 if (!ret)
1335 rescan_partitions(disk, bdev);
1336 else if (ret == -ENOMEDIUM)
1337 invalidate_partitions(disk, bdev);
1338 }
1339
1340 if (ret)
1341 goto out_clear;
1342 } else {
1343 struct block_device *whole;
1344 whole = bdget_disk(disk, 0);
1345 ret = -ENOMEM;
1346 if (!whole)
1347 goto out_clear;
1348 BUG_ON(for_part);
1349 ret = __blkdev_get(whole, mode, 1);
1350 if (ret)
1351 goto out_clear;
1352 bdev->bd_contains = whole;
1353 bdev->bd_part = disk_get_part(disk, partno);
1354 if (!(disk->flags & GENHD_FL_UP) ||
1355 !bdev->bd_part || !bdev->bd_part->nr_sects) {
1356 ret = -ENXIO;
1357 goto out_clear;
1358 }
1359 bd_set_size(bdev, (loff_t)bdev->bd_part->nr_sects << 9);
1360 if (!bdev_dax_capable(bdev))
1361 bdev->bd_inode->i_flags &= ~S_DAX;
1362 }
1363 } else {
1364 if (bdev->bd_contains == bdev) {
1365 ret = 0;
1366 if (bdev->bd_disk->fops->open)
1367 ret = bdev->bd_disk->fops->open(bdev, mode);
1368
1369 if (bdev->bd_invalidated) {
1370 if (!ret)
1371 rescan_partitions(bdev->bd_disk, bdev);
1372 else if (ret == -ENOMEDIUM)
1373 invalidate_partitions(bdev->bd_disk, bdev);
1374 }
1375 if (ret)
1376 goto out_unlock_bdev;
1377 }
1378
1379 put_disk(disk);
1380 module_put(owner);
1381 }
1382 bdev->bd_openers++;
1383 if (for_part)
1384 bdev->bd_part_count++;
1385 mutex_unlock(&bdev->bd_mutex);
1386 disk_unblock_events(disk);
1387 return 0;
1388
1389 out_clear:
1390 disk_put_part(bdev->bd_part);
1391 bdev->bd_disk = NULL;
1392 bdev->bd_part = NULL;
1393 bdev->bd_queue = NULL;
1394 if (bdev != bdev->bd_contains)
1395 __blkdev_put(bdev->bd_contains, mode, 1);
1396 bdev->bd_contains = NULL;
1397 out_unlock_bdev:
1398 mutex_unlock(&bdev->bd_mutex);
1399 disk_unblock_events(disk);
1400 put_disk(disk);
1401 module_put(owner);
1402 out:
1403 bdput(bdev);
1404
1405 return ret;
1406}
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427int blkdev_get(struct block_device *bdev, fmode_t mode, void *holder)
1428{
1429 struct block_device *whole = NULL;
1430 int res;
1431
1432 WARN_ON_ONCE((mode & FMODE_EXCL) && !holder);
1433
1434 if ((mode & FMODE_EXCL) && holder) {
1435 whole = bd_start_claiming(bdev, holder);
1436 if (IS_ERR(whole)) {
1437 bdput(bdev);
1438 return PTR_ERR(whole);
1439 }
1440 }
1441
1442 res = __blkdev_get(bdev, mode, 0);
1443
1444 if (whole) {
1445 struct gendisk *disk = whole->bd_disk;
1446
1447
1448 mutex_lock(&bdev->bd_mutex);
1449 spin_lock(&bdev_lock);
1450
1451 if (!res) {
1452 BUG_ON(!bd_may_claim(bdev, whole, holder));
1453
1454
1455
1456
1457
1458
1459 whole->bd_holders++;
1460 whole->bd_holder = bd_may_claim;
1461 bdev->bd_holders++;
1462 bdev->bd_holder = holder;
1463 }
1464
1465
1466 BUG_ON(whole->bd_claiming != holder);
1467 whole->bd_claiming = NULL;
1468 wake_up_bit(&whole->bd_claiming, 0);
1469
1470 spin_unlock(&bdev_lock);
1471
1472
1473
1474
1475
1476
1477
1478
1479 if (!res && (mode & FMODE_WRITE) && !bdev->bd_write_holder &&
1480 (disk->flags & GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE)) {
1481 bdev->bd_write_holder = true;
1482 disk_block_events(disk);
1483 }
1484
1485 mutex_unlock(&bdev->bd_mutex);
1486 bdput(whole);
1487 }
1488
1489 return res;
1490}
1491EXPORT_SYMBOL(blkdev_get);
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510struct block_device *blkdev_get_by_path(const char *path, fmode_t mode,
1511 void *holder)
1512{
1513 struct block_device *bdev;
1514 int err;
1515
1516 bdev = lookup_bdev(path);
1517 if (IS_ERR(bdev))
1518 return bdev;
1519
1520 err = blkdev_get(bdev, mode, holder);
1521 if (err)
1522 return ERR_PTR(err);
1523
1524 if ((mode & FMODE_WRITE) && bdev_read_only(bdev)) {
1525 blkdev_put(bdev, mode);
1526 return ERR_PTR(-EACCES);
1527 }
1528
1529 return bdev;
1530}
1531EXPORT_SYMBOL(blkdev_get_by_path);
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555struct block_device *blkdev_get_by_dev(dev_t dev, fmode_t mode, void *holder)
1556{
1557 struct block_device *bdev;
1558 int err;
1559
1560 bdev = bdget(dev);
1561 if (!bdev)
1562 return ERR_PTR(-ENOMEM);
1563
1564 err = blkdev_get(bdev, mode, holder);
1565 if (err)
1566 return ERR_PTR(err);
1567
1568 return bdev;
1569}
1570EXPORT_SYMBOL(blkdev_get_by_dev);
1571
1572static int blkdev_open(struct inode * inode, struct file * filp)
1573{
1574 struct block_device *bdev;
1575
1576
1577
1578
1579
1580
1581
1582 filp->f_flags |= O_LARGEFILE;
1583
1584 if (filp->f_flags & O_NDELAY)
1585 filp->f_mode |= FMODE_NDELAY;
1586 if (filp->f_flags & O_EXCL)
1587 filp->f_mode |= FMODE_EXCL;
1588 if ((filp->f_flags & O_ACCMODE) == 3)
1589 filp->f_mode |= FMODE_WRITE_IOCTL;
1590
1591 bdev = bd_acquire(inode);
1592 if (bdev == NULL)
1593 return -ENOMEM;
1594
1595 filp->f_mapping = bdev->bd_inode->i_mapping;
1596
1597 return blkdev_get(bdev, filp->f_mode, filp);
1598}
1599
1600static void __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part)
1601{
1602 struct gendisk *disk = bdev->bd_disk;
1603 struct block_device *victim = NULL;
1604
1605 mutex_lock_nested(&bdev->bd_mutex, for_part);
1606 if (for_part)
1607 bdev->bd_part_count--;
1608
1609 if (!--bdev->bd_openers) {
1610 WARN_ON_ONCE(bdev->bd_holders);
1611 sync_blockdev(bdev);
1612 kill_bdev(bdev);
1613
1614 bdev_write_inode(bdev);
1615
1616
1617
1618
1619
1620 inode_detach_wb(bdev->bd_inode);
1621 }
1622 if (bdev->bd_contains == bdev) {
1623 if (disk->fops->release)
1624 disk->fops->release(disk, mode);
1625 }
1626 if (!bdev->bd_openers) {
1627 struct module *owner = disk->fops->owner;
1628
1629 disk_put_part(bdev->bd_part);
1630 bdev->bd_part = NULL;
1631 bdev->bd_disk = NULL;
1632 if (bdev != bdev->bd_contains)
1633 victim = bdev->bd_contains;
1634 bdev->bd_contains = NULL;
1635
1636 put_disk(disk);
1637 module_put(owner);
1638 }
1639 mutex_unlock(&bdev->bd_mutex);
1640 bdput(bdev);
1641 if (victim)
1642 __blkdev_put(victim, mode, 1);
1643}
1644
1645void blkdev_put(struct block_device *bdev, fmode_t mode)
1646{
1647 mutex_lock(&bdev->bd_mutex);
1648
1649 if (mode & FMODE_EXCL) {
1650 bool bdev_free;
1651
1652
1653
1654
1655
1656
1657 spin_lock(&bdev_lock);
1658
1659 WARN_ON_ONCE(--bdev->bd_holders < 0);
1660 WARN_ON_ONCE(--bdev->bd_contains->bd_holders < 0);
1661
1662
1663 if ((bdev_free = !bdev->bd_holders))
1664 bdev->bd_holder = NULL;
1665 if (!bdev->bd_contains->bd_holders)
1666 bdev->bd_contains->bd_holder = NULL;
1667
1668 spin_unlock(&bdev_lock);
1669
1670
1671
1672
1673
1674 if (bdev_free && bdev->bd_write_holder) {
1675 disk_unblock_events(bdev->bd_disk);
1676 bdev->bd_write_holder = false;
1677 }
1678 }
1679
1680
1681
1682
1683
1684
1685 disk_flush_events(bdev->bd_disk, DISK_EVENT_MEDIA_CHANGE);
1686
1687 mutex_unlock(&bdev->bd_mutex);
1688
1689 __blkdev_put(bdev, mode, 0);
1690}
1691EXPORT_SYMBOL(blkdev_put);
1692
1693static int blkdev_close(struct inode * inode, struct file * filp)
1694{
1695 struct block_device *bdev = I_BDEV(bdev_file_inode(filp));
1696 blkdev_put(bdev, filp->f_mode);
1697 return 0;
1698}
1699
1700static long block_ioctl(struct file *file, unsigned cmd, unsigned long arg)
1701{
1702 struct block_device *bdev = I_BDEV(bdev_file_inode(file));
1703 fmode_t mode = file->f_mode;
1704
1705
1706
1707
1708
1709 if (file->f_flags & O_NDELAY)
1710 mode |= FMODE_NDELAY;
1711 else
1712 mode &= ~FMODE_NDELAY;
1713
1714 return blkdev_ioctl(bdev, mode, cmd, arg);
1715}
1716
1717
1718
1719
1720
1721
1722
1723
1724ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from)
1725{
1726 struct file *file = iocb->ki_filp;
1727 struct inode *bd_inode = bdev_file_inode(file);
1728 loff_t size = i_size_read(bd_inode);
1729 struct blk_plug plug;
1730 ssize_t ret;
1731
1732 if (bdev_read_only(I_BDEV(bd_inode)))
1733 return -EPERM;
1734
1735 if (!iov_iter_count(from))
1736 return 0;
1737
1738 if (iocb->ki_pos >= size)
1739 return -ENOSPC;
1740
1741 iov_iter_truncate(from, size - iocb->ki_pos);
1742
1743 blk_start_plug(&plug);
1744 ret = __generic_file_write_iter(iocb, from);
1745 if (ret > 0)
1746 ret = generic_write_sync(iocb, ret);
1747 blk_finish_plug(&plug);
1748 return ret;
1749}
1750EXPORT_SYMBOL_GPL(blkdev_write_iter);
1751
1752ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to)
1753{
1754 struct file *file = iocb->ki_filp;
1755 struct inode *bd_inode = bdev_file_inode(file);
1756 loff_t size = i_size_read(bd_inode);
1757 loff_t pos = iocb->ki_pos;
1758
1759 if (pos >= size)
1760 return 0;
1761
1762 size -= pos;
1763 iov_iter_truncate(to, size);
1764 return generic_file_read_iter(iocb, to);
1765}
1766EXPORT_SYMBOL_GPL(blkdev_read_iter);
1767
1768
1769
1770
1771
1772static int blkdev_releasepage(struct page *page, gfp_t wait)
1773{
1774 struct super_block *super = BDEV_I(page->mapping->host)->bdev.bd_super;
1775
1776 if (super && super->s_op->bdev_try_to_free_page)
1777 return super->s_op->bdev_try_to_free_page(super, page, wait);
1778
1779 return try_to_free_buffers(page);
1780}
1781
1782static int blkdev_writepages(struct address_space *mapping,
1783 struct writeback_control *wbc)
1784{
1785 if (dax_mapping(mapping)) {
1786 struct block_device *bdev = I_BDEV(mapping->host);
1787
1788 return dax_writeback_mapping_range(mapping, bdev, wbc);
1789 }
1790 return generic_writepages(mapping, wbc);
1791}
1792
1793static const struct address_space_operations def_blk_aops = {
1794 .readpage = blkdev_readpage,
1795 .readpages = blkdev_readpages,
1796 .writepage = blkdev_writepage,
1797 .write_begin = blkdev_write_begin,
1798 .write_end = blkdev_write_end,
1799 .writepages = blkdev_writepages,
1800 .releasepage = blkdev_releasepage,
1801 .direct_IO = blkdev_direct_IO,
1802 .is_dirty_writeback = buffer_check_dirty_writeback,
1803};
1804
1805const struct file_operations def_blk_fops = {
1806 .open = blkdev_open,
1807 .release = blkdev_close,
1808 .llseek = block_llseek,
1809 .read_iter = blkdev_read_iter,
1810 .write_iter = blkdev_write_iter,
1811 .mmap = generic_file_mmap,
1812 .fsync = blkdev_fsync,
1813 .unlocked_ioctl = block_ioctl,
1814#ifdef CONFIG_COMPAT
1815 .compat_ioctl = compat_blkdev_ioctl,
1816#endif
1817 .splice_read = generic_file_splice_read,
1818 .splice_write = iter_file_splice_write,
1819};
1820
1821int ioctl_by_bdev(struct block_device *bdev, unsigned cmd, unsigned long arg)
1822{
1823 int res;
1824 mm_segment_t old_fs = get_fs();
1825 set_fs(KERNEL_DS);
1826 res = blkdev_ioctl(bdev, 0, cmd, arg);
1827 set_fs(old_fs);
1828 return res;
1829}
1830
1831EXPORT_SYMBOL(ioctl_by_bdev);
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841struct block_device *lookup_bdev(const char *pathname)
1842{
1843 struct block_device *bdev;
1844 struct inode *inode;
1845 struct path path;
1846 int error;
1847
1848 if (!pathname || !*pathname)
1849 return ERR_PTR(-EINVAL);
1850
1851 error = kern_path(pathname, LOOKUP_FOLLOW, &path);
1852 if (error)
1853 return ERR_PTR(error);
1854
1855 inode = d_backing_inode(path.dentry);
1856 error = -ENOTBLK;
1857 if (!S_ISBLK(inode->i_mode))
1858 goto fail;
1859 error = -EACCES;
1860 if (path.mnt->mnt_flags & MNT_NODEV)
1861 goto fail;
1862 error = -ENOMEM;
1863 bdev = bd_acquire(inode);
1864 if (!bdev)
1865 goto fail;
1866out:
1867 path_put(&path);
1868 return bdev;
1869fail:
1870 bdev = ERR_PTR(error);
1871 goto out;
1872}
1873EXPORT_SYMBOL(lookup_bdev);
1874
1875int __invalidate_device(struct block_device *bdev, bool kill_dirty)
1876{
1877 struct super_block *sb = get_super(bdev);
1878 int res = 0;
1879
1880 if (sb) {
1881
1882
1883
1884
1885
1886
1887 shrink_dcache_sb(sb);
1888 res = invalidate_inodes(sb, kill_dirty);
1889 drop_super(sb);
1890 }
1891 invalidate_bdev(bdev);
1892 return res;
1893}
1894EXPORT_SYMBOL(__invalidate_device);
1895
1896void iterate_bdevs(void (*func)(struct block_device *, void *), void *arg)
1897{
1898 struct inode *inode, *old_inode = NULL;
1899
1900 spin_lock(&blockdev_superblock->s_inode_list_lock);
1901 list_for_each_entry(inode, &blockdev_superblock->s_inodes, i_sb_list) {
1902 struct address_space *mapping = inode->i_mapping;
1903
1904 spin_lock(&inode->i_lock);
1905 if (inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW) ||
1906 mapping->nrpages == 0) {
1907 spin_unlock(&inode->i_lock);
1908 continue;
1909 }
1910 __iget(inode);
1911 spin_unlock(&inode->i_lock);
1912 spin_unlock(&blockdev_superblock->s_inode_list_lock);
1913
1914
1915
1916
1917
1918
1919
1920
1921 iput(old_inode);
1922 old_inode = inode;
1923
1924 func(I_BDEV(inode), arg);
1925
1926 spin_lock(&blockdev_superblock->s_inode_list_lock);
1927 }
1928 spin_unlock(&blockdev_superblock->s_inode_list_lock);
1929 iput(old_inode);
1930}
1931