LCOV - code coverage report
Current view: top level - fs - block_dev.c (source / functions) Hit Total Coverage
Test: combined.info Lines: 453 995 45.5 %
Date: 2022-03-28 15:32:58 Functions: 50 77 64.9 %
Branches: 149 538 27.7 %

           Branch data     Line data    Source code
       1                 :            : // SPDX-License-Identifier: GPL-2.0-only
       2                 :            : /*
       3                 :            :  *  linux/fs/block_dev.c
       4                 :            :  *
       5                 :            :  *  Copyright (C) 1991, 1992  Linus Torvalds
       6                 :            :  *  Copyright (C) 2001  Andrea Arcangeli <andrea@suse.de> SuSE
       7                 :            :  */
       8                 :            : 
       9                 :            : #include <linux/init.h>
      10                 :            : #include <linux/mm.h>
      11                 :            : #include <linux/fcntl.h>
      12                 :            : #include <linux/slab.h>
      13                 :            : #include <linux/kmod.h>
      14                 :            : #include <linux/major.h>
      15                 :            : #include <linux/device_cgroup.h>
      16                 :            : #include <linux/highmem.h>
      17                 :            : #include <linux/blkdev.h>
      18                 :            : #include <linux/backing-dev.h>
      19                 :            : #include <linux/module.h>
      20                 :            : #include <linux/blkpg.h>
      21                 :            : #include <linux/magic.h>
      22                 :            : #include <linux/dax.h>
      23                 :            : #include <linux/buffer_head.h>
      24                 :            : #include <linux/swap.h>
      25                 :            : #include <linux/pagevec.h>
      26                 :            : #include <linux/writeback.h>
      27                 :            : #include <linux/mpage.h>
      28                 :            : #include <linux/mount.h>
      29                 :            : #include <linux/pseudo_fs.h>
      30                 :            : #include <linux/uio.h>
      31                 :            : #include <linux/namei.h>
      32                 :            : #include <linux/log2.h>
      33                 :            : #include <linux/cleancache.h>
      34                 :            : #include <linux/task_io_accounting_ops.h>
      35                 :            : #include <linux/falloc.h>
      36                 :            : #include <linux/uaccess.h>
      37                 :            : #include "internal.h"
      38                 :            : 
      39                 :            : struct bdev_inode {
      40                 :            :         struct block_device bdev;
      41                 :            :         struct inode vfs_inode;
      42                 :            : };
      43                 :            : 
      44                 :            : static const struct address_space_operations def_blk_aops;
      45                 :            : 
      46                 :      39090 : static inline struct bdev_inode *BDEV_I(struct inode *inode)
      47                 :            : {
      48                 :      39090 :         return container_of(inode, struct bdev_inode, vfs_inode);
      49                 :            : }
      50                 :            : 
      51                 :      37690 : struct block_device *I_BDEV(struct inode *inode)
      52                 :            : {
      53                 :      37690 :         return &BDEV_I(inode)->bdev;
      54                 :            : }
      55                 :            : EXPORT_SYMBOL(I_BDEV);
      56                 :            : 
      57                 :        448 : static void bdev_write_inode(struct block_device *bdev)
      58                 :            : {
      59                 :        448 :         struct inode *inode = bdev->bd_inode;
      60                 :        448 :         int ret;
      61                 :            : 
      62                 :        448 :         spin_lock(&inode->i_lock);
      63         [ -  + ]:        448 :         while (inode->i_state & I_DIRTY) {
      64                 :          0 :                 spin_unlock(&inode->i_lock);
      65                 :          0 :                 ret = write_inode_now(inode, true);
      66         [ #  # ]:          0 :                 if (ret) {
      67                 :          0 :                         char name[BDEVNAME_SIZE];
      68         [ #  # ]:          0 :                         pr_warn_ratelimited("VFS: Dirty inode writeback failed "
      69                 :            :                                             "for block device %s (err=%d).\n",
      70                 :            :                                             bdevname(bdev, name), ret);
      71                 :            :                 }
      72                 :          0 :                 spin_lock(&inode->i_lock);
      73                 :            :         }
      74                 :        448 :         spin_unlock(&inode->i_lock);
      75                 :        448 : }
      76                 :            : 
      77                 :            : /* Kill _all_ buffers and pagecache , dirty or not.. */
      78                 :        616 : void kill_bdev(struct block_device *bdev)
      79                 :            : {
      80                 :        616 :         struct address_space *mapping = bdev->bd_inode->i_mapping;
      81                 :            : 
      82   [ +  +  -  + ]:        616 :         if (mapping->nrpages == 0 && mapping->nrexceptional == 0)
      83                 :            :                 return;
      84                 :            : 
      85                 :        224 :         invalidate_bh_lrus();
      86                 :        224 :         truncate_inode_pages(mapping, 0);
      87                 :            : }       
      88                 :            : EXPORT_SYMBOL(kill_bdev);
      89                 :            : 
      90                 :            : /* Invalidate clean unused buffers and pagecache. */
      91                 :         84 : void invalidate_bdev(struct block_device *bdev)
      92                 :            : {
      93                 :         84 :         struct address_space *mapping = bdev->bd_inode->i_mapping;
      94                 :            : 
      95         [ -  + ]:         84 :         if (mapping->nrpages) {
      96                 :          0 :                 invalidate_bh_lrus();
      97                 :          0 :                 lru_add_drain_all();    /* make sure all lru add caches are flushed */
      98                 :          0 :                 invalidate_mapping_pages(mapping, 0, -1);
      99                 :            :         }
     100                 :            :         /* 99% of the time, we don't need to flush the cleancache on the bdev.
     101                 :            :          * But, for the strange corners, lets be cautious
     102                 :            :          */
     103                 :         84 :         cleancache_invalidate_inode(mapping);
     104                 :         84 : }
     105                 :            : EXPORT_SYMBOL(invalidate_bdev);
     106                 :            : 
     107                 :        504 : static void set_init_blocksize(struct block_device *bdev)
     108                 :            : {
     109         [ +  - ]:        504 :         unsigned bsize = bdev_logical_block_size(bdev);
     110                 :        504 :         loff_t size = i_size_read(bdev->bd_inode);
     111                 :            : 
     112         [ +  + ]:       1932 :         while (bsize < PAGE_SIZE) {
     113         [ +  + ]:       1456 :                 if (size & bsize)
     114                 :            :                         break;
     115                 :       1428 :                 bsize <<= 1;
     116                 :            :         }
     117                 :        504 :         bdev->bd_block_size = bsize;
     118                 :        504 :         bdev->bd_inode->i_blkbits = blksize_bits(bsize);
     119                 :        504 : }
     120                 :            : 
     121                 :        280 : int set_blocksize(struct block_device *bdev, int size)
     122                 :            : {
     123                 :            :         /* Size must be a power of two, and between 512 and PAGE_SIZE */
     124   [ +  -  -  +  :        280 :         if (size > PAGE_SIZE || size < 512 || !is_power_of_2(size))
                   +  - ]
     125                 :            :                 return -EINVAL;
     126                 :            : 
     127                 :            :         /* Size cannot be smaller than the size supported by the device */
     128   [ +  -  +  - ]:        560 :         if (size < bdev_logical_block_size(bdev))
     129                 :            :                 return -EINVAL;
     130                 :            : 
     131                 :            :         /* Don't change the size if it is same as current */
     132         [ +  + ]:        280 :         if (bdev->bd_block_size != size) {
     133                 :        168 :                 sync_blockdev(bdev);
     134                 :        168 :                 bdev->bd_block_size = size;
     135                 :        168 :                 bdev->bd_inode->i_blkbits = blksize_bits(size);
     136                 :        168 :                 kill_bdev(bdev);
     137                 :            :         }
     138                 :            :         return 0;
     139                 :            : }
     140                 :            : 
     141                 :            : EXPORT_SYMBOL(set_blocksize);
     142                 :            : 
     143                 :        280 : int sb_set_blocksize(struct super_block *sb, int size)
     144                 :            : {
     145         [ +  - ]:        280 :         if (set_blocksize(sb->s_bdev, size))
     146                 :            :                 return 0;
     147                 :            :         /* If we get here, we know size is power of two
     148                 :            :          * and it's value is between 512 and PAGE_SIZE */
     149                 :        280 :         sb->s_blocksize = size;
     150                 :        280 :         sb->s_blocksize_bits = blksize_bits(size);
     151                 :        280 :         return sb->s_blocksize;
     152                 :            : }
     153                 :            : 
     154                 :            : EXPORT_SYMBOL(sb_set_blocksize);
     155                 :            : 
     156                 :        112 : int sb_min_blocksize(struct super_block *sb, int size)
     157                 :            : {
     158         [ +  - ]:        112 :         int minsize = bdev_logical_block_size(sb->s_bdev);
     159                 :        112 :         if (size < minsize)
     160                 :            :                 size = minsize;
     161                 :        112 :         return sb_set_blocksize(sb, size);
     162                 :            : }
     163                 :            : 
     164                 :            : EXPORT_SYMBOL(sb_min_blocksize);
     165                 :            : 
     166                 :            : static int
     167                 :       4004 : blkdev_get_block(struct inode *inode, sector_t iblock,
     168                 :            :                 struct buffer_head *bh, int create)
     169                 :            : {
     170                 :       4004 :         bh->b_bdev = I_BDEV(inode);
     171                 :       4004 :         bh->b_blocknr = iblock;
     172                 :       4004 :         set_buffer_mapped(bh);
     173                 :       4004 :         return 0;
     174                 :            : }
     175                 :            : 
     176                 :       9128 : static struct inode *bdev_file_inode(struct file *file)
     177                 :            : {
     178                 :       9128 :         return file->f_mapping->host;
     179                 :            : }
     180                 :            : 
     181                 :          0 : static unsigned int dio_bio_write_op(struct kiocb *iocb)
     182                 :            : {
     183                 :          0 :         unsigned int op = REQ_OP_WRITE | REQ_SYNC | REQ_IDLE;
     184                 :            : 
     185                 :            :         /* avoid the need for a I/O completion work item */
     186                 :          0 :         if (iocb->ki_flags & IOCB_DSYNC)
     187                 :          0 :                 op |= REQ_FUA;
     188                 :          0 :         return op;
     189                 :            : }
     190                 :            : 
     191                 :            : #define DIO_INLINE_BIO_VECS 4
     192                 :            : 
     193                 :          0 : static void blkdev_bio_end_io_simple(struct bio *bio)
     194                 :            : {
     195                 :          0 :         struct task_struct *waiter = bio->bi_private;
     196                 :            : 
     197         [ #  # ]:          0 :         WRITE_ONCE(bio->bi_private, NULL);
     198         [ #  # ]:          0 :         blk_wake_io_task(waiter);
     199                 :          0 : }
     200                 :            : 
     201                 :            : static ssize_t
     202                 :          0 : __blkdev_direct_IO_simple(struct kiocb *iocb, struct iov_iter *iter,
     203                 :            :                 int nr_pages)
     204                 :            : {
     205                 :          0 :         struct file *file = iocb->ki_filp;
     206                 :          0 :         struct block_device *bdev = I_BDEV(bdev_file_inode(file));
     207                 :          0 :         struct bio_vec inline_vecs[DIO_INLINE_BIO_VECS], *vecs;
     208                 :          0 :         loff_t pos = iocb->ki_pos;
     209                 :          0 :         bool should_dirty = false;
     210                 :          0 :         struct bio bio;
     211                 :          0 :         ssize_t ret;
     212                 :          0 :         blk_qc_t qc;
     213                 :            : 
     214         [ #  # ]:          0 :         if ((pos | iov_iter_alignment(iter)) &
     215         [ #  # ]:          0 :             (bdev_logical_block_size(bdev) - 1))
     216                 :            :                 return -EINVAL;
     217                 :            : 
     218         [ #  # ]:          0 :         if (nr_pages <= DIO_INLINE_BIO_VECS)
     219                 :            :                 vecs = inline_vecs;
     220                 :            :         else {
     221                 :          0 :                 vecs = kmalloc_array(nr_pages, sizeof(struct bio_vec),
     222                 :            :                                      GFP_KERNEL);
     223         [ #  # ]:          0 :                 if (!vecs)
     224                 :            :                         return -ENOMEM;
     225                 :            :         }
     226                 :            : 
     227                 :          0 :         bio_init(&bio, vecs, nr_pages);
     228         [ #  # ]:          0 :         bio_set_dev(&bio, bdev);
     229                 :          0 :         bio.bi_iter.bi_sector = pos >> 9;
     230                 :          0 :         bio.bi_write_hint = iocb->ki_hint;
     231                 :          0 :         bio.bi_private = current;
     232                 :          0 :         bio.bi_end_io = blkdev_bio_end_io_simple;
     233                 :          0 :         bio.bi_ioprio = iocb->ki_ioprio;
     234                 :            : 
     235                 :          0 :         ret = bio_iov_iter_get_pages(&bio, iter);
     236         [ #  # ]:          0 :         if (unlikely(ret))
     237                 :          0 :                 goto out;
     238                 :          0 :         ret = bio.bi_iter.bi_size;
     239                 :            : 
     240         [ #  # ]:          0 :         if (iov_iter_rw(iter) == READ) {
     241                 :          0 :                 bio.bi_opf = REQ_OP_READ;
     242         [ #  # ]:          0 :                 if (iter_is_iovec(iter))
     243                 :          0 :                         should_dirty = true;
     244                 :            :         } else {
     245         [ #  # ]:          0 :                 bio.bi_opf = dio_bio_write_op(iocb);
     246                 :          0 :                 task_io_account_write(ret);
     247                 :            :         }
     248         [ #  # ]:          0 :         if (iocb->ki_flags & IOCB_HIPRI)
     249         [ #  # ]:          0 :                 bio_set_polled(&bio, iocb);
     250                 :            : 
     251                 :          0 :         qc = submit_bio(&bio);
     252                 :          0 :         for (;;) {
     253                 :          0 :                 set_current_state(TASK_UNINTERRUPTIBLE);
     254         [ #  # ]:          0 :                 if (!READ_ONCE(bio.bi_private))
     255                 :            :                         break;
     256   [ #  #  #  # ]:          0 :                 if (!(iocb->ki_flags & IOCB_HIPRI) ||
     257                 :          0 :                     !blk_poll(bdev_get_queue(bdev), qc, true))
     258                 :          0 :                         io_schedule();
     259                 :            :         }
     260                 :          0 :         __set_current_state(TASK_RUNNING);
     261                 :            : 
     262                 :          0 :         bio_release_pages(&bio, should_dirty);
     263         [ #  # ]:          0 :         if (unlikely(bio.bi_status))
     264                 :          0 :                 ret = blk_status_to_errno(bio.bi_status);
     265                 :            : 
     266                 :          0 : out:
     267         [ #  # ]:          0 :         if (vecs != inline_vecs)
     268                 :          0 :                 kfree(vecs);
     269                 :            : 
     270                 :          0 :         bio_uninit(&bio);
     271                 :            : 
     272                 :          0 :         return ret;
     273                 :            : }
     274                 :            : 
     275                 :            : struct blkdev_dio {
     276                 :            :         union {
     277                 :            :                 struct kiocb            *iocb;
     278                 :            :                 struct task_struct      *waiter;
     279                 :            :         };
     280                 :            :         size_t                  size;
     281                 :            :         atomic_t                ref;
     282                 :            :         bool                    multi_bio : 1;
     283                 :            :         bool                    should_dirty : 1;
     284                 :            :         bool                    is_sync : 1;
     285                 :            :         struct bio              bio;
     286                 :            : };
     287                 :            : 
     288                 :            : static struct bio_set blkdev_dio_pool;
     289                 :            : 
     290                 :          0 : static int blkdev_iopoll(struct kiocb *kiocb, bool wait)
     291                 :            : {
     292                 :          0 :         struct block_device *bdev = I_BDEV(kiocb->ki_filp->f_mapping->host);
     293                 :          0 :         struct request_queue *q = bdev_get_queue(bdev);
     294                 :            : 
     295                 :          0 :         return blk_poll(q, READ_ONCE(kiocb->ki_cookie), wait);
     296                 :            : }
     297                 :            : 
     298                 :          0 : static void blkdev_bio_end_io(struct bio *bio)
     299                 :            : {
     300                 :          0 :         struct blkdev_dio *dio = bio->bi_private;
     301                 :          0 :         bool should_dirty = dio->should_dirty;
     302                 :            : 
     303   [ #  #  #  # ]:          0 :         if (bio->bi_status && !dio->bio.bi_status)
     304                 :          0 :                 dio->bio.bi_status = bio->bi_status;
     305                 :            : 
     306   [ #  #  #  # ]:          0 :         if (!dio->multi_bio || atomic_dec_and_test(&dio->ref)) {
     307         [ #  # ]:          0 :                 if (!dio->is_sync) {
     308                 :          0 :                         struct kiocb *iocb = dio->iocb;
     309                 :          0 :                         ssize_t ret;
     310                 :            : 
     311         [ #  # ]:          0 :                         if (likely(!dio->bio.bi_status)) {
     312                 :          0 :                                 ret = dio->size;
     313                 :          0 :                                 iocb->ki_pos += ret;
     314                 :            :                         } else {
     315                 :          0 :                                 ret = blk_status_to_errno(dio->bio.bi_status);
     316                 :            :                         }
     317                 :            : 
     318                 :          0 :                         dio->iocb->ki_complete(iocb, ret, 0);
     319         [ #  # ]:          0 :                         if (dio->multi_bio)
     320                 :          0 :                                 bio_put(&dio->bio);
     321                 :            :                 } else {
     322                 :          0 :                         struct task_struct *waiter = dio->waiter;
     323                 :            : 
     324         [ #  # ]:          0 :                         WRITE_ONCE(dio->waiter, NULL);
     325         [ #  # ]:          0 :                         blk_wake_io_task(waiter);
     326                 :            :                 }
     327                 :            :         }
     328                 :            : 
     329         [ #  # ]:          0 :         if (should_dirty) {
     330                 :          0 :                 bio_check_pages_dirty(bio);
     331                 :            :         } else {
     332                 :          0 :                 bio_release_pages(bio, false);
     333                 :          0 :                 bio_put(bio);
     334                 :            :         }
     335                 :          0 : }
     336                 :            : 
     337                 :            : static ssize_t
     338                 :          0 : __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages)
     339                 :            : {
     340                 :          0 :         struct file *file = iocb->ki_filp;
     341                 :          0 :         struct inode *inode = bdev_file_inode(file);
     342                 :          0 :         struct block_device *bdev = I_BDEV(inode);
     343                 :          0 :         struct blk_plug plug;
     344                 :          0 :         struct blkdev_dio *dio;
     345                 :          0 :         struct bio *bio;
     346                 :          0 :         bool is_poll = (iocb->ki_flags & IOCB_HIPRI) != 0;
     347                 :          0 :         bool is_read = (iov_iter_rw(iter) == READ), is_sync;
     348                 :          0 :         loff_t pos = iocb->ki_pos;
     349                 :          0 :         blk_qc_t qc = BLK_QC_T_NONE;
     350                 :          0 :         int ret = 0;
     351                 :            : 
     352         [ #  # ]:          0 :         if ((pos | iov_iter_alignment(iter)) &
     353         [ #  # ]:          0 :             (bdev_logical_block_size(bdev) - 1))
     354                 :            :                 return -EINVAL;
     355                 :            : 
     356                 :          0 :         bio = bio_alloc_bioset(GFP_KERNEL, nr_pages, &blkdev_dio_pool);
     357                 :            : 
     358                 :          0 :         dio = container_of(bio, struct blkdev_dio, bio);
     359         [ #  # ]:          0 :         dio->is_sync = is_sync = is_sync_kiocb(iocb);
     360         [ #  # ]:          0 :         if (dio->is_sync) {
     361                 :          0 :                 dio->waiter = current;
     362                 :          0 :                 bio_get(bio);
     363                 :            :         } else {
     364                 :          0 :                 dio->iocb = iocb;
     365                 :            :         }
     366                 :            : 
     367                 :          0 :         dio->size = 0;
     368                 :          0 :         dio->multi_bio = false;
     369   [ #  #  #  # ]:          0 :         dio->should_dirty = is_read && iter_is_iovec(iter);
     370                 :            : 
     371                 :            :         /*
     372                 :            :          * Don't plug for HIPRI/polled IO, as those should go straight
     373                 :            :          * to issue
     374                 :            :          */
     375         [ #  # ]:          0 :         if (!is_poll)
     376                 :          0 :                 blk_start_plug(&plug);
     377                 :            : 
     378                 :          0 :         for (;;) {
     379         [ #  # ]:          0 :                 bio_set_dev(bio, bdev);
     380                 :          0 :                 bio->bi_iter.bi_sector = pos >> 9;
     381                 :          0 :                 bio->bi_write_hint = iocb->ki_hint;
     382                 :          0 :                 bio->bi_private = dio;
     383                 :          0 :                 bio->bi_end_io = blkdev_bio_end_io;
     384                 :          0 :                 bio->bi_ioprio = iocb->ki_ioprio;
     385                 :            : 
     386                 :          0 :                 ret = bio_iov_iter_get_pages(bio, iter);
     387         [ #  # ]:          0 :                 if (unlikely(ret)) {
     388                 :          0 :                         bio->bi_status = BLK_STS_IOERR;
     389                 :          0 :                         bio_endio(bio);
     390                 :          0 :                         break;
     391                 :            :                 }
     392                 :            : 
     393         [ #  # ]:          0 :                 if (is_read) {
     394                 :          0 :                         bio->bi_opf = REQ_OP_READ;
     395         [ #  # ]:          0 :                         if (dio->should_dirty)
     396                 :          0 :                                 bio_set_pages_dirty(bio);
     397                 :            :                 } else {
     398         [ #  # ]:          0 :                         bio->bi_opf = dio_bio_write_op(iocb);
     399                 :          0 :                         task_io_account_write(bio->bi_iter.bi_size);
     400                 :            :                 }
     401                 :            : 
     402                 :          0 :                 dio->size += bio->bi_iter.bi_size;
     403                 :          0 :                 pos += bio->bi_iter.bi_size;
     404                 :            : 
     405                 :          0 :                 nr_pages = iov_iter_npages(iter, BIO_MAX_PAGES);
     406         [ #  # ]:          0 :                 if (!nr_pages) {
     407                 :          0 :                         bool polled = false;
     408                 :            : 
     409         [ #  # ]:          0 :                         if (iocb->ki_flags & IOCB_HIPRI) {
     410         [ #  # ]:          0 :                                 bio_set_polled(bio, iocb);
     411                 :            :                                 polled = true;
     412                 :            :                         }
     413                 :            : 
     414                 :          0 :                         qc = submit_bio(bio);
     415                 :            : 
     416         [ #  # ]:          0 :                         if (polled)
     417                 :          0 :                                 WRITE_ONCE(iocb->ki_cookie, qc);
     418                 :            :                         break;
     419                 :            :                 }
     420                 :            : 
     421         [ #  # ]:          0 :                 if (!dio->multi_bio) {
     422                 :            :                         /*
     423                 :            :                          * AIO needs an extra reference to ensure the dio
     424                 :            :                          * structure which is embedded into the first bio
     425                 :            :                          * stays around.
     426                 :            :                          */
     427         [ #  # ]:          0 :                         if (!is_sync)
     428                 :          0 :                                 bio_get(bio);
     429                 :          0 :                         dio->multi_bio = true;
     430                 :          0 :                         atomic_set(&dio->ref, 2);
     431                 :            :                 } else {
     432                 :          0 :                         atomic_inc(&dio->ref);
     433                 :            :                 }
     434                 :            : 
     435                 :          0 :                 submit_bio(bio);
     436                 :          0 :                 bio = bio_alloc(GFP_KERNEL, nr_pages);
     437                 :            :         }
     438                 :            : 
     439         [ #  # ]:          0 :         if (!is_poll)
     440                 :          0 :                 blk_finish_plug(&plug);
     441                 :            : 
     442         [ #  # ]:          0 :         if (!is_sync)
     443                 :            :                 return -EIOCBQUEUED;
     444                 :            : 
     445                 :          0 :         for (;;) {
     446                 :          0 :                 set_current_state(TASK_UNINTERRUPTIBLE);
     447         [ #  # ]:          0 :                 if (!READ_ONCE(dio->waiter))
     448                 :            :                         break;
     449                 :            : 
     450   [ #  #  #  # ]:          0 :                 if (!(iocb->ki_flags & IOCB_HIPRI) ||
     451                 :          0 :                     !blk_poll(bdev_get_queue(bdev), qc, true))
     452                 :          0 :                         io_schedule();
     453                 :            :         }
     454         [ #  # ]:          0 :         __set_current_state(TASK_RUNNING);
     455                 :            : 
     456         [ #  # ]:          0 :         if (!ret)
     457                 :          0 :                 ret = blk_status_to_errno(dio->bio.bi_status);
     458         [ #  # ]:          0 :         if (likely(!ret))
     459                 :          0 :                 ret = dio->size;
     460                 :            : 
     461                 :          0 :         bio_put(&dio->bio);
     462                 :          0 :         return ret;
     463                 :            : }
     464                 :            : 
     465                 :            : static ssize_t
     466                 :          0 : blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
     467                 :            : {
     468                 :          0 :         int nr_pages;
     469                 :            : 
     470                 :          0 :         nr_pages = iov_iter_npages(iter, BIO_MAX_PAGES + 1);
     471         [ #  # ]:          0 :         if (!nr_pages)
     472                 :            :                 return 0;
     473   [ #  #  #  # ]:          0 :         if (is_sync_kiocb(iocb) && nr_pages <= BIO_MAX_PAGES)
     474                 :          0 :                 return __blkdev_direct_IO_simple(iocb, iter, nr_pages);
     475                 :            : 
     476                 :          0 :         return __blkdev_direct_IO(iocb, iter, min(nr_pages, BIO_MAX_PAGES));
     477                 :            : }
     478                 :            : 
     479                 :         28 : static __init int blkdev_init(void)
     480                 :            : {
     481                 :         28 :         return bioset_init(&blkdev_dio_pool, 4, offsetof(struct blkdev_dio, bio), BIOSET_NEED_BVECS);
     482                 :            : }
     483                 :            : module_init(blkdev_init);
     484                 :            : 
     485                 :        784 : int __sync_blockdev(struct block_device *bdev, int wait)
     486                 :            : {
     487         [ +  + ]:        784 :         if (!bdev)
     488                 :            :                 return 0;
     489         [ -  + ]:        728 :         if (!wait)
     490                 :          0 :                 return filemap_flush(bdev->bd_inode->i_mapping);
     491                 :        728 :         return filemap_write_and_wait(bdev->bd_inode->i_mapping);
     492                 :            : }
     493                 :            : 
     494                 :            : /*
     495                 :            :  * Write out and wait upon all the dirty data associated with a block
     496                 :            :  * device via its mapping.  Does not take the superblock lock.
     497                 :            :  */
     498                 :        728 : int sync_blockdev(struct block_device *bdev)
     499                 :            : {
     500                 :        224 :         return __sync_blockdev(bdev, 1);
     501                 :            : }
     502                 :            : EXPORT_SYMBOL(sync_blockdev);
     503                 :            : 
     504                 :            : /*
     505                 :            :  * Write out and wait upon all dirty data associated with this
     506                 :            :  * device.   Filesystem data as well as the underlying block
     507                 :            :  * device.  Takes the superblock lock.
     508                 :            :  */
     509                 :         56 : int fsync_bdev(struct block_device *bdev)
     510                 :            : {
     511                 :         56 :         struct super_block *sb = get_super(bdev);
     512         [ -  + ]:         56 :         if (sb) {
     513                 :          0 :                 int res = sync_filesystem(sb);
     514                 :          0 :                 drop_super(sb);
     515                 :          0 :                 return res;
     516                 :            :         }
     517                 :         56 :         return sync_blockdev(bdev);
     518                 :            : }
     519                 :            : EXPORT_SYMBOL(fsync_bdev);
     520                 :            : 
     521                 :            : /**
     522                 :            :  * freeze_bdev  --  lock a filesystem and force it into a consistent state
     523                 :            :  * @bdev:       blockdevice to lock
     524                 :            :  *
     525                 :            :  * If a superblock is found on this device, we take the s_umount semaphore
     526                 :            :  * on it to make sure nobody unmounts until the snapshot creation is done.
     527                 :            :  * The reference counter (bd_fsfreeze_count) guarantees that only the last
     528                 :            :  * unfreeze process can unfreeze the frozen filesystem actually when multiple
     529                 :            :  * freeze requests arrive simultaneously. It counts up in freeze_bdev() and
     530                 :            :  * count down in thaw_bdev(). When it becomes 0, thaw_bdev() will unfreeze
     531                 :            :  * actually.
     532                 :            :  */
     533                 :          0 : struct super_block *freeze_bdev(struct block_device *bdev)
     534                 :            : {
     535                 :          0 :         struct super_block *sb;
     536                 :          0 :         int error = 0;
     537                 :            : 
     538                 :          0 :         mutex_lock(&bdev->bd_fsfreeze_mutex);
     539         [ #  # ]:          0 :         if (++bdev->bd_fsfreeze_count > 1) {
     540                 :            :                 /*
     541                 :            :                  * We don't even need to grab a reference - the first call
     542                 :            :                  * to freeze_bdev grab an active reference and only the last
     543                 :            :                  * thaw_bdev drops it.
     544                 :            :                  */
     545                 :          0 :                 sb = get_super(bdev);
     546         [ #  # ]:          0 :                 if (sb)
     547                 :          0 :                         drop_super(sb);
     548                 :          0 :                 mutex_unlock(&bdev->bd_fsfreeze_mutex);
     549                 :          0 :                 return sb;
     550                 :            :         }
     551                 :            : 
     552                 :          0 :         sb = get_active_super(bdev);
     553         [ #  # ]:          0 :         if (!sb)
     554                 :          0 :                 goto out;
     555         [ #  # ]:          0 :         if (sb->s_op->freeze_super)
     556                 :          0 :                 error = sb->s_op->freeze_super(sb);
     557                 :            :         else
     558                 :          0 :                 error = freeze_super(sb);
     559         [ #  # ]:          0 :         if (error) {
     560                 :          0 :                 deactivate_super(sb);
     561                 :          0 :                 bdev->bd_fsfreeze_count--;
     562                 :          0 :                 mutex_unlock(&bdev->bd_fsfreeze_mutex);
     563                 :          0 :                 return ERR_PTR(error);
     564                 :            :         }
     565                 :          0 :         deactivate_super(sb);
     566                 :          0 :  out:
     567                 :          0 :         sync_blockdev(bdev);
     568                 :          0 :         mutex_unlock(&bdev->bd_fsfreeze_mutex);
     569                 :          0 :         return sb;      /* thaw_bdev releases s->s_umount */
     570                 :            : }
     571                 :            : EXPORT_SYMBOL(freeze_bdev);
     572                 :            : 
     573                 :            : /**
     574                 :            :  * thaw_bdev  -- unlock filesystem
     575                 :            :  * @bdev:       blockdevice to unlock
     576                 :            :  * @sb:         associated superblock
     577                 :            :  *
     578                 :            :  * Unlocks the filesystem and marks it writeable again after freeze_bdev().
     579                 :            :  */
     580                 :          0 : int thaw_bdev(struct block_device *bdev, struct super_block *sb)
     581                 :            : {
     582                 :          0 :         int error = -EINVAL;
     583                 :            : 
     584                 :          0 :         mutex_lock(&bdev->bd_fsfreeze_mutex);
     585         [ #  # ]:          0 :         if (!bdev->bd_fsfreeze_count)
     586                 :          0 :                 goto out;
     587                 :            : 
     588                 :          0 :         error = 0;
     589         [ #  # ]:          0 :         if (--bdev->bd_fsfreeze_count > 0)
     590                 :          0 :                 goto out;
     591                 :            : 
     592         [ #  # ]:          0 :         if (!sb)
     593                 :          0 :                 goto out;
     594                 :            : 
     595         [ #  # ]:          0 :         if (sb->s_op->thaw_super)
     596                 :          0 :                 error = sb->s_op->thaw_super(sb);
     597                 :            :         else
     598                 :          0 :                 error = thaw_super(sb);
     599         [ #  # ]:          0 :         if (error)
     600                 :          0 :                 bdev->bd_fsfreeze_count++;
     601                 :          0 : out:
     602                 :          0 :         mutex_unlock(&bdev->bd_fsfreeze_mutex);
     603                 :          0 :         return error;
     604                 :            : }
     605                 :            : EXPORT_SYMBOL(thaw_bdev);
     606                 :            : 
     607                 :          0 : static int blkdev_writepage(struct page *page, struct writeback_control *wbc)
     608                 :            : {
     609                 :          0 :         return block_write_full_page(page, blkdev_get_block, wbc);
     610                 :            : }
     611                 :            : 
     612                 :        140 : static int blkdev_readpage(struct file * file, struct page * page)
     613                 :            : {
     614                 :        140 :         return block_read_full_page(page, blkdev_get_block);
     615                 :            : }
     616                 :            : 
     617                 :       3948 : static int blkdev_readpages(struct file *file, struct address_space *mapping,
     618                 :            :                         struct list_head *pages, unsigned nr_pages)
     619                 :            : {
     620                 :       3948 :         return mpage_readpages(mapping, pages, nr_pages, blkdev_get_block);
     621                 :            : }
     622                 :            : 
     623                 :          0 : static int blkdev_write_begin(struct file *file, struct address_space *mapping,
     624                 :            :                         loff_t pos, unsigned len, unsigned flags,
     625                 :            :                         struct page **pagep, void **fsdata)
     626                 :            : {
     627                 :          0 :         return block_write_begin(mapping, pos, len, flags, pagep,
     628                 :            :                                  blkdev_get_block);
     629                 :            : }
     630                 :            : 
     631                 :          0 : static int blkdev_write_end(struct file *file, struct address_space *mapping,
     632                 :            :                         loff_t pos, unsigned len, unsigned copied,
     633                 :            :                         struct page *page, void *fsdata)
     634                 :            : {
     635                 :          0 :         int ret;
     636                 :          0 :         ret = block_write_end(file, mapping, pos, len, copied, page, fsdata);
     637                 :            : 
     638                 :          0 :         unlock_page(page);
     639                 :          0 :         put_page(page);
     640                 :            : 
     641                 :          0 :         return ret;
     642                 :            : }
     643                 :            : 
     644                 :            : /*
     645                 :            :  * private llseek:
     646                 :            :  * for a block special file file_inode(file)->i_size is zero
     647                 :            :  * so we compute the size by hand (just as in block_read/write above)
     648                 :            :  */
     649                 :       3696 : static loff_t block_llseek(struct file *file, loff_t offset, int whence)
     650                 :            : {
     651                 :       3696 :         struct inode *bd_inode = bdev_file_inode(file);
     652                 :       3696 :         loff_t retval;
     653                 :            : 
     654                 :       3696 :         inode_lock(bd_inode);
     655                 :       3696 :         retval = fixed_size_llseek(file, offset, whence, i_size_read(bd_inode));
     656                 :       3696 :         inode_unlock(bd_inode);
     657                 :       3696 :         return retval;
     658                 :            : }
     659                 :            :         
     660                 :          0 : int blkdev_fsync(struct file *filp, loff_t start, loff_t end, int datasync)
     661                 :            : {
     662                 :          0 :         struct inode *bd_inode = bdev_file_inode(filp);
     663                 :          0 :         struct block_device *bdev = I_BDEV(bd_inode);
     664                 :          0 :         int error;
     665                 :            :         
     666                 :          0 :         error = file_write_and_wait_range(filp, start, end);
     667         [ #  # ]:          0 :         if (error)
     668                 :            :                 return error;
     669                 :            : 
     670                 :            :         /*
     671                 :            :          * There is no need to serialise calls to blkdev_issue_flush with
     672                 :            :          * i_mutex and doing so causes performance issues with concurrent
     673                 :            :          * O_SYNC writers to a block device.
     674                 :            :          */
     675                 :          0 :         error = blkdev_issue_flush(bdev, GFP_KERNEL, NULL);
     676         [ #  # ]:          0 :         if (error == -EOPNOTSUPP)
     677                 :          0 :                 error = 0;
     678                 :            : 
     679                 :            :         return error;
     680                 :            : }
     681                 :            : EXPORT_SYMBOL(blkdev_fsync);
     682                 :            : 
     683                 :            : /**
     684                 :            :  * bdev_read_page() - Start reading a page from a block device
     685                 :            :  * @bdev: The device to read the page from
     686                 :            :  * @sector: The offset on the device to read the page to (need not be aligned)
     687                 :            :  * @page: The page to read
     688                 :            :  *
     689                 :            :  * On entry, the page should be locked.  It will be unlocked when the page
     690                 :            :  * has been read.  If the block driver implements rw_page synchronously,
     691                 :            :  * that will be true on exit from this function, but it need not be.
     692                 :            :  *
     693                 :            :  * Errors returned by this function are usually "soft", eg out of memory, or
     694                 :            :  * queue full; callers should try a different route to read this page rather
     695                 :            :  * than propagate an error back up the stack.
     696                 :            :  *
     697                 :            :  * Return: negative errno if an error occurs, 0 if submission was successful.
     698                 :            :  */
     699                 :       3948 : int bdev_read_page(struct block_device *bdev, sector_t sector,
     700                 :            :                         struct page *page)
     701                 :            : {
     702                 :       3948 :         const struct block_device_operations *ops = bdev->bd_disk->fops;
     703                 :       3948 :         int result = -EOPNOTSUPP;
     704                 :            : 
     705         [ -  + ]:       3948 :         if (!ops->rw_page || bdev_get_integrity(bdev))
     706                 :            :                 return result;
     707                 :            : 
     708                 :          0 :         result = blk_queue_enter(bdev->bd_queue, 0);
     709         [ #  # ]:          0 :         if (result)
     710                 :            :                 return result;
     711                 :          0 :         result = ops->rw_page(bdev, sector + get_start_sect(bdev), page,
     712                 :            :                               REQ_OP_READ);
     713                 :          0 :         blk_queue_exit(bdev->bd_queue);
     714                 :          0 :         return result;
     715                 :            : }
     716                 :            : EXPORT_SYMBOL_GPL(bdev_read_page);
     717                 :            : 
     718                 :            : /**
     719                 :            :  * bdev_write_page() - Start writing a page to a block device
     720                 :            :  * @bdev: The device to write the page to
     721                 :            :  * @sector: The offset on the device to write the page to (need not be aligned)
     722                 :            :  * @page: The page to write
     723                 :            :  * @wbc: The writeback_control for the write
     724                 :            :  *
     725                 :            :  * On entry, the page should be locked and not currently under writeback.
     726                 :            :  * On exit, if the write started successfully, the page will be unlocked and
     727                 :            :  * under writeback.  If the write failed already (eg the driver failed to
     728                 :            :  * queue the page to the device), the page will still be locked.  If the
     729                 :            :  * caller is a ->writepage implementation, it will need to unlock the page.
     730                 :            :  *
     731                 :            :  * Errors returned by this function are usually "soft", eg out of memory, or
     732                 :            :  * queue full; callers should try a different route to write this page rather
     733                 :            :  * than propagate an error back up the stack.
     734                 :            :  *
     735                 :            :  * Return: negative errno if an error occurs, 0 if submission was successful.
     736                 :            :  */
     737                 :          0 : int bdev_write_page(struct block_device *bdev, sector_t sector,
     738                 :            :                         struct page *page, struct writeback_control *wbc)
     739                 :            : {
     740                 :          0 :         int result;
     741                 :          0 :         const struct block_device_operations *ops = bdev->bd_disk->fops;
     742                 :            : 
     743         [ #  # ]:          0 :         if (!ops->rw_page || bdev_get_integrity(bdev))
     744                 :            :                 return -EOPNOTSUPP;
     745                 :          0 :         result = blk_queue_enter(bdev->bd_queue, 0);
     746         [ #  # ]:          0 :         if (result)
     747                 :            :                 return result;
     748                 :            : 
     749                 :          0 :         set_page_writeback(page);
     750                 :          0 :         result = ops->rw_page(bdev, sector + get_start_sect(bdev), page,
     751                 :            :                               REQ_OP_WRITE);
     752         [ #  # ]:          0 :         if (result) {
     753                 :          0 :                 end_page_writeback(page);
     754                 :            :         } else {
     755                 :          0 :                 clean_page_buffers(page);
     756                 :          0 :                 unlock_page(page);
     757                 :            :         }
     758                 :          0 :         blk_queue_exit(bdev->bd_queue);
     759                 :          0 :         return result;
     760                 :            : }
     761                 :            : EXPORT_SYMBOL_GPL(bdev_write_page);
     762                 :            : 
     763                 :            : /*
     764                 :            :  * pseudo-fs
     765                 :            :  */
     766                 :            : 
     767                 :            : static  __cacheline_aligned_in_smp DEFINE_SPINLOCK(bdev_lock);
     768                 :            : static struct kmem_cache * bdev_cachep __read_mostly;
     769                 :            : 
     770                 :        420 : static struct inode *bdev_alloc_inode(struct super_block *sb)
     771                 :            : {
     772                 :        420 :         struct bdev_inode *ei = kmem_cache_alloc(bdev_cachep, GFP_KERNEL);
     773         [ +  - ]:        420 :         if (!ei)
     774                 :            :                 return NULL;
     775                 :        420 :         return &ei->vfs_inode;
     776                 :            : }
     777                 :            : 
     778                 :         56 : static void bdev_free_inode(struct inode *inode)
     779                 :            : {
     780                 :         56 :         kmem_cache_free(bdev_cachep, BDEV_I(inode));
     781                 :         56 : }
     782                 :            : 
     783                 :        448 : static void init_once(void *foo)
     784                 :            : {
     785                 :        448 :         struct bdev_inode *ei = (struct bdev_inode *) foo;
     786                 :        448 :         struct block_device *bdev = &ei->bdev;
     787                 :            : 
     788                 :        448 :         memset(bdev, 0, sizeof(*bdev));
     789                 :        448 :         mutex_init(&bdev->bd_mutex);
     790                 :        448 :         INIT_LIST_HEAD(&bdev->bd_list);
     791                 :            : #ifdef CONFIG_SYSFS
     792                 :        448 :         INIT_LIST_HEAD(&bdev->bd_holder_disks);
     793                 :            : #endif
     794                 :        448 :         bdev->bd_bdi = &noop_backing_dev_info;
     795                 :        448 :         inode_init_once(&ei->vfs_inode);
     796                 :            :         /* Initialize mutex for freeze. */
     797                 :        448 :         mutex_init(&bdev->bd_fsfreeze_mutex);
     798                 :        448 : }
     799                 :            : 
     800                 :         56 : static void bdev_evict_inode(struct inode *inode)
     801                 :            : {
     802                 :         56 :         struct block_device *bdev = &BDEV_I(inode)->bdev;
     803                 :         56 :         truncate_inode_pages_final(&inode->i_data);
     804                 :         56 :         invalidate_inode_buffers(inode); /* is it needed here? */
     805                 :         56 :         clear_inode(inode);
     806                 :         56 :         spin_lock(&bdev_lock);
     807                 :         56 :         list_del_init(&bdev->bd_list);
     808                 :         56 :         spin_unlock(&bdev_lock);
     809                 :            :         /* Detach inode from wb early as bdi_put() may free bdi->wb */
     810         [ +  - ]:         56 :         inode_detach_wb(inode);
     811         [ +  - ]:         56 :         if (bdev->bd_bdi != &noop_backing_dev_info) {
     812                 :         56 :                 bdi_put(bdev->bd_bdi);
     813                 :         56 :                 bdev->bd_bdi = &noop_backing_dev_info;
     814                 :            :         }
     815                 :         56 : }
     816                 :            : 
     817                 :            : static const struct super_operations bdev_sops = {
     818                 :            :         .statfs = simple_statfs,
     819                 :            :         .alloc_inode = bdev_alloc_inode,
     820                 :            :         .free_inode = bdev_free_inode,
     821                 :            :         .drop_inode = generic_delete_inode,
     822                 :            :         .evict_inode = bdev_evict_inode,
     823                 :            : };
     824                 :            : 
     825                 :         28 : static int bd_init_fs_context(struct fs_context *fc)
     826                 :            : {
     827                 :         28 :         struct pseudo_fs_context *ctx = init_pseudo(fc, BDEVFS_MAGIC);
     828         [ +  - ]:         28 :         if (!ctx)
     829                 :            :                 return -ENOMEM;
     830                 :         28 :         fc->s_iflags |= SB_I_CGROUPWB;
     831                 :         28 :         ctx->ops = &bdev_sops;
     832                 :         28 :         return 0;
     833                 :            : }
     834                 :            : 
     835                 :            : static struct file_system_type bd_type = {
     836                 :            :         .name           = "bdev",
     837                 :            :         .init_fs_context = bd_init_fs_context,
     838                 :            :         .kill_sb        = kill_anon_super,
     839                 :            : };
     840                 :            : 
     841                 :            : struct super_block *blockdev_superblock __read_mostly;
     842                 :            : EXPORT_SYMBOL_GPL(blockdev_superblock);
     843                 :            : 
     844                 :         28 : void __init bdev_cache_init(void)
     845                 :            : {
     846                 :         28 :         int err;
     847                 :         28 :         static struct vfsmount *bd_mnt;
     848                 :            : 
     849                 :         28 :         bdev_cachep = kmem_cache_create("bdev_cache", sizeof(struct bdev_inode),
     850                 :            :                         0, (SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT|
     851                 :            :                                 SLAB_MEM_SPREAD|SLAB_ACCOUNT|SLAB_PANIC),
     852                 :            :                         init_once);
     853                 :         28 :         err = register_filesystem(&bd_type);
     854         [ -  + ]:         28 :         if (err)
     855                 :          0 :                 panic("Cannot register bdev pseudo-fs");
     856                 :         28 :         bd_mnt = kern_mount(&bd_type);
     857         [ -  + ]:         28 :         if (IS_ERR(bd_mnt))
     858                 :          0 :                 panic("Cannot create bdev pseudo-fs");
     859                 :         28 :         blockdev_superblock = bd_mnt->mnt_sb;   /* For writeback */
     860                 :         28 : }
     861                 :            : 
     862                 :            : /*
     863                 :            :  * Most likely _very_ bad one - but then it's hardly critical for small
     864                 :            :  * /dev and can be fixed when somebody will need really large one.
     865                 :            :  * Keep in mind that it will be fed through icache hash function too.
     866                 :            :  */
     867                 :        476 : static inline unsigned long hash(dev_t dev)
     868                 :            : {
     869                 :        476 :         return MAJOR(dev)+MINOR(dev);
     870                 :            : }
     871                 :            : 
     872                 :        252 : static int bdev_test(struct inode *inode, void *data)
     873                 :            : {
     874                 :        252 :         return BDEV_I(inode)->bdev.bd_dev == *(dev_t *)data;
     875                 :            : }
     876                 :            : 
     877                 :        392 : static int bdev_set(struct inode *inode, void *data)
     878                 :            : {
     879                 :        392 :         BDEV_I(inode)->bdev.bd_dev = *(dev_t *)data;
     880                 :        392 :         return 0;
     881                 :            : }
     882                 :            : 
     883                 :            : static LIST_HEAD(all_bdevs);
     884                 :            : 
     885                 :            : /*
     886                 :            :  * If there is a bdev inode for this device, unhash it so that it gets evicted
     887                 :            :  * as soon as last inode reference is dropped.
     888                 :            :  */
     889                 :          0 : void bdev_unhash_inode(dev_t dev)
     890                 :            : {
     891                 :          0 :         struct inode *inode;
     892                 :            : 
     893                 :          0 :         inode = ilookup5(blockdev_superblock, hash(dev), bdev_test, &dev);
     894         [ #  # ]:          0 :         if (inode) {
     895         [ #  # ]:          0 :                 remove_inode_hash(inode);
     896                 :          0 :                 iput(inode);
     897                 :            :         }
     898                 :          0 : }
     899                 :            : 
     900                 :        476 : struct block_device *bdget(dev_t dev)
     901                 :            : {
     902                 :        476 :         struct block_device *bdev;
     903                 :        476 :         struct inode *inode;
     904                 :            : 
     905                 :        476 :         inode = iget5_locked(blockdev_superblock, hash(dev),
     906                 :            :                         bdev_test, bdev_set, &dev);
     907                 :            : 
     908         [ +  - ]:        476 :         if (!inode)
     909                 :            :                 return NULL;
     910                 :            : 
     911                 :        476 :         bdev = &BDEV_I(inode)->bdev;
     912                 :            : 
     913         [ +  + ]:        476 :         if (inode->i_state & I_NEW) {
     914                 :        392 :                 bdev->bd_contains = NULL;
     915                 :        392 :                 bdev->bd_super = NULL;
     916                 :        392 :                 bdev->bd_inode = inode;
     917                 :        392 :                 bdev->bd_block_size = i_blocksize(inode);
     918                 :        392 :                 bdev->bd_part_count = 0;
     919                 :        392 :                 bdev->bd_invalidated = 0;
     920                 :        392 :                 inode->i_mode = S_IFBLK;
     921                 :        392 :                 inode->i_rdev = dev;
     922                 :        392 :                 inode->i_bdev = bdev;
     923                 :        392 :                 inode->i_data.a_ops = &def_blk_aops;
     924                 :        392 :                 mapping_set_gfp_mask(&inode->i_data, GFP_USER);
     925                 :        392 :                 spin_lock(&bdev_lock);
     926                 :        392 :                 list_add(&bdev->bd_list, &all_bdevs);
     927                 :        392 :                 spin_unlock(&bdev_lock);
     928                 :        392 :                 unlock_new_inode(inode);
     929                 :            :         }
     930                 :            :         return bdev;
     931                 :            : }
     932                 :            : 
     933                 :            : EXPORT_SYMBOL(bdget);
     934                 :            : 
     935                 :            : /**
     936                 :            :  * bdgrab -- Grab a reference to an already referenced block device
     937                 :            :  * @bdev:       Block device to grab a reference to.
     938                 :            :  */
     939                 :       1008 : struct block_device *bdgrab(struct block_device *bdev)
     940                 :            : {
     941                 :          0 :         ihold(bdev->bd_inode);
     942                 :       1008 :         return bdev;
     943                 :            : }
     944                 :            : EXPORT_SYMBOL(bdgrab);
     945                 :            : 
     946                 :        308 : long nr_blockdev_pages(void)
     947                 :            : {
     948                 :        308 :         struct block_device *bdev;
     949                 :        308 :         long ret = 0;
     950                 :        308 :         spin_lock(&bdev_lock);
     951         [ +  + ]:       2212 :         list_for_each_entry(bdev, &all_bdevs, bd_list) {
     952                 :       1904 :                 ret += bdev->bd_inode->i_mapping->nrpages;
     953                 :            :         }
     954                 :        308 :         spin_unlock(&bdev_lock);
     955                 :        308 :         return ret;
     956                 :            : }
     957                 :            : 
     958                 :       1064 : void bdput(struct block_device *bdev)
     959                 :            : {
     960                 :         56 :         iput(bdev->bd_inode);
     961                 :        140 : }
     962                 :            : 
     963                 :            : EXPORT_SYMBOL(bdput);
     964                 :            :  
     965                 :        868 : static struct block_device *bd_acquire(struct inode *inode)
     966                 :            : {
     967                 :        868 :         struct block_device *bdev;
     968                 :            : 
     969                 :        868 :         spin_lock(&bdev_lock);
     970                 :        868 :         bdev = inode->i_bdev;
     971   [ +  +  +  - ]:        868 :         if (bdev && !inode_unhashed(bdev->bd_inode)) {
     972                 :        504 :                 bdgrab(bdev);
     973                 :        504 :                 spin_unlock(&bdev_lock);
     974                 :        504 :                 return bdev;
     975                 :            :         }
     976                 :        364 :         spin_unlock(&bdev_lock);
     977                 :            : 
     978                 :            :         /*
     979                 :            :          * i_bdev references block device inode that was already shut down
     980                 :            :          * (corresponding device got removed).  Remove the reference and look
     981                 :            :          * up block device inode again just in case new device got
     982                 :            :          * reestablished under the same device number.
     983                 :            :          */
     984         [ -  + ]:        364 :         if (bdev)
     985                 :          0 :                 bd_forget(inode);
     986                 :            : 
     987                 :        364 :         bdev = bdget(inode->i_rdev);
     988         [ +  - ]:        364 :         if (bdev) {
     989                 :        364 :                 spin_lock(&bdev_lock);
     990         [ +  - ]:        364 :                 if (!inode->i_bdev) {
     991                 :            :                         /*
     992                 :            :                          * We take an additional reference to bd_inode,
     993                 :            :                          * and it's released in clear_inode() of inode.
     994                 :            :                          * So, we can access it via ->i_mapping always
     995                 :            :                          * without igrab().
     996                 :            :                          */
     997                 :        364 :                         bdgrab(bdev);
     998                 :        364 :                         inode->i_bdev = bdev;
     999                 :        364 :                         inode->i_mapping = bdev->bd_inode->i_mapping;
    1000                 :            :                 }
    1001                 :        364 :                 spin_unlock(&bdev_lock);
    1002                 :            :         }
    1003                 :            :         return bdev;
    1004                 :            : }
    1005                 :            : 
    1006                 :            : /* Call when you free inode */
    1007                 :            : 
    1008                 :         56 : void bd_forget(struct inode *inode)
    1009                 :            : {
    1010                 :         56 :         struct block_device *bdev = NULL;
    1011                 :            : 
    1012                 :         56 :         spin_lock(&bdev_lock);
    1013         [ -  + ]:         56 :         if (!sb_is_blkdev_sb(inode->i_sb))
    1014                 :          0 :                 bdev = inode->i_bdev;
    1015                 :         56 :         inode->i_bdev = NULL;
    1016                 :         56 :         inode->i_mapping = &inode->i_data;
    1017                 :         56 :         spin_unlock(&bdev_lock);
    1018                 :            : 
    1019         [ -  + ]:         56 :         if (bdev)
    1020                 :          0 :                 bdput(bdev);
    1021                 :         56 : }
    1022                 :            : 
    1023                 :            : /**
    1024                 :            :  * bd_may_claim - test whether a block device can be claimed
    1025                 :            :  * @bdev: block device of interest
    1026                 :            :  * @whole: whole block device containing @bdev, may equal @bdev
    1027                 :            :  * @holder: holder trying to claim @bdev
    1028                 :            :  *
    1029                 :            :  * Test whether @bdev can be claimed by @holder.
    1030                 :            :  *
    1031                 :            :  * CONTEXT:
    1032                 :            :  * spin_lock(&bdev_lock).
    1033                 :            :  *
    1034                 :            :  * RETURNS:
    1035                 :            :  * %true if @bdev can be claimed, %false otherwise.
    1036                 :            :  */
    1037                 :        280 : static bool bd_may_claim(struct block_device *bdev, struct block_device *whole,
    1038                 :            :                          void *holder)
    1039                 :            : {
    1040         [ #  # ]:          0 :         if (bdev->bd_holder == holder)
    1041                 :            :                 return true;     /* already a holder */
    1042   [ +  -  +  -  :        280 :         else if (bdev->bd_holder != NULL)
                   -  - ]
    1043                 :            :                 return false;    /* held by someone else */
    1044   [ -  +  -  +  :        280 :         else if (whole == bdev)
                   -  - ]
    1045                 :            :                 return true;     /* is a whole device which isn't held */
    1046                 :            : 
    1047   [ #  #  #  #  :          0 :         else if (whole->bd_holder == bd_may_claim)
                   #  # ]
    1048                 :            :                 return true;     /* is a partition of a device that is being partitioned */
    1049   [ #  #  #  #  :          0 :         else if (whole->bd_holder != NULL)
                   #  # ]
    1050                 :            :                 return false;    /* is a partition of a held device */
    1051                 :            :         else
    1052                 :          0 :                 return true;     /* is a partition of an un-held device */
    1053                 :            : }
    1054                 :            : 
    1055                 :            : /**
    1056                 :            :  * bd_prepare_to_claim - prepare to claim a block device
    1057                 :            :  * @bdev: block device of interest
    1058                 :            :  * @whole: the whole device containing @bdev, may equal @bdev
    1059                 :            :  * @holder: holder trying to claim @bdev
    1060                 :            :  *
    1061                 :            :  * Prepare to claim @bdev.  This function fails if @bdev is already
    1062                 :            :  * claimed by another holder and waits if another claiming is in
    1063                 :            :  * progress.  This function doesn't actually claim.  On successful
    1064                 :            :  * return, the caller has ownership of bd_claiming and bd_holder[s].
    1065                 :            :  *
    1066                 :            :  * CONTEXT:
    1067                 :            :  * spin_lock(&bdev_lock).  Might release bdev_lock, sleep and regrab
    1068                 :            :  * it multiple times.
    1069                 :            :  *
    1070                 :            :  * RETURNS:
    1071                 :            :  * 0 if @bdev can be claimed, -EBUSY otherwise.
    1072                 :            :  */
    1073                 :        140 : static int bd_prepare_to_claim(struct block_device *bdev,
    1074                 :            :                                struct block_device *whole, void *holder)
    1075                 :            : {
    1076                 :        140 : retry:
    1077                 :            :         /* if someone else claimed, fail */
    1078         [ +  - ]:        140 :         if (!bd_may_claim(bdev, whole, holder))
    1079                 :            :                 return -EBUSY;
    1080                 :            : 
    1081                 :            :         /* if claiming is already in progress, wait for it to finish */
    1082         [ -  + ]:        140 :         if (whole->bd_claiming) {
    1083                 :          0 :                 wait_queue_head_t *wq = bit_waitqueue(&whole->bd_claiming, 0);
    1084                 :          0 :                 DEFINE_WAIT(wait);
    1085                 :            : 
    1086                 :          0 :                 prepare_to_wait(wq, &wait, TASK_UNINTERRUPTIBLE);
    1087                 :          0 :                 spin_unlock(&bdev_lock);
    1088                 :          0 :                 schedule();
    1089                 :          0 :                 finish_wait(wq, &wait);
    1090                 :          0 :                 spin_lock(&bdev_lock);
    1091                 :          0 :                 goto retry;
    1092                 :            :         }
    1093                 :            : 
    1094                 :            :         /* yay, all mine */
    1095                 :            :         return 0;
    1096                 :            : }
    1097                 :            : 
    1098                 :            : static struct gendisk *bdev_get_gendisk(struct block_device *bdev, int *partno)
    1099                 :            : {
    1100                 :            :         struct gendisk *disk = get_gendisk(bdev->bd_dev, partno);
    1101                 :            : 
    1102                 :            :         if (!disk)
    1103                 :            :                 return NULL;
    1104                 :            :         /*
    1105                 :            :          * Now that we hold gendisk reference we make sure bdev we looked up is
    1106                 :            :          * not stale. If it is, it means device got removed and created before
    1107                 :            :          * we looked up gendisk and we fail open in such case. Associating
    1108                 :            :          * unhashed bdev with newly created gendisk could lead to two bdevs
    1109                 :            :          * (and thus two independent caches) being associated with one device
    1110                 :            :          * which is bad.
    1111                 :            :          */
    1112                 :            :         if (inode_unhashed(bdev->bd_inode)) {
    1113                 :            :                 put_disk_and_module(disk);
    1114                 :            :                 return NULL;
    1115                 :            :         }
    1116                 :            :         return disk;
    1117                 :            : }
    1118                 :            : 
    1119                 :            : /**
    1120                 :            :  * bd_start_claiming - start claiming a block device
    1121                 :            :  * @bdev: block device of interest
    1122                 :            :  * @holder: holder trying to claim @bdev
    1123                 :            :  *
    1124                 :            :  * @bdev is about to be opened exclusively.  Check @bdev can be opened
    1125                 :            :  * exclusively and mark that an exclusive open is in progress.  Each
    1126                 :            :  * successful call to this function must be matched with a call to
    1127                 :            :  * either bd_finish_claiming() or bd_abort_claiming() (which do not
    1128                 :            :  * fail).
    1129                 :            :  *
    1130                 :            :  * This function is used to gain exclusive access to the block device
    1131                 :            :  * without actually causing other exclusive open attempts to fail. It
    1132                 :            :  * should be used when the open sequence itself requires exclusive
    1133                 :            :  * access but may subsequently fail.
    1134                 :            :  *
    1135                 :            :  * CONTEXT:
    1136                 :            :  * Might sleep.
    1137                 :            :  *
    1138                 :            :  * RETURNS:
    1139                 :            :  * Pointer to the block device containing @bdev on success, ERR_PTR()
    1140                 :            :  * value on failure.
    1141                 :            :  */
    1142                 :        140 : struct block_device *bd_start_claiming(struct block_device *bdev, void *holder)
    1143                 :            : {
    1144                 :        140 :         struct gendisk *disk;
    1145                 :        140 :         struct block_device *whole;
    1146                 :        140 :         int partno, err;
    1147                 :            : 
    1148                 :        140 :         might_sleep();
    1149                 :            : 
    1150                 :            :         /*
    1151                 :            :          * @bdev might not have been initialized properly yet, look up
    1152                 :            :          * and grab the outer block device the hard way.
    1153                 :            :          */
    1154                 :        140 :         disk = bdev_get_gendisk(bdev, &partno);
    1155         [ +  - ]:        140 :         if (!disk)
    1156                 :            :                 return ERR_PTR(-ENXIO);
    1157                 :            : 
    1158                 :            :         /*
    1159                 :            :          * Normally, @bdev should equal what's returned from bdget_disk()
    1160                 :            :          * if partno is 0; however, some drivers (floppy) use multiple
    1161                 :            :          * bdev's for the same physical device and @bdev may be one of the
    1162                 :            :          * aliases.  Keep @bdev if partno is 0.  This means claimer
    1163                 :            :          * tracking is broken for those devices but it has always been that
    1164                 :            :          * way.
    1165                 :            :          */
    1166         [ -  + ]:        140 :         if (partno)
    1167                 :          0 :                 whole = bdget_disk(disk, 0);
    1168                 :            :         else
    1169                 :        140 :                 whole = bdgrab(bdev);
    1170                 :            : 
    1171                 :        140 :         put_disk_and_module(disk);
    1172         [ +  - ]:        140 :         if (!whole)
    1173                 :            :                 return ERR_PTR(-ENOMEM);
    1174                 :            : 
    1175                 :            :         /* prepare to claim, if successful, mark claiming in progress */
    1176                 :        140 :         spin_lock(&bdev_lock);
    1177                 :            : 
    1178                 :        140 :         err = bd_prepare_to_claim(bdev, whole, holder);
    1179         [ +  - ]:        140 :         if (err == 0) {
    1180                 :        140 :                 whole->bd_claiming = holder;
    1181                 :        140 :                 spin_unlock(&bdev_lock);
    1182                 :        140 :                 return whole;
    1183                 :            :         } else {
    1184                 :          0 :                 spin_unlock(&bdev_lock);
    1185                 :          0 :                 bdput(whole);
    1186                 :          0 :                 return ERR_PTR(err);
    1187                 :            :         }
    1188                 :            : }
    1189                 :            : EXPORT_SYMBOL(bd_start_claiming);
    1190                 :            : 
    1191                 :        140 : static void bd_clear_claiming(struct block_device *whole, void *holder)
    1192                 :            : {
    1193                 :        140 :         lockdep_assert_held(&bdev_lock);
    1194                 :            :         /* tell others that we're done */
    1195         [ -  + ]:        140 :         BUG_ON(whole->bd_claiming != holder);
    1196                 :        140 :         whole->bd_claiming = NULL;
    1197                 :        140 :         wake_up_bit(&whole->bd_claiming, 0);
    1198                 :        140 : }
    1199                 :            : 
    1200                 :            : /**
    1201                 :            :  * bd_finish_claiming - finish claiming of a block device
    1202                 :            :  * @bdev: block device of interest
    1203                 :            :  * @whole: whole block device (returned from bd_start_claiming())
    1204                 :            :  * @holder: holder that has claimed @bdev
    1205                 :            :  *
    1206                 :            :  * Finish exclusive open of a block device. Mark the device as exlusively
    1207                 :            :  * open by the holder and wake up all waiters for exclusive open to finish.
    1208                 :            :  */
    1209                 :        140 : void bd_finish_claiming(struct block_device *bdev, struct block_device *whole,
    1210                 :            :                         void *holder)
    1211                 :            : {
    1212                 :        140 :         spin_lock(&bdev_lock);
    1213   [ +  -  -  + ]:        280 :         BUG_ON(!bd_may_claim(bdev, whole, holder));
    1214                 :            :         /*
    1215                 :            :          * Note that for a whole device bd_holders will be incremented twice,
    1216                 :            :          * and bd_holder will be set to bd_may_claim before being set to holder
    1217                 :            :          */
    1218                 :        140 :         whole->bd_holders++;
    1219                 :        140 :         whole->bd_holder = bd_may_claim;
    1220                 :        140 :         bdev->bd_holders++;
    1221                 :        140 :         bdev->bd_holder = holder;
    1222                 :        140 :         bd_clear_claiming(whole, holder);
    1223                 :        140 :         spin_unlock(&bdev_lock);
    1224                 :        140 : }
    1225                 :            : EXPORT_SYMBOL(bd_finish_claiming);
    1226                 :            : 
    1227                 :            : /**
    1228                 :            :  * bd_abort_claiming - abort claiming of a block device
    1229                 :            :  * @bdev: block device of interest
    1230                 :            :  * @whole: whole block device (returned from bd_start_claiming())
    1231                 :            :  * @holder: holder that has claimed @bdev
    1232                 :            :  *
    1233                 :            :  * Abort claiming of a block device when the exclusive open failed. This can be
    1234                 :            :  * also used when exclusive open is not actually desired and we just needed
    1235                 :            :  * to block other exclusive openers for a while.
    1236                 :            :  */
    1237                 :          0 : void bd_abort_claiming(struct block_device *bdev, struct block_device *whole,
    1238                 :            :                        void *holder)
    1239                 :            : {
    1240                 :          0 :         spin_lock(&bdev_lock);
    1241                 :          0 :         bd_clear_claiming(whole, holder);
    1242                 :          0 :         spin_unlock(&bdev_lock);
    1243                 :          0 : }
    1244                 :            : EXPORT_SYMBOL(bd_abort_claiming);
    1245                 :            : 
    1246                 :            : #ifdef CONFIG_SYSFS
    1247                 :            : struct bd_holder_disk {
    1248                 :            :         struct list_head        list;
    1249                 :            :         struct gendisk          *disk;
    1250                 :            :         int                     refcnt;
    1251                 :            : };
    1252                 :            : 
    1253                 :          0 : static struct bd_holder_disk *bd_find_holder_disk(struct block_device *bdev,
    1254                 :            :                                                   struct gendisk *disk)
    1255                 :            : {
    1256                 :          0 :         struct bd_holder_disk *holder;
    1257                 :            : 
    1258   [ #  #  #  # ]:          0 :         list_for_each_entry(holder, &bdev->bd_holder_disks, list)
    1259   [ #  #  #  # ]:          0 :                 if (holder->disk == disk)
    1260                 :            :                         return holder;
    1261                 :            :         return NULL;
    1262                 :            : }
    1263                 :            : 
    1264                 :          0 : static int add_symlink(struct kobject *from, struct kobject *to)
    1265                 :            : {
    1266                 :          0 :         return sysfs_create_link(from, to, kobject_name(to));
    1267                 :            : }
    1268                 :            : 
    1269                 :          0 : static void del_symlink(struct kobject *from, struct kobject *to)
    1270                 :            : {
    1271                 :          0 :         sysfs_remove_link(from, kobject_name(to));
    1272                 :          0 : }
    1273                 :            : 
    1274                 :            : /**
    1275                 :            :  * bd_link_disk_holder - create symlinks between holding disk and slave bdev
    1276                 :            :  * @bdev: the claimed slave bdev
    1277                 :            :  * @disk: the holding disk
    1278                 :            :  *
    1279                 :            :  * DON'T USE THIS UNLESS YOU'RE ALREADY USING IT.
    1280                 :            :  *
    1281                 :            :  * This functions creates the following sysfs symlinks.
    1282                 :            :  *
    1283                 :            :  * - from "slaves" directory of the holder @disk to the claimed @bdev
    1284                 :            :  * - from "holders" directory of the @bdev to the holder @disk
    1285                 :            :  *
    1286                 :            :  * For example, if /dev/dm-0 maps to /dev/sda and disk for dm-0 is
    1287                 :            :  * passed to bd_link_disk_holder(), then:
    1288                 :            :  *
    1289                 :            :  *   /sys/block/dm-0/slaves/sda --> /sys/block/sda
    1290                 :            :  *   /sys/block/sda/holders/dm-0 --> /sys/block/dm-0
    1291                 :            :  *
    1292                 :            :  * The caller must have claimed @bdev before calling this function and
    1293                 :            :  * ensure that both @bdev and @disk are valid during the creation and
    1294                 :            :  * lifetime of these symlinks.
    1295                 :            :  *
    1296                 :            :  * CONTEXT:
    1297                 :            :  * Might sleep.
    1298                 :            :  *
    1299                 :            :  * RETURNS:
    1300                 :            :  * 0 on success, -errno on failure.
    1301                 :            :  */
    1302                 :          0 : int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk)
    1303                 :            : {
    1304                 :          0 :         struct bd_holder_disk *holder;
    1305                 :          0 :         int ret = 0;
    1306                 :            : 
    1307                 :          0 :         mutex_lock(&bdev->bd_mutex);
    1308                 :            : 
    1309         [ #  # ]:          0 :         WARN_ON_ONCE(!bdev->bd_holder);
    1310                 :            : 
    1311                 :            :         /* FIXME: remove the following once add_disk() handles errors */
    1312   [ #  #  #  #  :          0 :         if (WARN_ON(!disk->slave_dir || !bdev->bd_part->holder_dir))
             #  #  #  # ]
    1313                 :          0 :                 goto out_unlock;
    1314                 :            : 
    1315                 :          0 :         holder = bd_find_holder_disk(bdev, disk);
    1316         [ #  # ]:          0 :         if (holder) {
    1317                 :          0 :                 holder->refcnt++;
    1318                 :          0 :                 goto out_unlock;
    1319                 :            :         }
    1320                 :            : 
    1321                 :          0 :         holder = kzalloc(sizeof(*holder), GFP_KERNEL);
    1322         [ #  # ]:          0 :         if (!holder) {
    1323                 :          0 :                 ret = -ENOMEM;
    1324                 :          0 :                 goto out_unlock;
    1325                 :            :         }
    1326                 :            : 
    1327                 :          0 :         INIT_LIST_HEAD(&holder->list);
    1328                 :          0 :         holder->disk = disk;
    1329                 :          0 :         holder->refcnt = 1;
    1330                 :            : 
    1331                 :          0 :         ret = add_symlink(disk->slave_dir, &part_to_dev(bdev->bd_part)->kobj);
    1332         [ #  # ]:          0 :         if (ret)
    1333                 :          0 :                 goto out_free;
    1334                 :            : 
    1335                 :          0 :         ret = add_symlink(bdev->bd_part->holder_dir, &disk_to_dev(disk)->kobj);
    1336         [ #  # ]:          0 :         if (ret)
    1337                 :          0 :                 goto out_del;
    1338                 :            :         /*
    1339                 :            :          * bdev could be deleted beneath us which would implicitly destroy
    1340                 :            :          * the holder directory.  Hold on to it.
    1341                 :            :          */
    1342                 :          0 :         kobject_get(bdev->bd_part->holder_dir);
    1343                 :            : 
    1344                 :          0 :         list_add(&holder->list, &bdev->bd_holder_disks);
    1345                 :          0 :         goto out_unlock;
    1346                 :            : 
    1347                 :            : out_del:
    1348                 :          0 :         del_symlink(disk->slave_dir, &part_to_dev(bdev->bd_part)->kobj);
    1349                 :          0 : out_free:
    1350                 :          0 :         kfree(holder);
    1351                 :          0 : out_unlock:
    1352                 :          0 :         mutex_unlock(&bdev->bd_mutex);
    1353                 :          0 :         return ret;
    1354                 :            : }
    1355                 :            : EXPORT_SYMBOL_GPL(bd_link_disk_holder);
    1356                 :            : 
    1357                 :            : /**
    1358                 :            :  * bd_unlink_disk_holder - destroy symlinks created by bd_link_disk_holder()
    1359                 :            :  * @bdev: the calimed slave bdev
    1360                 :            :  * @disk: the holding disk
    1361                 :            :  *
    1362                 :            :  * DON'T USE THIS UNLESS YOU'RE ALREADY USING IT.
    1363                 :            :  *
    1364                 :            :  * CONTEXT:
    1365                 :            :  * Might sleep.
    1366                 :            :  */
    1367                 :          0 : void bd_unlink_disk_holder(struct block_device *bdev, struct gendisk *disk)
    1368                 :            : {
    1369                 :          0 :         struct bd_holder_disk *holder;
    1370                 :            : 
    1371                 :          0 :         mutex_lock(&bdev->bd_mutex);
    1372                 :            : 
    1373                 :          0 :         holder = bd_find_holder_disk(bdev, disk);
    1374                 :            : 
    1375   [ #  #  #  #  :          0 :         if (!WARN_ON_ONCE(holder == NULL) && !--holder->refcnt) {
                   #  # ]
    1376                 :          0 :                 del_symlink(disk->slave_dir, &part_to_dev(bdev->bd_part)->kobj);
    1377                 :          0 :                 del_symlink(bdev->bd_part->holder_dir,
    1378                 :            :                             &disk_to_dev(disk)->kobj);
    1379                 :          0 :                 kobject_put(bdev->bd_part->holder_dir);
    1380                 :          0 :                 list_del_init(&holder->list);
    1381                 :          0 :                 kfree(holder);
    1382                 :            :         }
    1383                 :            : 
    1384                 :          0 :         mutex_unlock(&bdev->bd_mutex);
    1385                 :          0 : }
    1386                 :            : EXPORT_SYMBOL_GPL(bd_unlink_disk_holder);
    1387                 :            : #endif
    1388                 :            : 
    1389                 :            : /**
    1390                 :            :  * flush_disk - invalidates all buffer-cache entries on a disk
    1391                 :            :  *
    1392                 :            :  * @bdev:      struct block device to be flushed
    1393                 :            :  * @kill_dirty: flag to guide handling of dirty inodes
    1394                 :            :  *
    1395                 :            :  * Invalidates all buffer-cache entries on a disk. It should be called
    1396                 :            :  * when a disk has been changed -- either by a media change or online
    1397                 :            :  * resize.
    1398                 :            :  */
    1399                 :         28 : static void flush_disk(struct block_device *bdev, bool kill_dirty)
    1400                 :            : {
    1401         [ -  + ]:         28 :         if (__invalidate_device(bdev, kill_dirty)) {
    1402                 :          0 :                 printk(KERN_WARNING "VFS: busy inodes on changed media or "
    1403                 :            :                        "resized disk %s\n",
    1404         [ #  # ]:          0 :                        bdev->bd_disk ? bdev->bd_disk->disk_name : "");
    1405                 :            :         }
    1406                 :         28 :         bdev->bd_invalidated = 1;
    1407                 :         28 : }
    1408                 :            : 
    1409                 :            : /**
    1410                 :            :  * check_disk_size_change - checks for disk size change and adjusts bdev size.
    1411                 :            :  * @disk: struct gendisk to check
    1412                 :            :  * @bdev: struct bdev to adjust.
    1413                 :            :  * @verbose: if %true log a message about a size change if there is any
    1414                 :            :  *
    1415                 :            :  * This routine checks to see if the bdev size does not match the disk size
    1416                 :            :  * and adjusts it if it differs. When shrinking the bdev size, its all caches
    1417                 :            :  * are freed.
    1418                 :            :  */
    1419                 :         84 : static void check_disk_size_change(struct gendisk *disk,
    1420                 :            :                 struct block_device *bdev, bool verbose)
    1421                 :            : {
    1422                 :         84 :         loff_t disk_size, bdev_size;
    1423                 :            : 
    1424         [ -  + ]:         84 :         disk_size = (loff_t)get_capacity(disk) << 9;
    1425         [ -  + ]:         84 :         bdev_size = i_size_read(bdev->bd_inode);
    1426         [ -  + ]:         84 :         if (disk_size != bdev_size) {
    1427         [ #  # ]:          0 :                 if (verbose) {
    1428                 :          0 :                         printk(KERN_INFO
    1429                 :            :                                "%s: detected capacity change from %lld to %lld\n",
    1430                 :          0 :                                disk->disk_name, bdev_size, disk_size);
    1431                 :            :                 }
    1432         [ #  # ]:          0 :                 i_size_write(bdev->bd_inode, disk_size);
    1433         [ #  # ]:          0 :                 if (bdev_size > disk_size)
    1434                 :          0 :                         flush_disk(bdev, false);
    1435                 :            :         }
    1436                 :         84 :         bdev->bd_invalidated = 0;
    1437                 :         84 : }
    1438                 :            : 
    1439                 :            : /**
    1440                 :            :  * revalidate_disk - wrapper for lower-level driver's revalidate_disk call-back
    1441                 :            :  * @disk: struct gendisk to be revalidated
    1442                 :            :  *
    1443                 :            :  * This routine is a wrapper for lower-level driver's revalidate_disk
    1444                 :            :  * call-backs.  It is used to do common pre and post operations needed
    1445                 :            :  * for all revalidate_disk operations.
    1446                 :            :  */
    1447                 :          0 : int revalidate_disk(struct gendisk *disk)
    1448                 :            : {
    1449                 :          0 :         int ret = 0;
    1450                 :            : 
    1451         [ #  # ]:          0 :         if (disk->fops->revalidate_disk)
    1452                 :          0 :                 ret = disk->fops->revalidate_disk(disk);
    1453                 :            : 
    1454                 :            :         /*
    1455                 :            :          * Hidden disks don't have associated bdev so there's no point in
    1456                 :            :          * revalidating it.
    1457                 :            :          */
    1458         [ #  # ]:          0 :         if (!(disk->flags & GENHD_FL_HIDDEN)) {
    1459                 :          0 :                 struct block_device *bdev = bdget_disk(disk, 0);
    1460                 :            : 
    1461         [ #  # ]:          0 :                 if (!bdev)
    1462                 :            :                         return ret;
    1463                 :            : 
    1464                 :          0 :                 mutex_lock(&bdev->bd_mutex);
    1465                 :          0 :                 check_disk_size_change(disk, bdev, ret == 0);
    1466                 :          0 :                 mutex_unlock(&bdev->bd_mutex);
    1467                 :          0 :                 bdput(bdev);
    1468                 :            :         }
    1469                 :            :         return ret;
    1470                 :            : }
    1471                 :            : EXPORT_SYMBOL(revalidate_disk);
    1472                 :            : 
    1473                 :            : /*
    1474                 :            :  * This routine checks whether a removable media has been changed,
    1475                 :            :  * and invalidates all buffer-cache-entries in that case. This
    1476                 :            :  * is a relatively slow routine, so we have to try to minimize using
    1477                 :            :  * it. Thus it is called only upon a 'mount' or 'open'. This
    1478                 :            :  * is the best way of combining speed and utility, I think.
    1479                 :            :  * People changing diskettes in the middle of an operation deserve
    1480                 :            :  * to lose :-)
    1481                 :            :  */
    1482                 :        112 : int check_disk_change(struct block_device *bdev)
    1483                 :            : {
    1484                 :        112 :         struct gendisk *disk = bdev->bd_disk;
    1485                 :        112 :         const struct block_device_operations *bdops = disk->fops;
    1486                 :        112 :         unsigned int events;
    1487                 :            : 
    1488                 :        112 :         events = disk_clear_events(disk, DISK_EVENT_MEDIA_CHANGE |
    1489                 :            :                                    DISK_EVENT_EJECT_REQUEST);
    1490         [ +  + ]:        112 :         if (!(events & DISK_EVENT_MEDIA_CHANGE))
    1491                 :            :                 return 0;
    1492                 :            : 
    1493                 :         28 :         flush_disk(bdev, true);
    1494         [ +  - ]:         28 :         if (bdops->revalidate_disk)
    1495                 :         28 :                 bdops->revalidate_disk(bdev->bd_disk);
    1496                 :            :         return 1;
    1497                 :            : }
    1498                 :            : 
    1499                 :            : EXPORT_SYMBOL(check_disk_change);
    1500                 :            : 
    1501                 :        504 : void bd_set_size(struct block_device *bdev, loff_t size)
    1502                 :            : {
    1503                 :        504 :         inode_lock(bdev->bd_inode);
    1504                 :        504 :         i_size_write(bdev->bd_inode, size);
    1505                 :        504 :         inode_unlock(bdev->bd_inode);
    1506                 :          0 : }
    1507                 :            : EXPORT_SYMBOL(bd_set_size);
    1508                 :            : 
    1509                 :            : static void __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part);
    1510                 :            : 
    1511                 :         84 : int bdev_disk_changed(struct block_device *bdev, bool invalidate)
    1512                 :            : {
    1513                 :         84 :         struct gendisk *disk = bdev->bd_disk;
    1514                 :         84 :         int ret;
    1515                 :            : 
    1516                 :         84 :         lockdep_assert_held(&bdev->bd_mutex);
    1517                 :            : 
    1518                 :         84 : rescan:
    1519                 :         84 :         ret = blk_drop_partitions(disk, bdev);
    1520         [ -  + ]:         84 :         if (ret)
    1521                 :          0 :                 return ret;
    1522                 :            : 
    1523         [ -  + ]:         84 :         if (invalidate)
    1524                 :          0 :                 set_capacity(disk, 0);
    1525         [ +  - ]:         84 :         else if (disk->fops->revalidate_disk)
    1526                 :         84 :                 disk->fops->revalidate_disk(disk);
    1527                 :            : 
    1528                 :         84 :         check_disk_size_change(disk, bdev, !invalidate);
    1529                 :            : 
    1530         [ +  - ]:         84 :         if (get_capacity(disk)) {
    1531                 :         84 :                 ret = blk_add_partitions(disk, bdev);
    1532         [ -  + ]:         84 :                 if (ret == -EAGAIN)
    1533                 :          0 :                         goto rescan;
    1534         [ #  # ]:          0 :         } else if (invalidate) {
    1535                 :            :                 /*
    1536                 :            :                  * Tell userspace that the media / partition table may have
    1537                 :            :                  * changed.
    1538                 :            :                  */
    1539                 :          0 :                 kobject_uevent(&disk_to_dev(disk)->kobj, KOBJ_CHANGE);
    1540                 :            :         }
    1541                 :            : 
    1542                 :            :         return ret;
    1543                 :            : }
    1544                 :            : /*
    1545                 :            :  * Only exported for for loop and dasd for historic reasons.  Don't use in new
    1546                 :            :  * code!
    1547                 :            :  */
    1548                 :            : EXPORT_SYMBOL_GPL(bdev_disk_changed);
    1549                 :            : 
    1550                 :            : /*
    1551                 :            :  * bd_mutex locking:
    1552                 :            :  *
    1553                 :            :  *  mutex_lock(part->bd_mutex)
    1554                 :            :  *    mutex_lock_nested(whole->bd_mutex, 1)
    1555                 :            :  */
    1556                 :            : 
    1557                 :        924 : static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
    1558                 :            : {
    1559                 :        924 :         struct gendisk *disk;
    1560                 :        924 :         int ret;
    1561                 :        924 :         int partno;
    1562                 :        924 :         int perm = 0;
    1563                 :        924 :         bool first_open = false;
    1564                 :            : 
    1565                 :        924 :         if (mode & FMODE_READ)
    1566                 :            :                 perm |= MAY_READ;
    1567                 :        924 :         if (mode & FMODE_WRITE)
    1568                 :            :                 perm |= MAY_WRITE;
    1569                 :            :         /*
    1570                 :            :          * hooks: /n/, see "layering violations".
    1571                 :            :          */
    1572                 :        924 :         if (!for_part) {
    1573                 :            :                 ret = devcgroup_inode_permission(bdev->bd_inode, perm);
    1574                 :            :                 if (ret != 0) {
    1575                 :            :                         bdput(bdev);
    1576                 :            :                         return ret;
    1577                 :            :                 }
    1578                 :            :         }
    1579                 :            : 
    1580                 :            :  restart:
    1581                 :            : 
    1582                 :        924 :         ret = -ENXIO;
    1583                 :        924 :         disk = bdev_get_gendisk(bdev, &partno);
    1584         [ -  + ]:        924 :         if (!disk)
    1585                 :          0 :                 goto out;
    1586                 :            : 
    1587                 :        924 :         disk_block_events(disk);
    1588                 :        924 :         mutex_lock_nested(&bdev->bd_mutex, for_part);
    1589         [ +  + ]:        924 :         if (!bdev->bd_openers) {
    1590                 :        504 :                 first_open = true;
    1591                 :        504 :                 bdev->bd_disk = disk;
    1592                 :        504 :                 bdev->bd_queue = disk->queue;
    1593                 :        504 :                 bdev->bd_contains = bdev;
    1594                 :        504 :                 bdev->bd_partno = partno;
    1595                 :            : 
    1596         [ +  - ]:        504 :                 if (!partno) {
    1597                 :        504 :                         ret = -ENXIO;
    1598                 :        504 :                         bdev->bd_part = disk_get_part(disk, partno);
    1599         [ -  + ]:        504 :                         if (!bdev->bd_part)
    1600                 :          0 :                                 goto out_clear;
    1601                 :            : 
    1602                 :        504 :                         ret = 0;
    1603         [ +  - ]:        504 :                         if (disk->fops->open) {
    1604                 :        504 :                                 ret = disk->fops->open(bdev, mode);
    1605         [ -  + ]:        504 :                                 if (ret == -ERESTARTSYS) {
    1606                 :            :                                         /* Lost a race with 'disk' being
    1607                 :            :                                          * deleted, try again.
    1608                 :            :                                          * See md.c
    1609                 :            :                                          */
    1610         [ #  # ]:          0 :                                         disk_put_part(bdev->bd_part);
    1611                 :          0 :                                         bdev->bd_part = NULL;
    1612                 :          0 :                                         bdev->bd_disk = NULL;
    1613                 :          0 :                                         bdev->bd_queue = NULL;
    1614                 :          0 :                                         mutex_unlock(&bdev->bd_mutex);
    1615                 :          0 :                                         disk_unblock_events(disk);
    1616                 :          0 :                                         put_disk_and_module(disk);
    1617                 :          0 :                                         goto restart;
    1618                 :            :                                 }
    1619                 :            :                         }
    1620                 :            : 
    1621         [ +  - ]:        504 :                         if (!ret) {
    1622                 :        504 :                                 bd_set_size(bdev,(loff_t)get_capacity(disk)<<9);
    1623                 :        504 :                                 set_init_blocksize(bdev);
    1624                 :            :                         }
    1625                 :            : 
    1626                 :            :                         /*
    1627                 :            :                          * If the device is invalidated, rescan partition
    1628                 :            :                          * if open succeeded or failed with -ENOMEDIUM.
    1629                 :            :                          * The latter is necessary to prevent ghost
    1630                 :            :                          * partitions on a removed medium.
    1631                 :            :                          */
    1632         [ +  + ]:        504 :                         if (bdev->bd_invalidated &&
    1633         [ +  - ]:         84 :                             (!ret || ret == -ENOMEDIUM))
    1634                 :         84 :                                 bdev_disk_changed(bdev, ret == -ENOMEDIUM);
    1635                 :            : 
    1636         [ -  + ]:        504 :                         if (ret)
    1637                 :          0 :                                 goto out_clear;
    1638                 :            :                 } else {
    1639                 :          0 :                         struct block_device *whole;
    1640                 :          0 :                         whole = bdget_disk(disk, 0);
    1641                 :          0 :                         ret = -ENOMEM;
    1642         [ #  # ]:          0 :                         if (!whole)
    1643                 :          0 :                                 goto out_clear;
    1644         [ #  # ]:          0 :                         BUG_ON(for_part);
    1645                 :          0 :                         ret = __blkdev_get(whole, mode, 1);
    1646         [ #  # ]:          0 :                         if (ret)
    1647                 :          0 :                                 goto out_clear;
    1648                 :          0 :                         bdev->bd_contains = whole;
    1649                 :          0 :                         bdev->bd_part = disk_get_part(disk, partno);
    1650   [ #  #  #  # ]:          0 :                         if (!(disk->flags & GENHD_FL_UP) ||
    1651         [ #  # ]:          0 :                             !bdev->bd_part || !bdev->bd_part->nr_sects) {
    1652                 :          0 :                                 ret = -ENXIO;
    1653                 :          0 :                                 goto out_clear;
    1654                 :            :                         }
    1655                 :          0 :                         bd_set_size(bdev, (loff_t)bdev->bd_part->nr_sects << 9);
    1656                 :          0 :                         set_init_blocksize(bdev);
    1657                 :            :                 }
    1658                 :            : 
    1659         [ +  + ]:        504 :                 if (bdev->bd_bdi == &noop_backing_dev_info)
    1660                 :        392 :                         bdev->bd_bdi = bdi_get(disk->queue->backing_dev_info);
    1661                 :            :         } else {
    1662         [ +  - ]:        420 :                 if (bdev->bd_contains == bdev) {
    1663                 :        420 :                         ret = 0;
    1664         [ +  - ]:        420 :                         if (bdev->bd_disk->fops->open)
    1665                 :        420 :                                 ret = bdev->bd_disk->fops->open(bdev, mode);
    1666                 :            :                         /* the same as first opener case, read comment there */
    1667         [ -  + ]:        420 :                         if (bdev->bd_invalidated &&
    1668         [ #  # ]:          0 :                             (!ret || ret == -ENOMEDIUM))
    1669                 :          0 :                                 bdev_disk_changed(bdev, ret == -ENOMEDIUM);
    1670         [ -  + ]:        420 :                         if (ret)
    1671                 :          0 :                                 goto out_unlock_bdev;
    1672                 :            :                 }
    1673                 :            :         }
    1674                 :        924 :         bdev->bd_openers++;
    1675         [ -  + ]:        924 :         if (for_part)
    1676                 :          0 :                 bdev->bd_part_count++;
    1677                 :        924 :         mutex_unlock(&bdev->bd_mutex);
    1678                 :        924 :         disk_unblock_events(disk);
    1679                 :            :         /* only one opener holds refs to the module and disk */
    1680         [ +  + ]:        924 :         if (!first_open)
    1681                 :        420 :                 put_disk_and_module(disk);
    1682                 :            :         return 0;
    1683                 :            : 
    1684                 :          0 :  out_clear:
    1685         [ #  # ]:          0 :         disk_put_part(bdev->bd_part);
    1686                 :          0 :         bdev->bd_disk = NULL;
    1687                 :          0 :         bdev->bd_part = NULL;
    1688                 :          0 :         bdev->bd_queue = NULL;
    1689         [ #  # ]:          0 :         if (bdev != bdev->bd_contains)
    1690                 :          0 :                 __blkdev_put(bdev->bd_contains, mode, 1);
    1691                 :          0 :         bdev->bd_contains = NULL;
    1692                 :          0 :  out_unlock_bdev:
    1693                 :          0 :         mutex_unlock(&bdev->bd_mutex);
    1694                 :          0 :         disk_unblock_events(disk);
    1695                 :          0 :         put_disk_and_module(disk);
    1696                 :          0 :  out:
    1697                 :          0 :         bdput(bdev);
    1698                 :            : 
    1699                 :          0 :         return ret;
    1700                 :            : }
    1701                 :            : 
    1702                 :            : /**
    1703                 :            :  * blkdev_get - open a block device
    1704                 :            :  * @bdev: block_device to open
    1705                 :            :  * @mode: FMODE_* mask
    1706                 :            :  * @holder: exclusive holder identifier
    1707                 :            :  *
    1708                 :            :  * Open @bdev with @mode.  If @mode includes %FMODE_EXCL, @bdev is
    1709                 :            :  * open with exclusive access.  Specifying %FMODE_EXCL with %NULL
    1710                 :            :  * @holder is invalid.  Exclusive opens may nest for the same @holder.
    1711                 :            :  *
    1712                 :            :  * On success, the reference count of @bdev is unchanged.  On failure,
    1713                 :            :  * @bdev is put.
    1714                 :            :  *
    1715                 :            :  * CONTEXT:
    1716                 :            :  * Might sleep.
    1717                 :            :  *
    1718                 :            :  * RETURNS:
    1719                 :            :  * 0 on success, -errno on failure.
    1720                 :            :  */
    1721                 :        924 : int blkdev_get(struct block_device *bdev, fmode_t mode, void *holder)
    1722                 :            : {
    1723                 :        924 :         struct block_device *whole = NULL;
    1724                 :        924 :         int res;
    1725                 :            : 
    1726   [ +  +  +  -  :       1848 :         WARN_ON_ONCE((mode & FMODE_EXCL) && !holder);
                   -  + ]
    1727                 :            : 
    1728   [ +  +  +  - ]:        924 :         if ((mode & FMODE_EXCL) && holder) {
    1729                 :        140 :                 whole = bd_start_claiming(bdev, holder);
    1730         [ -  + ]:        140 :                 if (IS_ERR(whole)) {
    1731                 :          0 :                         bdput(bdev);
    1732                 :          0 :                         return PTR_ERR(whole);
    1733                 :            :                 }
    1734                 :            :         }
    1735                 :            : 
    1736                 :        924 :         res = __blkdev_get(bdev, mode, 0);
    1737                 :            : 
    1738         [ +  + ]:        924 :         if (whole) {
    1739                 :        140 :                 struct gendisk *disk = whole->bd_disk;
    1740                 :            : 
    1741                 :            :                 /* finish claiming */
    1742                 :        140 :                 mutex_lock(&bdev->bd_mutex);
    1743         [ +  - ]:        140 :                 if (!res)
    1744                 :        140 :                         bd_finish_claiming(bdev, whole, holder);
    1745                 :            :                 else
    1746                 :          0 :                         bd_abort_claiming(bdev, whole, holder);
    1747                 :            :                 /*
    1748                 :            :                  * Block event polling for write claims if requested.  Any
    1749                 :            :                  * write holder makes the write_holder state stick until
    1750                 :            :                  * all are released.  This is good enough and tracking
    1751                 :            :                  * individual writeable reference is too fragile given the
    1752                 :            :                  * way @mode is used in blkdev_get/put().
    1753                 :            :                  */
    1754   [ +  -  +  +  :        140 :                 if (!res && (mode & FMODE_WRITE) && !bdev->bd_write_holder &&
                   +  - ]
    1755         [ -  + ]:         28 :                     (disk->flags & GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE)) {
    1756                 :          0 :                         bdev->bd_write_holder = true;
    1757                 :          0 :                         disk_block_events(disk);
    1758                 :            :                 }
    1759                 :            : 
    1760                 :        140 :                 mutex_unlock(&bdev->bd_mutex);
    1761                 :        140 :                 bdput(whole);
    1762                 :            :         }
    1763                 :            : 
    1764                 :            :         return res;
    1765                 :            : }
    1766                 :            : EXPORT_SYMBOL(blkdev_get);
    1767                 :            : 
    1768                 :            : /**
    1769                 :            :  * blkdev_get_by_path - open a block device by name
    1770                 :            :  * @path: path to the block device to open
    1771                 :            :  * @mode: FMODE_* mask
    1772                 :            :  * @holder: exclusive holder identifier
    1773                 :            :  *
    1774                 :            :  * Open the blockdevice described by the device file at @path.  @mode
    1775                 :            :  * and @holder are identical to blkdev_get().
    1776                 :            :  *
    1777                 :            :  * On success, the returned block_device has reference count of one.
    1778                 :            :  *
    1779                 :            :  * CONTEXT:
    1780                 :            :  * Might sleep.
    1781                 :            :  *
    1782                 :            :  * RETURNS:
    1783                 :            :  * Pointer to block_device on success, ERR_PTR(-errno) on failure.
    1784                 :            :  */
    1785                 :        112 : struct block_device *blkdev_get_by_path(const char *path, fmode_t mode,
    1786                 :            :                                         void *holder)
    1787                 :            : {
    1788                 :        112 :         struct block_device *bdev;
    1789                 :        112 :         int err;
    1790                 :            : 
    1791                 :        112 :         bdev = lookup_bdev(path);
    1792         [ +  - ]:        112 :         if (IS_ERR(bdev))
    1793                 :            :                 return bdev;
    1794                 :            : 
    1795                 :        112 :         err = blkdev_get(bdev, mode, holder);
    1796         [ -  + ]:        112 :         if (err)
    1797                 :          0 :                 return ERR_PTR(err);
    1798                 :            : 
    1799   [ +  +  -  + ]:        112 :         if ((mode & FMODE_WRITE) && bdev_read_only(bdev)) {
    1800                 :          0 :                 blkdev_put(bdev, mode);
    1801                 :          0 :                 return ERR_PTR(-EACCES);
    1802                 :            :         }
    1803                 :            : 
    1804                 :            :         return bdev;
    1805                 :            : }
    1806                 :            : EXPORT_SYMBOL(blkdev_get_by_path);
    1807                 :            : 
    1808                 :            : /**
    1809                 :            :  * blkdev_get_by_dev - open a block device by device number
    1810                 :            :  * @dev: device number of block device to open
    1811                 :            :  * @mode: FMODE_* mask
    1812                 :            :  * @holder: exclusive holder identifier
    1813                 :            :  *
    1814                 :            :  * Open the blockdevice described by device number @dev.  @mode and
    1815                 :            :  * @holder are identical to blkdev_get().
    1816                 :            :  *
    1817                 :            :  * Use it ONLY if you really do not have anything better - i.e. when
    1818                 :            :  * you are behind a truly sucky interface and all you are given is a
    1819                 :            :  * device number.  _Never_ to be used for internal purposes.  If you
    1820                 :            :  * ever need it - reconsider your API.
    1821                 :            :  *
    1822                 :            :  * On success, the returned block_device has reference count of one.
    1823                 :            :  *
    1824                 :            :  * CONTEXT:
    1825                 :            :  * Might sleep.
    1826                 :            :  *
    1827                 :            :  * RETURNS:
    1828                 :            :  * Pointer to block_device on success, ERR_PTR(-errno) on failure.
    1829                 :            :  */
    1830                 :          0 : struct block_device *blkdev_get_by_dev(dev_t dev, fmode_t mode, void *holder)
    1831                 :            : {
    1832                 :          0 :         struct block_device *bdev;
    1833                 :          0 :         int err;
    1834                 :            : 
    1835                 :          0 :         bdev = bdget(dev);
    1836         [ #  # ]:          0 :         if (!bdev)
    1837                 :            :                 return ERR_PTR(-ENOMEM);
    1838                 :            : 
    1839                 :          0 :         err = blkdev_get(bdev, mode, holder);
    1840         [ #  # ]:          0 :         if (err)
    1841                 :          0 :                 return ERR_PTR(err);
    1842                 :            : 
    1843                 :            :         return bdev;
    1844                 :            : }
    1845                 :            : EXPORT_SYMBOL(blkdev_get_by_dev);
    1846                 :            : 
    1847                 :        756 : static int blkdev_open(struct inode * inode, struct file * filp)
    1848                 :            : {
    1849                 :        756 :         struct block_device *bdev;
    1850                 :            : 
    1851                 :            :         /*
    1852                 :            :          * Preserve backwards compatibility and allow large file access
    1853                 :            :          * even if userspace doesn't ask for it explicitly. Some mkfs
    1854                 :            :          * binary needs it. We might want to drop this workaround
    1855                 :            :          * during an unstable branch.
    1856                 :            :          */
    1857                 :        756 :         filp->f_flags |= O_LARGEFILE;
    1858                 :            : 
    1859                 :        756 :         filp->f_mode |= FMODE_NOWAIT;
    1860                 :            : 
    1861         [ +  + ]:        756 :         if (filp->f_flags & O_NDELAY)
    1862                 :        420 :                 filp->f_mode |= FMODE_NDELAY;
    1863         [ +  + ]:        756 :         if (filp->f_flags & O_EXCL)
    1864                 :         28 :                 filp->f_mode |= FMODE_EXCL;
    1865         [ -  + ]:        756 :         if ((filp->f_flags & O_ACCMODE) == 3)
    1866                 :          0 :                 filp->f_mode |= FMODE_WRITE_IOCTL;
    1867                 :            : 
    1868                 :        756 :         bdev = bd_acquire(inode);
    1869         [ +  - ]:        756 :         if (bdev == NULL)
    1870                 :            :                 return -ENOMEM;
    1871                 :            : 
    1872                 :        756 :         filp->f_mapping = bdev->bd_inode->i_mapping;
    1873                 :        756 :         filp->f_wb_err = filemap_sample_wb_err(filp->f_mapping);
    1874                 :            : 
    1875                 :        756 :         return blkdev_get(bdev, filp->f_mode, filp);
    1876                 :            : }
    1877                 :            : 
    1878                 :        868 : static void __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part)
    1879                 :            : {
    1880                 :        868 :         struct gendisk *disk = bdev->bd_disk;
    1881                 :        868 :         struct block_device *victim = NULL;
    1882                 :            : 
    1883                 :        868 :         mutex_lock_nested(&bdev->bd_mutex, for_part);
    1884         [ -  + ]:        868 :         if (for_part)
    1885                 :          0 :                 bdev->bd_part_count--;
    1886                 :            : 
    1887         [ +  + ]:        868 :         if (!--bdev->bd_openers) {
    1888         [ -  + ]:        448 :                 WARN_ON_ONCE(bdev->bd_holders);
    1889                 :        448 :                 sync_blockdev(bdev);
    1890                 :        448 :                 kill_bdev(bdev);
    1891                 :            : 
    1892                 :        448 :                 bdev_write_inode(bdev);
    1893                 :            :         }
    1894         [ +  - ]:        868 :         if (bdev->bd_contains == bdev) {
    1895         [ +  - ]:        868 :                 if (disk->fops->release)
    1896                 :        868 :                         disk->fops->release(disk, mode);
    1897                 :            :         }
    1898         [ +  + ]:        868 :         if (!bdev->bd_openers) {
    1899         [ +  - ]:        448 :                 disk_put_part(bdev->bd_part);
    1900                 :        448 :                 bdev->bd_part = NULL;
    1901                 :        448 :                 bdev->bd_disk = NULL;
    1902         [ -  + ]:        448 :                 if (bdev != bdev->bd_contains)
    1903                 :          0 :                         victim = bdev->bd_contains;
    1904                 :        448 :                 bdev->bd_contains = NULL;
    1905                 :            : 
    1906                 :        448 :                 put_disk_and_module(disk);
    1907                 :            :         }
    1908                 :        868 :         mutex_unlock(&bdev->bd_mutex);
    1909                 :        868 :         bdput(bdev);
    1910         [ -  + ]:        868 :         if (victim)
    1911                 :            :                 __blkdev_put(victim, mode, 1);
    1912                 :        868 : }
    1913                 :            : 
    1914                 :        868 : void blkdev_put(struct block_device *bdev, fmode_t mode)
    1915                 :            : {
    1916                 :        868 :         mutex_lock(&bdev->bd_mutex);
    1917                 :            : 
    1918         [ +  + ]:        868 :         if (mode & FMODE_EXCL) {
    1919                 :         84 :                 bool bdev_free;
    1920                 :            : 
    1921                 :            :                 /*
    1922                 :            :                  * Release a claim on the device.  The holder fields
    1923                 :            :                  * are protected with bdev_lock.  bd_mutex is to
    1924                 :            :                  * synchronize disk_holder unlinking.
    1925                 :            :                  */
    1926                 :         84 :                 spin_lock(&bdev_lock);
    1927                 :            : 
    1928         [ -  + ]:         84 :                 WARN_ON_ONCE(--bdev->bd_holders < 0);
    1929         [ -  + ]:         84 :                 WARN_ON_ONCE(--bdev->bd_contains->bd_holders < 0);
    1930                 :            : 
    1931                 :            :                 /* bd_contains might point to self, check in a separate step */
    1932         [ +  - ]:         84 :                 if ((bdev_free = !bdev->bd_holders))
    1933                 :         84 :                         bdev->bd_holder = NULL;
    1934         [ +  - ]:         84 :                 if (!bdev->bd_contains->bd_holders)
    1935                 :         84 :                         bdev->bd_contains->bd_holder = NULL;
    1936                 :            : 
    1937                 :         84 :                 spin_unlock(&bdev_lock);
    1938                 :            : 
    1939                 :            :                 /*
    1940                 :            :                  * If this was the last claim, remove holder link and
    1941                 :            :                  * unblock evpoll if it was a write holder.
    1942                 :            :                  */
    1943   [ +  -  -  + ]:         84 :                 if (bdev_free && bdev->bd_write_holder) {
    1944                 :          0 :                         disk_unblock_events(bdev->bd_disk);
    1945                 :          0 :                         bdev->bd_write_holder = false;
    1946                 :            :                 }
    1947                 :            :         }
    1948                 :            : 
    1949                 :            :         /*
    1950                 :            :          * Trigger event checking and tell drivers to flush MEDIA_CHANGE
    1951                 :            :          * event.  This is to ensure detection of media removal commanded
    1952                 :            :          * from userland - e.g. eject(1).
    1953                 :            :          */
    1954                 :        868 :         disk_flush_events(bdev->bd_disk, DISK_EVENT_MEDIA_CHANGE);
    1955                 :            : 
    1956                 :        868 :         mutex_unlock(&bdev->bd_mutex);
    1957                 :            : 
    1958                 :        868 :         __blkdev_put(bdev, mode, 0);
    1959                 :        868 : }
    1960                 :            : EXPORT_SYMBOL(blkdev_put);
    1961                 :            : 
    1962                 :        756 : static int blkdev_close(struct inode * inode, struct file * filp)
    1963                 :            : {
    1964                 :        756 :         struct block_device *bdev = I_BDEV(bdev_file_inode(filp));
    1965                 :        756 :         blkdev_put(bdev, filp->f_mode);
    1966                 :        756 :         return 0;
    1967                 :            : }
    1968                 :            : 
    1969                 :        980 : static long block_ioctl(struct file *file, unsigned cmd, unsigned long arg)
    1970                 :            : {
    1971                 :        980 :         struct block_device *bdev = I_BDEV(bdev_file_inode(file));
    1972                 :        980 :         fmode_t mode = file->f_mode;
    1973                 :            : 
    1974                 :            :         /*
    1975                 :            :          * O_NDELAY can be altered using fcntl(.., F_SETFL, ..), so we have
    1976                 :            :          * to updated it before every ioctl.
    1977                 :            :          */
    1978         [ +  + ]:        980 :         if (file->f_flags & O_NDELAY)
    1979                 :        476 :                 mode |= FMODE_NDELAY;
    1980                 :            :         else
    1981                 :        504 :                 mode &= ~FMODE_NDELAY;
    1982                 :            : 
    1983                 :        980 :         return blkdev_ioctl(bdev, mode, cmd, arg);
    1984                 :            : }
    1985                 :            : 
    1986                 :            : /*
    1987                 :            :  * Write data to the block device.  Only intended for the block device itself
    1988                 :            :  * and the raw driver which basically is a fake block device.
    1989                 :            :  *
    1990                 :            :  * Does not take i_mutex for the write and thus is not for general purpose
    1991                 :            :  * use.
    1992                 :            :  */
    1993                 :          0 : ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from)
    1994                 :            : {
    1995                 :          0 :         struct file *file = iocb->ki_filp;
    1996                 :          0 :         struct inode *bd_inode = bdev_file_inode(file);
    1997                 :          0 :         loff_t size = i_size_read(bd_inode);
    1998                 :          0 :         struct blk_plug plug;
    1999                 :          0 :         ssize_t ret;
    2000                 :            : 
    2001         [ #  # ]:          0 :         if (bdev_read_only(I_BDEV(bd_inode)))
    2002                 :            :                 return -EPERM;
    2003                 :            : 
    2004         [ #  # ]:          0 :         if (IS_SWAPFILE(bd_inode))
    2005                 :            :                 return -ETXTBSY;
    2006                 :            : 
    2007         [ #  # ]:          0 :         if (!iov_iter_count(from))
    2008                 :            :                 return 0;
    2009                 :            : 
    2010         [ #  # ]:          0 :         if (iocb->ki_pos >= size)
    2011                 :            :                 return -ENOSPC;
    2012                 :            : 
    2013         [ #  # ]:          0 :         if ((iocb->ki_flags & (IOCB_NOWAIT | IOCB_DIRECT)) == IOCB_NOWAIT)
    2014                 :            :                 return -EOPNOTSUPP;
    2015                 :            : 
    2016         [ #  # ]:          0 :         iov_iter_truncate(from, size - iocb->ki_pos);
    2017                 :            : 
    2018                 :          0 :         blk_start_plug(&plug);
    2019                 :          0 :         ret = __generic_file_write_iter(iocb, from);
    2020         [ #  # ]:          0 :         if (ret > 0)
    2021                 :          0 :                 ret = generic_write_sync(iocb, ret);
    2022                 :          0 :         blk_finish_plug(&plug);
    2023                 :          0 :         return ret;
    2024                 :            : }
    2025                 :            : EXPORT_SYMBOL_GPL(blkdev_write_iter);
    2026                 :            : 
    2027                 :       3696 : ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to)
    2028                 :            : {
    2029                 :       3696 :         struct file *file = iocb->ki_filp;
    2030                 :       3696 :         struct inode *bd_inode = bdev_file_inode(file);
    2031         [ +  - ]:       3696 :         loff_t size = i_size_read(bd_inode);
    2032                 :       3696 :         loff_t pos = iocb->ki_pos;
    2033                 :            : 
    2034         [ +  - ]:       3696 :         if (pos >= size)
    2035                 :            :                 return 0;
    2036                 :            : 
    2037                 :       3696 :         size -= pos;
    2038         [ -  + ]:       3696 :         iov_iter_truncate(to, size);
    2039                 :       3696 :         return generic_file_read_iter(iocb, to);
    2040                 :            : }
    2041                 :            : EXPORT_SYMBOL_GPL(blkdev_read_iter);
    2042                 :            : 
    2043                 :            : /*
    2044                 :            :  * Try to release a page associated with block device when the system
    2045                 :            :  * is under memory pressure.
    2046                 :            :  */
    2047                 :        168 : static int blkdev_releasepage(struct page *page, gfp_t wait)
    2048                 :            : {
    2049                 :        168 :         struct super_block *super = BDEV_I(page->mapping->host)->bdev.bd_super;
    2050                 :            : 
    2051   [ -  +  -  - ]:        168 :         if (super && super->s_op->bdev_try_to_free_page)
    2052                 :          0 :                 return super->s_op->bdev_try_to_free_page(super, page, wait);
    2053                 :            : 
    2054                 :        168 :         return try_to_free_buffers(page);
    2055                 :            : }
    2056                 :            : 
    2057                 :          0 : static int blkdev_writepages(struct address_space *mapping,
    2058                 :            :                              struct writeback_control *wbc)
    2059                 :            : {
    2060                 :          0 :         return generic_writepages(mapping, wbc);
    2061                 :            : }
    2062                 :            : 
    2063                 :            : static const struct address_space_operations def_blk_aops = {
    2064                 :            :         .readpage       = blkdev_readpage,
    2065                 :            :         .readpages      = blkdev_readpages,
    2066                 :            :         .writepage      = blkdev_writepage,
    2067                 :            :         .write_begin    = blkdev_write_begin,
    2068                 :            :         .write_end      = blkdev_write_end,
    2069                 :            :         .writepages     = blkdev_writepages,
    2070                 :            :         .releasepage    = blkdev_releasepage,
    2071                 :            :         .direct_IO      = blkdev_direct_IO,
    2072                 :            :         .migratepage    = buffer_migrate_page_norefs,
    2073                 :            :         .is_dirty_writeback = buffer_check_dirty_writeback,
    2074                 :            : };
    2075                 :            : 
    2076                 :            : #define BLKDEV_FALLOC_FL_SUPPORTED                                      \
    2077                 :            :                 (FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE |           \
    2078                 :            :                  FALLOC_FL_ZERO_RANGE | FALLOC_FL_NO_HIDE_STALE)
    2079                 :            : 
    2080                 :          0 : static long blkdev_fallocate(struct file *file, int mode, loff_t start,
    2081                 :            :                              loff_t len)
    2082                 :            : {
    2083                 :          0 :         struct block_device *bdev = I_BDEV(bdev_file_inode(file));
    2084                 :          0 :         struct address_space *mapping;
    2085                 :          0 :         loff_t end = start + len - 1;
    2086                 :          0 :         loff_t isize;
    2087                 :          0 :         int error;
    2088                 :            : 
    2089                 :            :         /* Fail if we don't recognize the flags. */
    2090         [ #  # ]:          0 :         if (mode & ~BLKDEV_FALLOC_FL_SUPPORTED)
    2091                 :            :                 return -EOPNOTSUPP;
    2092                 :            : 
    2093                 :            :         /* Don't go off the end of the device. */
    2094         [ #  # ]:          0 :         isize = i_size_read(bdev->bd_inode);
    2095         [ #  # ]:          0 :         if (start >= isize)
    2096                 :            :                 return -EINVAL;
    2097         [ #  # ]:          0 :         if (end >= isize) {
    2098         [ #  # ]:          0 :                 if (mode & FALLOC_FL_KEEP_SIZE) {
    2099                 :          0 :                         len = isize - start;
    2100                 :          0 :                         end = start + len - 1;
    2101                 :            :                 } else
    2102                 :            :                         return -EINVAL;
    2103                 :            :         }
    2104                 :            : 
    2105                 :            :         /*
    2106                 :            :          * Don't allow IO that isn't aligned to logical block size.
    2107                 :            :          */
    2108   [ #  #  #  # ]:          0 :         if ((start | len) & (bdev_logical_block_size(bdev) - 1))
    2109                 :            :                 return -EINVAL;
    2110                 :            : 
    2111                 :            :         /* Invalidate the page cache, including dirty pages. */
    2112                 :          0 :         mapping = bdev->bd_inode->i_mapping;
    2113                 :          0 :         truncate_inode_pages_range(mapping, start, end);
    2114                 :            : 
    2115   [ #  #  #  # ]:          0 :         switch (mode) {
    2116                 :          0 :         case FALLOC_FL_ZERO_RANGE:
    2117                 :            :         case FALLOC_FL_ZERO_RANGE | FALLOC_FL_KEEP_SIZE:
    2118                 :          0 :                 error = blkdev_issue_zeroout(bdev, start >> 9, len >> 9,
    2119                 :            :                                             GFP_KERNEL, BLKDEV_ZERO_NOUNMAP);
    2120                 :          0 :                 break;
    2121                 :          0 :         case FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE:
    2122                 :          0 :                 error = blkdev_issue_zeroout(bdev, start >> 9, len >> 9,
    2123                 :            :                                              GFP_KERNEL, BLKDEV_ZERO_NOFALLBACK);
    2124                 :          0 :                 break;
    2125                 :          0 :         case FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE | FALLOC_FL_NO_HIDE_STALE:
    2126                 :          0 :                 error = blkdev_issue_discard(bdev, start >> 9, len >> 9,
    2127                 :            :                                              GFP_KERNEL, 0);
    2128                 :          0 :                 break;
    2129                 :            :         default:
    2130                 :            :                 return -EOPNOTSUPP;
    2131                 :            :         }
    2132         [ #  # ]:          0 :         if (error)
    2133                 :          0 :                 return error;
    2134                 :            : 
    2135                 :            :         /*
    2136                 :            :          * Invalidate again; if someone wandered in and dirtied a page,
    2137                 :            :          * the caller will be given -EBUSY.  The third argument is
    2138                 :            :          * inclusive, so the rounding here is safe.
    2139                 :            :          */
    2140                 :          0 :         return invalidate_inode_pages2_range(mapping,
    2141                 :          0 :                                              start >> PAGE_SHIFT,
    2142                 :          0 :                                              end >> PAGE_SHIFT);
    2143                 :            : }
    2144                 :            : 
    2145                 :            : const struct file_operations def_blk_fops = {
    2146                 :            :         .open           = blkdev_open,
    2147                 :            :         .release        = blkdev_close,
    2148                 :            :         .llseek         = block_llseek,
    2149                 :            :         .read_iter      = blkdev_read_iter,
    2150                 :            :         .write_iter     = blkdev_write_iter,
    2151                 :            :         .iopoll         = blkdev_iopoll,
    2152                 :            :         .mmap           = generic_file_mmap,
    2153                 :            :         .fsync          = blkdev_fsync,
    2154                 :            :         .unlocked_ioctl = block_ioctl,
    2155                 :            : #ifdef CONFIG_COMPAT
    2156                 :            :         .compat_ioctl   = compat_blkdev_ioctl,
    2157                 :            : #endif
    2158                 :            :         .splice_read    = generic_file_splice_read,
    2159                 :            :         .splice_write   = iter_file_splice_write,
    2160                 :            :         .fallocate      = blkdev_fallocate,
    2161                 :            : };
    2162                 :            : 
    2163                 :          0 : int ioctl_by_bdev(struct block_device *bdev, unsigned cmd, unsigned long arg)
    2164                 :            : {
    2165                 :          0 :         int res;
    2166                 :          0 :         mm_segment_t old_fs = get_fs();
    2167                 :          0 :         set_fs(KERNEL_DS);
    2168                 :          0 :         res = blkdev_ioctl(bdev, 0, cmd, arg);
    2169                 :          0 :         set_fs(old_fs);
    2170                 :          0 :         return res;
    2171                 :            : }
    2172                 :            : 
    2173                 :            : EXPORT_SYMBOL(ioctl_by_bdev);
    2174                 :            : 
    2175                 :            : /**
    2176                 :            :  * lookup_bdev  - lookup a struct block_device by name
    2177                 :            :  * @pathname:   special file representing the block device
    2178                 :            :  *
    2179                 :            :  * Get a reference to the blockdevice at @pathname in the current
    2180                 :            :  * namespace if possible and return it.  Return ERR_PTR(error)
    2181                 :            :  * otherwise.
    2182                 :            :  */
    2183                 :        112 : struct block_device *lookup_bdev(const char *pathname)
    2184                 :            : {
    2185                 :        112 :         struct block_device *bdev;
    2186                 :        112 :         struct inode *inode;
    2187                 :        112 :         struct path path;
    2188                 :        112 :         int error;
    2189                 :            : 
    2190   [ +  -  +  - ]:        112 :         if (!pathname || !*pathname)
    2191                 :            :                 return ERR_PTR(-EINVAL);
    2192                 :            : 
    2193                 :        112 :         error = kern_path(pathname, LOOKUP_FOLLOW, &path);
    2194         [ -  + ]:        112 :         if (error)
    2195                 :          0 :                 return ERR_PTR(error);
    2196                 :            : 
    2197         [ -  + ]:        112 :         inode = d_backing_inode(path.dentry);
    2198                 :        112 :         error = -ENOTBLK;
    2199         [ -  + ]:        112 :         if (!S_ISBLK(inode->i_mode))
    2200                 :          0 :                 goto fail;
    2201                 :        112 :         error = -EACCES;
    2202         [ -  + ]:        112 :         if (!may_open_dev(&path))
    2203                 :          0 :                 goto fail;
    2204                 :        112 :         error = -ENOMEM;
    2205                 :        112 :         bdev = bd_acquire(inode);
    2206         [ -  + ]:        112 :         if (!bdev)
    2207                 :          0 :                 goto fail;
    2208                 :        112 : out:
    2209                 :        112 :         path_put(&path);
    2210                 :        112 :         return bdev;
    2211                 :          0 : fail:
    2212                 :          0 :         bdev = ERR_PTR(error);
    2213                 :          0 :         goto out;
    2214                 :            : }
    2215                 :            : EXPORT_SYMBOL(lookup_bdev);
    2216                 :            : 
    2217                 :         84 : int __invalidate_device(struct block_device *bdev, bool kill_dirty)
    2218                 :            : {
    2219                 :         84 :         struct super_block *sb = get_super(bdev);
    2220                 :         84 :         int res = 0;
    2221                 :            : 
    2222         [ -  + ]:         84 :         if (sb) {
    2223                 :            :                 /*
    2224                 :            :                  * no need to lock the super, get_super holds the
    2225                 :            :                  * read mutex so the filesystem cannot go away
    2226                 :            :                  * under us (->put_super runs with the write lock
    2227                 :            :                  * hold).
    2228                 :            :                  */
    2229                 :          0 :                 shrink_dcache_sb(sb);
    2230                 :          0 :                 res = invalidate_inodes(sb, kill_dirty);
    2231                 :          0 :                 drop_super(sb);
    2232                 :            :         }
    2233                 :         84 :         invalidate_bdev(bdev);
    2234                 :         84 :         return res;
    2235                 :            : }
    2236                 :            : EXPORT_SYMBOL(__invalidate_device);
    2237                 :            : 
    2238                 :          0 : void iterate_bdevs(void (*func)(struct block_device *, void *), void *arg)
    2239                 :            : {
    2240                 :          0 :         struct inode *inode, *old_inode = NULL;
    2241                 :            : 
    2242                 :          0 :         spin_lock(&blockdev_superblock->s_inode_list_lock);
    2243         [ #  # ]:          0 :         list_for_each_entry(inode, &blockdev_superblock->s_inodes, i_sb_list) {
    2244                 :          0 :                 struct address_space *mapping = inode->i_mapping;
    2245                 :          0 :                 struct block_device *bdev;
    2246                 :            : 
    2247                 :          0 :                 spin_lock(&inode->i_lock);
    2248         [ #  # ]:          0 :                 if (inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW) ||
    2249         [ #  # ]:          0 :                     mapping->nrpages == 0) {
    2250                 :          0 :                         spin_unlock(&inode->i_lock);
    2251                 :          0 :                         continue;
    2252                 :            :                 }
    2253                 :          0 :                 __iget(inode);
    2254                 :          0 :                 spin_unlock(&inode->i_lock);
    2255                 :          0 :                 spin_unlock(&blockdev_superblock->s_inode_list_lock);
    2256                 :            :                 /*
    2257                 :            :                  * We hold a reference to 'inode' so it couldn't have been
    2258                 :            :                  * removed from s_inodes list while we dropped the
    2259                 :            :                  * s_inode_list_lock  We cannot iput the inode now as we can
    2260                 :            :                  * be holding the last reference and we cannot iput it under
    2261                 :            :                  * s_inode_list_lock. So we keep the reference and iput it
    2262                 :            :                  * later.
    2263                 :            :                  */
    2264                 :          0 :                 iput(old_inode);
    2265                 :          0 :                 old_inode = inode;
    2266                 :          0 :                 bdev = I_BDEV(inode);
    2267                 :            : 
    2268                 :          0 :                 mutex_lock(&bdev->bd_mutex);
    2269         [ #  # ]:          0 :                 if (bdev->bd_openers)
    2270                 :          0 :                         func(bdev, arg);
    2271                 :          0 :                 mutex_unlock(&bdev->bd_mutex);
    2272                 :            : 
    2273                 :          0 :                 spin_lock(&blockdev_superblock->s_inode_list_lock);
    2274                 :            :         }
    2275                 :          0 :         spin_unlock(&blockdev_superblock->s_inode_list_lock);
    2276                 :          0 :         iput(old_inode);
    2277                 :          0 : }

Generated by: LCOV version 1.14