LCOV - code coverage report
Current view: top level - fs/ext3 - inode.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 1122 0.0 %
Date: 2014-02-18 Functions: 0 67 0.0 %
Branches: 0 872 0.0 %

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  *  linux/fs/ext3/inode.c
       3                 :            :  *
       4                 :            :  * Copyright (C) 1992, 1993, 1994, 1995
       5                 :            :  * Remy Card (card@masi.ibp.fr)
       6                 :            :  * Laboratoire MASI - Institut Blaise Pascal
       7                 :            :  * Universite Pierre et Marie Curie (Paris VI)
       8                 :            :  *
       9                 :            :  *  from
      10                 :            :  *
      11                 :            :  *  linux/fs/minix/inode.c
      12                 :            :  *
      13                 :            :  *  Copyright (C) 1991, 1992  Linus Torvalds
      14                 :            :  *
      15                 :            :  *  Goal-directed block allocation by Stephen Tweedie
      16                 :            :  *      (sct@redhat.com), 1993, 1998
      17                 :            :  *  Big-endian to little-endian byte-swapping/bitmaps by
      18                 :            :  *        David S. Miller (davem@caip.rutgers.edu), 1995
      19                 :            :  *  64-bit file support on 64-bit platforms by Jakub Jelinek
      20                 :            :  *      (jj@sunsite.ms.mff.cuni.cz)
      21                 :            :  *
      22                 :            :  *  Assorted race fixes, rewrite of ext3_get_block() by Al Viro, 2000
      23                 :            :  */
      24                 :            : 
      25                 :            : #include <linux/highuid.h>
      26                 :            : #include <linux/quotaops.h>
      27                 :            : #include <linux/writeback.h>
      28                 :            : #include <linux/mpage.h>
      29                 :            : #include <linux/namei.h>
      30                 :            : #include <linux/aio.h>
      31                 :            : #include "ext3.h"
      32                 :            : #include "xattr.h"
      33                 :            : #include "acl.h"
      34                 :            : 
      35                 :            : static int ext3_writepage_trans_blocks(struct inode *inode);
      36                 :            : static int ext3_block_truncate_page(struct inode *inode, loff_t from);
      37                 :            : 
      38                 :            : /*
      39                 :            :  * Test whether an inode is a fast symlink.
      40                 :            :  */
      41                 :            : static int ext3_inode_is_fast_symlink(struct inode *inode)
      42                 :            : {
      43 [ #  # ][ #  # ]:          0 :         int ea_blocks = EXT3_I(inode)->i_file_acl ?
      44                 :          0 :                 (inode->i_sb->s_blocksize >> 9) : 0;
      45                 :            : 
      46 [ #  # ][ #  # ]:          0 :         return (S_ISLNK(inode->i_mode) && inode->i_blocks - ea_blocks == 0);
         [ #  # ][ #  # ]
      47                 :            : }
      48                 :            : 
      49                 :            : /*
      50                 :            :  * The ext3 forget function must perform a revoke if we are freeing data
      51                 :            :  * which has been journaled.  Metadata (eg. indirect blocks) must be
      52                 :            :  * revoked in all cases.
      53                 :            :  *
      54                 :            :  * "bh" may be NULL: a metadata block may have been freed from memory
      55                 :            :  * but there may still be a record of it in the journal, and that record
      56                 :            :  * still needs to be revoked.
      57                 :            :  */
      58                 :          0 : int ext3_forget(handle_t *handle, int is_metadata, struct inode *inode,
      59                 :            :                         struct buffer_head *bh, ext3_fsblk_t blocknr)
      60                 :            : {
      61                 :            :         int err;
      62                 :            : 
      63                 :            :         might_sleep();
      64                 :            : 
      65                 :            :         trace_ext3_forget(inode, is_metadata, blocknr);
      66                 :            :         BUFFER_TRACE(bh, "enter");
      67                 :            : 
      68                 :            :         jbd_debug(4, "forgetting bh %p: is_metadata = %d, mode %o, "
      69                 :            :                   "data mode %lx\n",
      70                 :            :                   bh, is_metadata, inode->i_mode,
      71                 :            :                   test_opt(inode->i_sb, DATA_FLAGS));
      72                 :            : 
      73                 :            :         /* Never use the revoke function if we are doing full data
      74                 :            :          * journaling: there is no need to, and a V1 superblock won't
      75                 :            :          * support it.  Otherwise, only skip the revoke on un-journaled
      76                 :            :          * data blocks. */
      77                 :            : 
      78 [ #  # ][ #  # ]:          0 :         if (test_opt(inode->i_sb, DATA_FLAGS) == EXT3_MOUNT_JOURNAL_DATA ||
      79         [ #  # ]:          0 :             (!is_metadata && !ext3_should_journal_data(inode))) {
      80         [ #  # ]:          0 :                 if (bh) {
      81                 :            :                         BUFFER_TRACE(bh, "call journal_forget");
      82                 :          0 :                         return ext3_journal_forget(handle, bh);
      83                 :            :                 }
      84                 :            :                 return 0;
      85                 :            :         }
      86                 :            : 
      87                 :            :         /*
      88                 :            :          * data!=journal && (is_metadata || should_journal_data(inode))
      89                 :            :          */
      90                 :            :         BUFFER_TRACE(bh, "call ext3_journal_revoke");
      91                 :          0 :         err = ext3_journal_revoke(handle, blocknr, bh);
      92         [ #  # ]:          0 :         if (err)
      93                 :          0 :                 ext3_abort(inode->i_sb, __func__,
      94                 :            :                            "error %d when attempting revoke", err);
      95                 :            :         BUFFER_TRACE(bh, "exit");
      96                 :          0 :         return err;
      97                 :            : }
      98                 :            : 
      99                 :            : /*
     100                 :            :  * Work out how many blocks we need to proceed with the next chunk of a
     101                 :            :  * truncate transaction.
     102                 :            :  */
     103                 :          0 : static unsigned long blocks_for_truncate(struct inode *inode)
     104                 :            : {
     105                 :            :         unsigned long needed;
     106                 :            : 
     107                 :          0 :         needed = inode->i_blocks >> (inode->i_sb->s_blocksize_bits - 9);
     108                 :            : 
     109                 :            :         /* Give ourselves just enough room to cope with inodes in which
     110                 :            :          * i_blocks is corrupt: we've seen disk corruptions in the past
     111                 :            :          * which resulted in random data in an inode which looked enough
     112                 :            :          * like a regular file for ext3 to try to delete it.  Things
     113                 :            :          * will go a bit crazy if that happens, but at least we should
     114                 :            :          * try not to panic the whole kernel. */
     115         [ #  # ]:          0 :         if (needed < 2)
     116                 :            :                 needed = 2;
     117                 :            : 
     118                 :            :         /* But we need to bound the transaction so we don't overflow the
     119                 :            :          * journal. */
     120         [ #  # ]:          0 :         if (needed > EXT3_MAX_TRANS_DATA)
     121                 :            :                 needed = EXT3_MAX_TRANS_DATA;
     122                 :            : 
     123         [ #  # ]:          0 :         return EXT3_DATA_TRANS_BLOCKS(inode->i_sb) + needed;
     124                 :            : }
     125                 :            : 
     126                 :            : /*
     127                 :            :  * Truncate transactions can be complex and absolutely huge.  So we need to
     128                 :            :  * be able to restart the transaction at a conventient checkpoint to make
     129                 :            :  * sure we don't overflow the journal.
     130                 :            :  *
     131                 :            :  * start_transaction gets us a new handle for a truncate transaction,
     132                 :            :  * and extend_transaction tries to extend the existing one a bit.  If
     133                 :            :  * extend fails, we need to propagate the failure up and restart the
     134                 :            :  * transaction in the top-level truncate loop. --sct
     135                 :            :  */
     136                 :          0 : static handle_t *start_transaction(struct inode *inode)
     137                 :            : {
     138                 :            :         handle_t *result;
     139                 :            : 
     140                 :          0 :         result = ext3_journal_start(inode, blocks_for_truncate(inode));
     141         [ #  # ]:          0 :         if (!IS_ERR(result))
     142                 :            :                 return result;
     143                 :            : 
     144         [ #  # ]:          0 :         ext3_std_error(inode->i_sb, PTR_ERR(result));
     145                 :            :         return result;
     146                 :            : }
     147                 :            : 
     148                 :            : /*
     149                 :            :  * Try to extend this transaction for the purposes of truncation.
     150                 :            :  *
     151                 :            :  * Returns 0 if we managed to create more room.  If we can't create more
     152                 :            :  * room, and the transaction must be restarted we return 1.
     153                 :            :  */
     154                 :          0 : static int try_to_extend_transaction(handle_t *handle, struct inode *inode)
     155                 :            : {
     156         [ #  # ]:          0 :         if (handle->h_buffer_credits > EXT3_RESERVE_TRANS_BLOCKS)
     157                 :            :                 return 0;
     158         [ #  # ]:          0 :         if (!ext3_journal_extend(handle, blocks_for_truncate(inode)))
     159                 :            :                 return 0;
     160                 :          0 :         return 1;
     161                 :            : }
     162                 :            : 
     163                 :            : /*
     164                 :            :  * Restart the transaction associated with *handle.  This does a commit,
     165                 :            :  * so before we call here everything must be consistently dirtied against
     166                 :            :  * this transaction.
     167                 :            :  */
     168                 :          0 : static int truncate_restart_transaction(handle_t *handle, struct inode *inode)
     169                 :            : {
     170                 :            :         int ret;
     171                 :            : 
     172                 :            :         jbd_debug(2, "restarting handle %p\n", handle);
     173                 :            :         /*
     174                 :            :          * Drop truncate_mutex to avoid deadlock with ext3_get_blocks_handle
     175                 :            :          * At this moment, get_block can be called only for blocks inside
     176                 :            :          * i_size since page cache has been already dropped and writes are
     177                 :            :          * blocked by i_mutex. So we can safely drop the truncate_mutex.
     178                 :            :          */
     179                 :          0 :         mutex_unlock(&EXT3_I(inode)->truncate_mutex);
     180                 :          0 :         ret = ext3_journal_restart(handle, blocks_for_truncate(inode));
     181                 :          0 :         mutex_lock(&EXT3_I(inode)->truncate_mutex);
     182                 :          0 :         return ret;
     183                 :            : }
     184                 :            : 
     185                 :            : /*
     186                 :            :  * Called at inode eviction from icache
     187                 :            :  */
     188                 :          0 : void ext3_evict_inode (struct inode *inode)
     189                 :            : {
     190                 :            :         struct ext3_inode_info *ei = EXT3_I(inode);
     191                 :            :         struct ext3_block_alloc_info *rsv;
     192                 :            :         handle_t *handle;
     193                 :            :         int want_delete = 0;
     194                 :            : 
     195                 :            :         trace_ext3_evict_inode(inode);
     196 [ #  # ][ #  # ]:          0 :         if (!inode->i_nlink && !is_bad_inode(inode)) {
     197                 :          0 :                 dquot_initialize(inode);
     198                 :            :                 want_delete = 1;
     199                 :            :         }
     200                 :            : 
     201                 :            :         /*
     202                 :            :          * When journalling data dirty buffers are tracked only in the journal.
     203                 :            :          * So although mm thinks everything is clean and ready for reaping the
     204                 :            :          * inode might still have some pages to write in the running
     205                 :            :          * transaction or waiting to be checkpointed. Thus calling
     206                 :            :          * journal_invalidatepage() (via truncate_inode_pages()) to discard
     207                 :            :          * these buffers can cause data loss. Also even if we did not discard
     208                 :            :          * these buffers, we would have no way to find them after the inode
     209                 :            :          * is reaped and thus user could see stale data if he tries to read
     210                 :            :          * them before the transaction is checkpointed. So be careful and
     211                 :            :          * force everything to disk here... We use ei->i_datasync_tid to
     212                 :            :          * store the newest transaction containing inode's data.
     213                 :            :          *
     214                 :            :          * Note that directories do not have this problem because they don't
     215                 :            :          * use page cache.
     216                 :            :          *
     217                 :            :          * The s_journal check handles the case when ext3_get_journal() fails
     218                 :            :          * and puts the journal inode.
     219                 :            :          */
     220 [ #  # ][ #  # ]:          0 :         if (inode->i_nlink && ext3_should_journal_data(inode) &&
                 [ #  # ]
     221         [ #  # ]:          0 :             EXT3_SB(inode->i_sb)->s_journal &&
     222         [ #  # ]:          0 :             (S_ISLNK(inode->i_mode) || S_ISREG(inode->i_mode)) &&
     223                 :          0 :             inode->i_ino != EXT3_JOURNAL_INO) {
     224                 :          0 :                 tid_t commit_tid = atomic_read(&ei->i_datasync_tid);
     225                 :            :                 journal_t *journal = EXT3_SB(inode->i_sb)->s_journal;
     226                 :            : 
     227                 :          0 :                 log_start_commit(journal, commit_tid);
     228                 :          0 :                 log_wait_commit(journal, commit_tid);
     229                 :          0 :                 filemap_write_and_wait(&inode->i_data);
     230                 :            :         }
     231                 :          0 :         truncate_inode_pages(&inode->i_data, 0);
     232                 :            : 
     233                 :          0 :         ext3_discard_reservation(inode);
     234                 :          0 :         rsv = ei->i_block_alloc_info;
     235                 :          0 :         ei->i_block_alloc_info = NULL;
     236         [ #  # ]:          0 :         if (unlikely(rsv))
     237                 :          0 :                 kfree(rsv);
     238                 :            : 
     239         [ #  # ]:          0 :         if (!want_delete)
     240                 :            :                 goto no_delete;
     241                 :            : 
     242                 :          0 :         handle = start_transaction(inode);
     243         [ #  # ]:          0 :         if (IS_ERR(handle)) {
     244                 :            :                 /*
     245                 :            :                  * If we're going to skip the normal cleanup, we still need to
     246                 :            :                  * make sure that the in-core orphan linked list is properly
     247                 :            :                  * cleaned up.
     248                 :            :                  */
     249                 :          0 :                 ext3_orphan_del(NULL, inode);
     250                 :          0 :                 goto no_delete;
     251                 :            :         }
     252                 :            : 
     253 [ #  # ][ #  # ]:          0 :         if (IS_SYNC(inode))
     254                 :          0 :                 handle->h_sync = 1;
     255                 :          0 :         inode->i_size = 0;
     256         [ #  # ]:          0 :         if (inode->i_blocks)
     257                 :          0 :                 ext3_truncate(inode);
     258                 :            :         /*
     259                 :            :          * Kill off the orphan record created when the inode lost the last
     260                 :            :          * link.  Note that ext3_orphan_del() has to be able to cope with the
     261                 :            :          * deletion of a non-existent orphan - ext3_truncate() could
     262                 :            :          * have removed the record.
     263                 :            :          */
     264                 :          0 :         ext3_orphan_del(handle, inode);
     265                 :          0 :         ei->i_dtime = get_seconds();
     266                 :            : 
     267                 :            :         /*
     268                 :            :          * One subtle ordering requirement: if anything has gone wrong
     269                 :            :          * (transaction abort, IO errors, whatever), then we can still
     270                 :            :          * do these next steps (the fs will already have been marked as
     271                 :            :          * having errors), but we can't free the inode if the mark_dirty
     272                 :            :          * fails.
     273                 :            :          */
     274         [ #  # ]:          0 :         if (ext3_mark_inode_dirty(handle, inode)) {
     275                 :            :                 /* If that failed, just dquot_drop() and be done with that */
     276                 :          0 :                 dquot_drop(inode);
     277                 :          0 :                 clear_inode(inode);
     278                 :            :         } else {
     279                 :          0 :                 ext3_xattr_delete_inode(handle, inode);
     280                 :          0 :                 dquot_free_inode(inode);
     281                 :          0 :                 dquot_drop(inode);
     282                 :          0 :                 clear_inode(inode);
     283                 :          0 :                 ext3_free_inode(handle, inode);
     284                 :            :         }
     285                 :          0 :         ext3_journal_stop(handle);
     286                 :          0 :         return;
     287                 :            : no_delete:
     288                 :          0 :         clear_inode(inode);
     289                 :          0 :         dquot_drop(inode);
     290                 :            : }
     291                 :            : 
     292                 :            : typedef struct {
     293                 :            :         __le32  *p;
     294                 :            :         __le32  key;
     295                 :            :         struct buffer_head *bh;
     296                 :            : } Indirect;
     297                 :            : 
     298                 :            : static inline void add_chain(Indirect *p, struct buffer_head *bh, __le32 *v)
     299                 :            : {
     300                 :          0 :         p->key = *(p->p = v);
     301                 :          0 :         p->bh = bh;
     302                 :            : }
     303                 :            : 
     304                 :            : static int verify_chain(Indirect *from, Indirect *to)
     305                 :            : {
     306 [ #  # ][ #  # ]:          0 :         while (from <= to && from->key == *from->p)
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
     307                 :          0 :                 from++;
     308                 :            :         return (from > to);
     309                 :            : }
     310                 :            : 
     311                 :            : /**
     312                 :            :  *      ext3_block_to_path - parse the block number into array of offsets
     313                 :            :  *      @inode: inode in question (we are only interested in its superblock)
     314                 :            :  *      @i_block: block number to be parsed
     315                 :            :  *      @offsets: array to store the offsets in
     316                 :            :  *      @boundary: set this non-zero if the referred-to block is likely to be
     317                 :            :  *             followed (on disk) by an indirect block.
     318                 :            :  *
     319                 :            :  *      To store the locations of file's data ext3 uses a data structure common
     320                 :            :  *      for UNIX filesystems - tree of pointers anchored in the inode, with
     321                 :            :  *      data blocks at leaves and indirect blocks in intermediate nodes.
     322                 :            :  *      This function translates the block number into path in that tree -
     323                 :            :  *      return value is the path length and @offsets[n] is the offset of
     324                 :            :  *      pointer to (n+1)th node in the nth one. If @block is out of range
     325                 :            :  *      (negative or too large) warning is printed and zero returned.
     326                 :            :  *
     327                 :            :  *      Note: function doesn't find node addresses, so no IO is needed. All
     328                 :            :  *      we need to know is the capacity of indirect blocks (taken from the
     329                 :            :  *      inode->i_sb).
     330                 :            :  */
     331                 :            : 
     332                 :            : /*
     333                 :            :  * Portability note: the last comparison (check that we fit into triple
     334                 :            :  * indirect block) is spelled differently, because otherwise on an
     335                 :            :  * architecture with 32-bit longs and 8Kb pages we might get into trouble
     336                 :            :  * if our filesystem had 8Kb blocks. We might use long long, but that would
     337                 :            :  * kill us on x86. Oh, well, at least the sign propagation does not matter -
     338                 :            :  * i_block would have to be negative in the very beginning, so we would not
     339                 :            :  * get there at all.
     340                 :            :  */
     341                 :            : 
     342                 :          0 : static int ext3_block_to_path(struct inode *inode,
     343                 :            :                         long i_block, int offsets[4], int *boundary)
     344                 :            : {
     345                 :          0 :         int ptrs = EXT3_ADDR_PER_BLOCK(inode->i_sb);
     346                 :          0 :         int ptrs_bits = EXT3_ADDR_PER_BLOCK_BITS(inode->i_sb);
     347                 :            :         const long direct_blocks = EXT3_NDIR_BLOCKS,
     348                 :            :                 indirect_blocks = ptrs,
     349                 :          0 :                 double_blocks = (1 << (ptrs_bits * 2));
     350                 :            :         int n = 0;
     351                 :            :         int final = 0;
     352                 :            : 
     353         [ #  # ]:          0 :         if (i_block < 0) {
     354                 :          0 :                 ext3_warning (inode->i_sb, "ext3_block_to_path", "block < 0");
     355         [ #  # ]:          0 :         } else if (i_block < direct_blocks) {
     356                 :          0 :                 offsets[n++] = i_block;
     357                 :            :                 final = direct_blocks;
     358         [ #  # ]:          0 :         } else if ( (i_block -= direct_blocks) < indirect_blocks) {
     359                 :          0 :                 offsets[n++] = EXT3_IND_BLOCK;
     360                 :          0 :                 offsets[n++] = i_block;
     361                 :            :                 final = ptrs;
     362         [ #  # ]:          0 :         } else if ((i_block -= indirect_blocks) < double_blocks) {
     363                 :          0 :                 offsets[n++] = EXT3_DIND_BLOCK;
     364                 :          0 :                 offsets[n++] = i_block >> ptrs_bits;
     365                 :          0 :                 offsets[n++] = i_block & (ptrs - 1);
     366                 :            :                 final = ptrs;
     367         [ #  # ]:          0 :         } else if (((i_block -= double_blocks) >> (ptrs_bits * 2)) < ptrs) {
     368                 :          0 :                 offsets[n++] = EXT3_TIND_BLOCK;
     369                 :          0 :                 offsets[n++] = i_block >> (ptrs_bits * 2);
     370                 :          0 :                 offsets[n++] = (i_block >> ptrs_bits) & (ptrs - 1);
     371                 :          0 :                 offsets[n++] = i_block & (ptrs - 1);
     372                 :            :                 final = ptrs;
     373                 :            :         } else {
     374                 :          0 :                 ext3_warning(inode->i_sb, "ext3_block_to_path", "block > big");
     375                 :            :         }
     376         [ #  # ]:          0 :         if (boundary)
     377                 :          0 :                 *boundary = final - 1 - (i_block & (ptrs - 1));
     378                 :          0 :         return n;
     379                 :            : }
     380                 :            : 
     381                 :            : /**
     382                 :            :  *      ext3_get_branch - read the chain of indirect blocks leading to data
     383                 :            :  *      @inode: inode in question
     384                 :            :  *      @depth: depth of the chain (1 - direct pointer, etc.)
     385                 :            :  *      @offsets: offsets of pointers in inode/indirect blocks
     386                 :            :  *      @chain: place to store the result
     387                 :            :  *      @err: here we store the error value
     388                 :            :  *
     389                 :            :  *      Function fills the array of triples <key, p, bh> and returns %NULL
     390                 :            :  *      if everything went OK or the pointer to the last filled triple
     391                 :            :  *      (incomplete one) otherwise. Upon the return chain[i].key contains
     392                 :            :  *      the number of (i+1)-th block in the chain (as it is stored in memory,
     393                 :            :  *      i.e. little-endian 32-bit), chain[i].p contains the address of that
     394                 :            :  *      number (it points into struct inode for i==0 and into the bh->b_data
     395                 :            :  *      for i>0) and chain[i].bh points to the buffer_head of i-th indirect
     396                 :            :  *      block for i>0 and NULL for i==0. In other words, it holds the block
     397                 :            :  *      numbers of the chain, addresses they were taken from (and where we can
     398                 :            :  *      verify that chain did not change) and buffer_heads hosting these
     399                 :            :  *      numbers.
     400                 :            :  *
     401                 :            :  *      Function stops when it stumbles upon zero pointer (absent block)
     402                 :            :  *              (pointer to last triple returned, *@err == 0)
     403                 :            :  *      or when it gets an IO error reading an indirect block
     404                 :            :  *              (ditto, *@err == -EIO)
     405                 :            :  *      or when it notices that chain had been changed while it was reading
     406                 :            :  *              (ditto, *@err == -EAGAIN)
     407                 :            :  *      or when it reads all @depth-1 indirect blocks successfully and finds
     408                 :            :  *      the whole chain, all way to the data (returns %NULL, *err == 0).
     409                 :            :  */
     410                 :          0 : static Indirect *ext3_get_branch(struct inode *inode, int depth, int *offsets,
     411                 :            :                                  Indirect chain[4], int *err)
     412                 :            : {
     413                 :          0 :         struct super_block *sb = inode->i_sb;
     414                 :            :         Indirect *p = chain;
     415                 :            :         struct buffer_head *bh;
     416                 :            : 
     417                 :          0 :         *err = 0;
     418                 :            :         /* i_data is not going away, no lock needed */
     419                 :          0 :         add_chain (chain, NULL, EXT3_I(inode)->i_data + *offsets);
     420         [ #  # ]:          0 :         if (!p->key)
     421                 :            :                 goto no_block;
     422         [ #  # ]:          0 :         while (--depth) {
     423                 :          0 :                 bh = sb_bread(sb, le32_to_cpu(p->key));
     424         [ #  # ]:          0 :                 if (!bh)
     425                 :            :                         goto failure;
     426                 :            :                 /* Reader: pointers */
     427         [ #  # ]:          0 :                 if (!verify_chain(chain, p))
     428                 :            :                         goto changed;
     429                 :          0 :                 add_chain(++p, bh, (__le32*)bh->b_data + *++offsets);
     430                 :            :                 /* Reader: end */
     431         [ #  # ]:          0 :                 if (!p->key)
     432                 :            :                         goto no_block;
     433                 :            :         }
     434                 :            :         return NULL;
     435                 :            : 
     436                 :            : changed:
     437                 :            :         brelse(bh);
     438                 :          0 :         *err = -EAGAIN;
     439                 :          0 :         goto no_block;
     440                 :            : failure:
     441                 :          0 :         *err = -EIO;
     442                 :            : no_block:
     443                 :          0 :         return p;
     444                 :            : }
     445                 :            : 
     446                 :            : /**
     447                 :            :  *      ext3_find_near - find a place for allocation with sufficient locality
     448                 :            :  *      @inode: owner
     449                 :            :  *      @ind: descriptor of indirect block.
     450                 :            :  *
     451                 :            :  *      This function returns the preferred place for block allocation.
     452                 :            :  *      It is used when heuristic for sequential allocation fails.
     453                 :            :  *      Rules are:
     454                 :            :  *        + if there is a block to the left of our position - allocate near it.
     455                 :            :  *        + if pointer will live in indirect block - allocate near that block.
     456                 :            :  *        + if pointer will live in inode - allocate in the same
     457                 :            :  *          cylinder group.
     458                 :            :  *
     459                 :            :  * In the latter case we colour the starting block by the callers PID to
     460                 :            :  * prevent it from clashing with concurrent allocations for a different inode
     461                 :            :  * in the same block group.   The PID is used here so that functionally related
     462                 :            :  * files will be close-by on-disk.
     463                 :            :  *
     464                 :            :  *      Caller must make sure that @ind is valid and will stay that way.
     465                 :            :  */
     466                 :          0 : static ext3_fsblk_t ext3_find_near(struct inode *inode, Indirect *ind)
     467                 :            : {
     468                 :            :         struct ext3_inode_info *ei = EXT3_I(inode);
     469         [ #  # ]:          0 :         __le32 *start = ind->bh ? (__le32*) ind->bh->b_data : ei->i_data;
     470                 :            :         __le32 *p;
     471                 :            :         ext3_fsblk_t bg_start;
     472                 :            :         ext3_grpblk_t colour;
     473                 :            : 
     474                 :            :         /* Try to find previous block */
     475         [ #  # ]:          0 :         for (p = ind->p - 1; p >= start; p--) {
     476         [ #  # ]:          0 :                 if (*p)
     477                 :            :                         return le32_to_cpu(*p);
     478                 :            :         }
     479                 :            : 
     480                 :            :         /* No such thing, so let's try location of indirect block */
     481         [ #  # ]:          0 :         if (ind->bh)
     482                 :          0 :                 return ind->bh->b_blocknr;
     483                 :            : 
     484                 :            :         /*
     485                 :            :          * It is going to be referred to from the inode itself? OK, just put it
     486                 :            :          * into the same cylinder group then.
     487                 :            :          */
     488                 :          0 :         bg_start = ext3_group_first_block_no(inode->i_sb, ei->i_block_group);
     489                 :          0 :         colour = (current->pid % 16) *
     490                 :          0 :                         (EXT3_BLOCKS_PER_GROUP(inode->i_sb) / 16);
     491                 :          0 :         return bg_start + colour;
     492                 :            : }
     493                 :            : 
     494                 :            : /**
     495                 :            :  *      ext3_find_goal - find a preferred place for allocation.
     496                 :            :  *      @inode: owner
     497                 :            :  *      @block:  block we want
     498                 :            :  *      @partial: pointer to the last triple within a chain
     499                 :            :  *
     500                 :            :  *      Normally this function find the preferred place for block allocation,
     501                 :            :  *      returns it.
     502                 :            :  */
     503                 :            : 
     504                 :          0 : static ext3_fsblk_t ext3_find_goal(struct inode *inode, long block,
     505                 :          0 :                                    Indirect *partial)
     506                 :            : {
     507                 :            :         struct ext3_block_alloc_info *block_i;
     508                 :            : 
     509                 :          0 :         block_i =  EXT3_I(inode)->i_block_alloc_info;
     510                 :            : 
     511                 :            :         /*
     512                 :            :          * try the heuristic for sequential allocation,
     513                 :            :          * failing that at least try to get decent locality.
     514                 :            :          */
     515 [ #  # ][ #  # ]:          0 :         if (block_i && (block == block_i->last_alloc_logical_block + 1)
     516         [ #  # ]:          0 :                 && (block_i->last_alloc_physical_block != 0)) {
     517                 :          0 :                 return block_i->last_alloc_physical_block + 1;
     518                 :            :         }
     519                 :            : 
     520                 :          0 :         return ext3_find_near(inode, partial);
     521                 :            : }
     522                 :            : 
     523                 :            : /**
     524                 :            :  *      ext3_blks_to_allocate - Look up the block map and count the number
     525                 :            :  *      of direct blocks need to be allocated for the given branch.
     526                 :            :  *
     527                 :            :  *      @branch: chain of indirect blocks
     528                 :            :  *      @k: number of blocks need for indirect blocks
     529                 :            :  *      @blks: number of data blocks to be mapped.
     530                 :            :  *      @blocks_to_boundary:  the offset in the indirect block
     531                 :            :  *
     532                 :            :  *      return the total number of blocks to be allocate, including the
     533                 :            :  *      direct and indirect blocks.
     534                 :            :  */
     535                 :          0 : static int ext3_blks_to_allocate(Indirect *branch, int k, unsigned long blks,
     536                 :            :                 int blocks_to_boundary)
     537                 :            : {
     538                 :            :         unsigned long count = 0;
     539                 :            : 
     540                 :            :         /*
     541                 :            :          * Simple case, [t,d]Indirect block(s) has not allocated yet
     542                 :            :          * then it's clear blocks on that path have not allocated
     543                 :            :          */
     544         [ #  # ]:          0 :         if (k > 0) {
     545                 :            :                 /* right now we don't handle cross boundary allocation */
     546         [ #  # ]:          0 :                 if (blks < blocks_to_boundary + 1)
     547                 :            :                         count += blks;
     548                 :            :                 else
     549                 :          0 :                         count += blocks_to_boundary + 1;
     550                 :          0 :                 return count;
     551                 :            :         }
     552                 :            : 
     553                 :            :         count++;
     554 [ #  # ][ #  # ]:          0 :         while (count < blks && count <= blocks_to_boundary &&
     555                 :          0 :                 le32_to_cpu(*(branch[0].p + count)) == 0) {
     556                 :          0 :                 count++;
     557                 :            :         }
     558                 :          0 :         return count;
     559                 :            : }
     560                 :            : 
     561                 :            : /**
     562                 :            :  *      ext3_alloc_blocks - multiple allocate blocks needed for a branch
     563                 :            :  *      @handle: handle for this transaction
     564                 :            :  *      @inode: owner
     565                 :            :  *      @goal: preferred place for allocation
     566                 :            :  *      @indirect_blks: the number of blocks need to allocate for indirect
     567                 :            :  *                      blocks
     568                 :            :  *      @blks:  number of blocks need to allocated for direct blocks
     569                 :            :  *      @new_blocks: on return it will store the new block numbers for
     570                 :            :  *      the indirect blocks(if needed) and the first direct block,
     571                 :            :  *      @err: here we store the error value
     572                 :            :  *
     573                 :            :  *      return the number of direct blocks allocated
     574                 :            :  */
     575                 :          0 : static int ext3_alloc_blocks(handle_t *handle, struct inode *inode,
     576                 :            :                         ext3_fsblk_t goal, int indirect_blks, int blks,
     577                 :            :                         ext3_fsblk_t new_blocks[4], int *err)
     578                 :            : {
     579                 :            :         int target, i;
     580                 :          0 :         unsigned long count = 0;
     581                 :            :         int index = 0;
     582                 :            :         ext3_fsblk_t current_block = 0;
     583                 :            :         int ret = 0;
     584                 :            : 
     585                 :            :         /*
     586                 :            :          * Here we try to allocate the requested multiple blocks at once,
     587                 :            :          * on a best-effort basis.
     588                 :            :          * To build a branch, we should allocate blocks for
     589                 :            :          * the indirect blocks(if not allocated yet), and at least
     590                 :            :          * the first direct block of this branch.  That's the
     591                 :            :          * minimum number of blocks need to allocate(required)
     592                 :            :          */
     593                 :          0 :         target = blks + indirect_blks;
     594                 :            : 
     595                 :            :         while (1) {
     596                 :          0 :                 count = target;
     597                 :            :                 /* allocating blocks for indirect blocks and direct blocks */
     598                 :          0 :                 current_block = ext3_new_blocks(handle,inode,goal,&count,err);
     599         [ #  # ]:          0 :                 if (*err)
     600                 :            :                         goto failed_out;
     601                 :            : 
     602                 :          0 :                 target -= count;
     603                 :            :                 /* allocate blocks for indirect blocks */
     604 [ #  # ][ #  # ]:          0 :                 while (index < indirect_blks && count) {
     605                 :          0 :                         new_blocks[index++] = current_block++;
     606                 :          0 :                         count--;
     607                 :            :                 }
     608                 :            : 
     609         [ #  # ]:          0 :                 if (count > 0)
     610                 :            :                         break;
     611                 :            :         }
     612                 :            : 
     613                 :            :         /* save the new block number for the first direct block */
     614                 :          0 :         new_blocks[index] = current_block;
     615                 :            : 
     616                 :            :         /* total number of blocks allocated for direct blocks */
     617                 :          0 :         ret = count;
     618                 :          0 :         *err = 0;
     619                 :          0 :         return ret;
     620                 :            : failed_out:
     621         [ #  # ]:          0 :         for (i = 0; i <index; i++)
     622                 :          0 :                 ext3_free_blocks(handle, inode, new_blocks[i], 1);
     623                 :            :         return ret;
     624                 :            : }
     625                 :            : 
     626                 :            : /**
     627                 :            :  *      ext3_alloc_branch - allocate and set up a chain of blocks.
     628                 :            :  *      @handle: handle for this transaction
     629                 :            :  *      @inode: owner
     630                 :            :  *      @indirect_blks: number of allocated indirect blocks
     631                 :            :  *      @blks: number of allocated direct blocks
     632                 :            :  *      @goal: preferred place for allocation
     633                 :            :  *      @offsets: offsets (in the blocks) to store the pointers to next.
     634                 :            :  *      @branch: place to store the chain in.
     635                 :            :  *
     636                 :            :  *      This function allocates blocks, zeroes out all but the last one,
     637                 :            :  *      links them into chain and (if we are synchronous) writes them to disk.
     638                 :            :  *      In other words, it prepares a branch that can be spliced onto the
     639                 :            :  *      inode. It stores the information about that chain in the branch[], in
     640                 :            :  *      the same format as ext3_get_branch() would do. We are calling it after
     641                 :            :  *      we had read the existing part of chain and partial points to the last
     642                 :            :  *      triple of that (one with zero ->key). Upon the exit we have the same
     643                 :            :  *      picture as after the successful ext3_get_block(), except that in one
     644                 :            :  *      place chain is disconnected - *branch->p is still zero (we did not
     645                 :            :  *      set the last link), but branch->key contains the number that should
     646                 :            :  *      be placed into *branch->p to fill that gap.
     647                 :            :  *
     648                 :            :  *      If allocation fails we free all blocks we've allocated (and forget
     649                 :            :  *      their buffer_heads) and return the error value the from failed
     650                 :            :  *      ext3_alloc_block() (normally -ENOSPC). Otherwise we set the chain
     651                 :            :  *      as described above and return 0.
     652                 :            :  */
     653                 :          0 : static int ext3_alloc_branch(handle_t *handle, struct inode *inode,
     654                 :            :                         int indirect_blks, int *blks, ext3_fsblk_t goal,
     655                 :            :                         int *offsets, Indirect *branch)
     656                 :            : {
     657                 :          0 :         int blocksize = inode->i_sb->s_blocksize;
     658                 :            :         int i, n = 0;
     659                 :          0 :         int err = 0;
     660                 :            :         struct buffer_head *bh;
     661                 :            :         int num;
     662                 :            :         ext3_fsblk_t new_blocks[4];
     663                 :            :         ext3_fsblk_t current_block;
     664                 :            : 
     665                 :          0 :         num = ext3_alloc_blocks(handle, inode, goal, indirect_blks,
     666                 :            :                                 *blks, new_blocks, &err);
     667         [ #  # ]:          0 :         if (err)
     668                 :            :                 return err;
     669                 :            : 
     670                 :          0 :         branch[0].key = cpu_to_le32(new_blocks[0]);
     671                 :            :         /*
     672                 :            :          * metadata blocks and data blocks are allocated.
     673                 :            :          */
     674         [ #  # ]:          0 :         for (n = 1; n <= indirect_blks;  n++) {
     675                 :            :                 /*
     676                 :            :                  * Get buffer_head for parent block, zero it out
     677                 :            :                  * and set the pointer to new one, then send
     678                 :            :                  * parent to disk.
     679                 :            :                  */
     680                 :          0 :                 bh = sb_getblk(inode->i_sb, new_blocks[n-1]);
     681         [ #  # ]:          0 :                 if (unlikely(!bh)) {
     682                 :          0 :                         err = -ENOMEM;
     683                 :          0 :                         goto failed;
     684                 :            :                 }
     685                 :          0 :                 branch[n].bh = bh;
     686                 :            :                 lock_buffer(bh);
     687                 :            :                 BUFFER_TRACE(bh, "call get_create_access");
     688                 :          0 :                 err = ext3_journal_get_create_access(handle, bh);
     689         [ #  # ]:          0 :                 if (err) {
     690                 :          0 :                         unlock_buffer(bh);
     691                 :            :                         brelse(bh);
     692                 :            :                         goto failed;
     693                 :            :                 }
     694                 :            : 
     695         [ #  # ]:          0 :                 memset(bh->b_data, 0, blocksize);
     696                 :          0 :                 branch[n].p = (__le32 *) bh->b_data + offsets[n];
     697                 :          0 :                 branch[n].key = cpu_to_le32(new_blocks[n]);
     698                 :          0 :                 *branch[n].p = branch[n].key;
     699         [ #  # ]:          0 :                 if ( n == indirect_blks) {
     700                 :          0 :                         current_block = new_blocks[n];
     701                 :            :                         /*
     702                 :            :                          * End of chain, update the last new metablock of
     703                 :            :                          * the chain to point to the new allocated
     704                 :            :                          * data blocks numbers
     705                 :            :                          */
     706         [ #  # ]:          0 :                         for (i=1; i < num; i++)
     707                 :          0 :                                 *(branch[n].p + i) = cpu_to_le32(++current_block);
     708                 :            :                 }
     709                 :            :                 BUFFER_TRACE(bh, "marking uptodate");
     710                 :            :                 set_buffer_uptodate(bh);
     711                 :          0 :                 unlock_buffer(bh);
     712                 :            : 
     713                 :            :                 BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
     714                 :          0 :                 err = ext3_journal_dirty_metadata(handle, bh);
     715         [ #  # ]:          0 :                 if (err)
     716                 :            :                         goto failed;
     717                 :            :         }
     718                 :          0 :         *blks = num;
     719                 :          0 :         return err;
     720                 :            : failed:
     721                 :            :         /* Allocation failed, free what we already allocated */
     722         [ #  # ]:          0 :         for (i = 1; i <= n ; i++) {
     723                 :            :                 BUFFER_TRACE(branch[i].bh, "call journal_forget");
     724                 :          0 :                 ext3_journal_forget(handle, branch[i].bh);
     725                 :            :         }
     726         [ #  # ]:          0 :         for (i = 0; i < indirect_blks; i++)
     727                 :          0 :                 ext3_free_blocks(handle, inode, new_blocks[i], 1);
     728                 :            : 
     729                 :          0 :         ext3_free_blocks(handle, inode, new_blocks[i], num);
     730                 :            : 
     731                 :          0 :         return err;
     732                 :            : }
     733                 :            : 
     734                 :            : /**
     735                 :            :  * ext3_splice_branch - splice the allocated branch onto inode.
     736                 :            :  * @handle: handle for this transaction
     737                 :            :  * @inode: owner
     738                 :            :  * @block: (logical) number of block we are adding
     739                 :            :  * @where: location of missing link
     740                 :            :  * @num:   number of indirect blocks we are adding
     741                 :            :  * @blks:  number of direct blocks we are adding
     742                 :            :  *
     743                 :            :  * This function fills the missing link and does all housekeeping needed in
     744                 :            :  * inode (->i_blocks, etc.). In case of success we end up with the full
     745                 :            :  * chain to new block and return 0.
     746                 :            :  */
     747                 :          0 : static int ext3_splice_branch(handle_t *handle, struct inode *inode,
     748                 :            :                         long block, Indirect *where, int num, int blks)
     749                 :            : {
     750                 :            :         int i;
     751                 :            :         int err = 0;
     752                 :            :         struct ext3_block_alloc_info *block_i;
     753                 :            :         ext3_fsblk_t current_block;
     754                 :            :         struct ext3_inode_info *ei = EXT3_I(inode);
     755                 :            :         struct timespec now;
     756                 :            : 
     757                 :          0 :         block_i = ei->i_block_alloc_info;
     758                 :            :         /*
     759                 :            :          * If we're splicing into a [td]indirect block (as opposed to the
     760                 :            :          * inode) then we need to get write access to the [td]indirect block
     761                 :            :          * before the splice.
     762                 :            :          */
     763         [ #  # ]:          0 :         if (where->bh) {
     764                 :            :                 BUFFER_TRACE(where->bh, "get_write_access");
     765                 :          0 :                 err = ext3_journal_get_write_access(handle, where->bh);
     766         [ #  # ]:          0 :                 if (err)
     767                 :            :                         goto err_out;
     768                 :            :         }
     769                 :            :         /* That's it */
     770                 :            : 
     771                 :          0 :         *where->p = where->key;
     772                 :            : 
     773                 :            :         /*
     774                 :            :          * Update the host buffer_head or inode to point to more just allocated
     775                 :            :          * direct blocks blocks
     776                 :            :          */
     777         [ #  # ]:          0 :         if (num == 0 && blks > 1) {
     778                 :          0 :                 current_block = le32_to_cpu(where->key) + 1;
     779         [ #  # ]:          0 :                 for (i = 1; i < blks; i++)
     780                 :          0 :                         *(where->p + i ) = cpu_to_le32(current_block++);
     781                 :            :         }
     782                 :            : 
     783                 :            :         /*
     784                 :            :          * update the most recently allocated logical & physical block
     785                 :            :          * in i_block_alloc_info, to assist find the proper goal block for next
     786                 :            :          * allocation
     787                 :            :          */
     788         [ #  # ]:          0 :         if (block_i) {
     789                 :          0 :                 block_i->last_alloc_logical_block = block + blks - 1;
     790                 :          0 :                 block_i->last_alloc_physical_block =
     791                 :          0 :                                 le32_to_cpu(where[num].key) + blks - 1;
     792                 :            :         }
     793                 :            : 
     794                 :            :         /* We are done with atomic stuff, now do the rest of housekeeping */
     795                 :          0 :         now = CURRENT_TIME_SEC;
     796 [ #  # ][ #  # ]:          0 :         if (!timespec_equal(&inode->i_ctime, &now) || !where->bh) {
     797                 :          0 :                 inode->i_ctime = now;
     798                 :          0 :                 ext3_mark_inode_dirty(handle, inode);
     799                 :            :         }
     800                 :            :         /* ext3_mark_inode_dirty already updated i_sync_tid */
     801                 :          0 :         atomic_set(&ei->i_datasync_tid, handle->h_transaction->t_tid);
     802                 :            : 
     803                 :            :         /* had we spliced it onto indirect block? */
     804         [ #  # ]:          0 :         if (where->bh) {
     805                 :            :                 /*
     806                 :            :                  * If we spliced it onto an indirect block, we haven't
     807                 :            :                  * altered the inode.  Note however that if it is being spliced
     808                 :            :                  * onto an indirect block at the very end of the file (the
     809                 :            :                  * file is growing) then we *will* alter the inode to reflect
     810                 :            :                  * the new i_size.  But that is not done here - it is done in
     811                 :            :                  * generic_commit_write->__mark_inode_dirty->ext3_dirty_inode.
     812                 :            :                  */
     813                 :            :                 jbd_debug(5, "splicing indirect only\n");
     814                 :            :                 BUFFER_TRACE(where->bh, "call ext3_journal_dirty_metadata");
     815                 :          0 :                 err = ext3_journal_dirty_metadata(handle, where->bh);
     816         [ #  # ]:          0 :                 if (err)
     817                 :            :                         goto err_out;
     818                 :            :         } else {
     819                 :            :                 /*
     820                 :            :                  * OK, we spliced it into the inode itself on a direct block.
     821                 :            :                  * Inode was dirtied above.
     822                 :            :                  */
     823                 :            :                 jbd_debug(5, "splicing direct\n");
     824                 :            :         }
     825                 :          0 :         return err;
     826                 :            : 
     827                 :            : err_out:
     828         [ #  # ]:          0 :         for (i = 1; i <= num; i++) {
     829                 :            :                 BUFFER_TRACE(where[i].bh, "call journal_forget");
     830                 :          0 :                 ext3_journal_forget(handle, where[i].bh);
     831                 :          0 :                 ext3_free_blocks(handle,inode,le32_to_cpu(where[i-1].key),1);
     832                 :            :         }
     833                 :          0 :         ext3_free_blocks(handle, inode, le32_to_cpu(where[num].key), blks);
     834                 :            : 
     835                 :          0 :         return err;
     836                 :            : }
     837                 :            : 
     838                 :            : /*
     839                 :            :  * Allocation strategy is simple: if we have to allocate something, we will
     840                 :            :  * have to go the whole way to leaf. So let's do it before attaching anything
     841                 :            :  * to tree, set linkage between the newborn blocks, write them if sync is
     842                 :            :  * required, recheck the path, free and repeat if check fails, otherwise
     843                 :            :  * set the last missing link (that will protect us from any truncate-generated
     844                 :            :  * removals - all blocks on the path are immune now) and possibly force the
     845                 :            :  * write on the parent block.
     846                 :            :  * That has a nice additional property: no special recovery from the failed
     847                 :            :  * allocations is needed - we simply release blocks and do not touch anything
     848                 :            :  * reachable from inode.
     849                 :            :  *
     850                 :            :  * `handle' can be NULL if create == 0.
     851                 :            :  *
     852                 :            :  * The BKL may not be held on entry here.  Be sure to take it early.
     853                 :            :  * return > 0, # of blocks mapped or allocated.
     854                 :            :  * return = 0, if plain lookup failed.
     855                 :            :  * return < 0, error case.
     856                 :            :  */
     857                 :          0 : int ext3_get_blocks_handle(handle_t *handle, struct inode *inode,
     858                 :            :                 sector_t iblock, unsigned long maxblocks,
     859                 :            :                 struct buffer_head *bh_result,
     860                 :            :                 int create)
     861                 :            : {
     862                 :          0 :         int err = -EIO;
     863                 :            :         int offsets[4];
     864                 :            :         Indirect chain[4];
     865                 :            :         Indirect *partial;
     866                 :            :         ext3_fsblk_t goal;
     867                 :            :         int indirect_blks;
     868                 :          0 :         int blocks_to_boundary = 0;
     869                 :            :         int depth;
     870                 :            :         struct ext3_inode_info *ei = EXT3_I(inode);
     871                 :          0 :         int count = 0;
     872                 :            :         ext3_fsblk_t first_block = 0;
     873                 :            : 
     874                 :            : 
     875                 :          0 :         trace_ext3_get_blocks_enter(inode, iblock, maxblocks, create);
     876         [ #  # ]:          0 :         J_ASSERT(handle != NULL || create == 0);
     877                 :          0 :         depth = ext3_block_to_path(inode,iblock,offsets,&blocks_to_boundary);
     878                 :            : 
     879         [ #  # ]:          0 :         if (depth == 0)
     880                 :            :                 goto out;
     881                 :            : 
     882                 :          0 :         partial = ext3_get_branch(inode, depth, offsets, chain, &err);
     883                 :            : 
     884                 :            :         /* Simplest case - block found, no allocation needed */
     885         [ #  # ]:          0 :         if (!partial) {
     886                 :          0 :                 first_block = le32_to_cpu(chain[depth - 1].key);
     887                 :            :                 clear_buffer_new(bh_result);
     888                 :          0 :                 count++;
     889                 :            :                 /*map more blocks*/
     890 [ #  # ][ #  # ]:          0 :                 while (count < maxblocks && count <= blocks_to_boundary) {
     891                 :            :                         ext3_fsblk_t blk;
     892                 :            : 
     893         [ #  # ]:          0 :                         if (!verify_chain(chain, chain + depth - 1)) {
     894                 :            :                                 /*
     895                 :            :                                  * Indirect block might be removed by
     896                 :            :                                  * truncate while we were reading it.
     897                 :            :                                  * Handling of that case: forget what we've
     898                 :            :                                  * got now. Flag the err as EAGAIN, so it
     899                 :            :                                  * will reread.
     900                 :            :                                  */
     901                 :          0 :                                 err = -EAGAIN;
     902                 :          0 :                                 count = 0;
     903                 :          0 :                                 break;
     904                 :            :                         }
     905                 :          0 :                         blk = le32_to_cpu(*(chain[depth-1].p + count));
     906                 :            : 
     907         [ #  # ]:          0 :                         if (blk == first_block + count)
     908                 :          0 :                                 count++;
     909                 :            :                         else
     910                 :            :                                 break;
     911                 :            :                 }
     912         [ #  # ]:          0 :                 if (err != -EAGAIN)
     913                 :            :                         goto got_it;
     914                 :            :         }
     915                 :            : 
     916                 :            :         /* Next simple case - plain lookup or failed read of indirect block */
     917 [ #  # ][ #  # ]:          0 :         if (!create || err == -EIO)
     918                 :            :                 goto cleanup;
     919                 :            : 
     920                 :            :         /*
     921                 :            :          * Block out ext3_truncate while we alter the tree
     922                 :            :          */
     923                 :          0 :         mutex_lock(&ei->truncate_mutex);
     924                 :            : 
     925                 :            :         /*
     926                 :            :          * If the indirect block is missing while we are reading
     927                 :            :          * the chain(ext3_get_branch() returns -EAGAIN err), or
     928                 :            :          * if the chain has been changed after we grab the semaphore,
     929                 :            :          * (either because another process truncated this branch, or
     930                 :            :          * another get_block allocated this branch) re-grab the chain to see if
     931                 :            :          * the request block has been allocated or not.
     932                 :            :          *
     933                 :            :          * Since we already block the truncate/other get_block
     934                 :            :          * at this point, we will have the current copy of the chain when we
     935                 :            :          * splice the branch into the tree.
     936                 :            :          */
     937 [ #  # ][ #  # ]:          0 :         if (err == -EAGAIN || !verify_chain(chain, partial)) {
     938         [ #  # ]:          0 :                 while (partial > chain) {
     939                 :          0 :                         brelse(partial->bh);
     940                 :          0 :                         partial--;
     941                 :            :                 }
     942                 :          0 :                 partial = ext3_get_branch(inode, depth, offsets, chain, &err);
     943         [ #  # ]:          0 :                 if (!partial) {
     944                 :          0 :                         count++;
     945                 :          0 :                         mutex_unlock(&ei->truncate_mutex);
     946         [ #  # ]:          0 :                         if (err)
     947                 :            :                                 goto cleanup;
     948                 :            :                         clear_buffer_new(bh_result);
     949                 :            :                         goto got_it;
     950                 :            :                 }
     951                 :            :         }
     952                 :            : 
     953                 :            :         /*
     954                 :            :          * Okay, we need to do block allocation.  Lazily initialize the block
     955                 :            :          * allocation info here if necessary
     956                 :            :         */
     957 [ #  # ][ #  # ]:          0 :         if (S_ISREG(inode->i_mode) && (!ei->i_block_alloc_info))
     958                 :          0 :                 ext3_init_block_alloc_info(inode);
     959                 :            : 
     960                 :          0 :         goal = ext3_find_goal(inode, iblock, partial);
     961                 :            : 
     962                 :            :         /* the number of blocks need to allocate for [d,t]indirect blocks */
     963                 :          0 :         indirect_blks = (chain + depth) - partial - 1;
     964                 :            : 
     965                 :            :         /*
     966                 :            :          * Next look up the indirect map to count the totoal number of
     967                 :            :          * direct blocks to allocate for this branch.
     968                 :            :          */
     969                 :          0 :         count = ext3_blks_to_allocate(partial, indirect_blks,
     970                 :            :                                         maxblocks, blocks_to_boundary);
     971                 :          0 :         err = ext3_alloc_branch(handle, inode, indirect_blks, &count, goal,
     972                 :          0 :                                 offsets + (partial - chain), partial);
     973                 :            : 
     974                 :            :         /*
     975                 :            :          * The ext3_splice_branch call will free and forget any buffers
     976                 :            :          * on the new chain if there is a failure, but that risks using
     977                 :            :          * up transaction credits, especially for bitmaps where the
     978                 :            :          * credits cannot be returned.  Can we handle this somehow?  We
     979                 :            :          * may need to return -EAGAIN upwards in the worst case.  --sct
     980                 :            :          */
     981         [ #  # ]:          0 :         if (!err)
     982                 :          0 :                 err = ext3_splice_branch(handle, inode, iblock,
     983                 :            :                                         partial, indirect_blks, count);
     984                 :          0 :         mutex_unlock(&ei->truncate_mutex);
     985         [ #  # ]:          0 :         if (err)
     986                 :            :                 goto cleanup;
     987                 :            : 
     988                 :            :         set_buffer_new(bh_result);
     989                 :            : got_it:
     990                 :          0 :         map_bh(bh_result, inode->i_sb, le32_to_cpu(chain[depth-1].key));
     991         [ #  # ]:          0 :         if (count > blocks_to_boundary)
     992                 :            :                 set_buffer_boundary(bh_result);
     993                 :          0 :         err = count;
     994                 :            :         /* Clean up and exit */
     995                 :          0 :         partial = chain + depth - 1;    /* the whole chain */
     996                 :            : cleanup:
     997         [ #  # ]:          0 :         while (partial > chain) {
     998                 :            :                 BUFFER_TRACE(partial->bh, "call brelse");
     999                 :          0 :                 brelse(partial->bh);
    1000                 :          0 :                 partial--;
    1001                 :            :         }
    1002                 :            :         BUFFER_TRACE(bh_result, "returned");
    1003                 :            : out:
    1004         [ #  # ]:          0 :         trace_ext3_get_blocks_exit(inode, iblock,
    1005                 :          0 :                                    depth ? le32_to_cpu(chain[depth-1].key) : 0,
    1006                 :            :                                    count, err);
    1007                 :          0 :         return err;
    1008                 :            : }
    1009                 :            : 
    1010                 :            : /* Maximum number of blocks we map for direct IO at once. */
    1011                 :            : #define DIO_MAX_BLOCKS 4096
    1012                 :            : /*
    1013                 :            :  * Number of credits we need for writing DIO_MAX_BLOCKS:
    1014                 :            :  * We need sb + group descriptor + bitmap + inode -> 4
    1015                 :            :  * For B blocks with A block pointers per block we need:
    1016                 :            :  * 1 (triple ind.) + (B/A/A + 2) (doubly ind.) + (B/A + 2) (indirect).
    1017                 :            :  * If we plug in 4096 for B and 256 for A (for 1KB block size), we get 25.
    1018                 :            :  */
    1019                 :            : #define DIO_CREDITS 25
    1020                 :            : 
    1021                 :          0 : static int ext3_get_block(struct inode *inode, sector_t iblock,
    1022                 :            :                         struct buffer_head *bh_result, int create)
    1023                 :            : {
    1024                 :            :         handle_t *handle = ext3_journal_current_handle();
    1025                 :            :         int ret = 0, started = 0;
    1026                 :          0 :         unsigned max_blocks = bh_result->b_size >> inode->i_blkbits;
    1027                 :            : 
    1028         [ #  # ]:          0 :         if (create && !handle) {        /* Direct IO write... */
    1029         [ #  # ]:          0 :                 if (max_blocks > DIO_MAX_BLOCKS)
    1030                 :            :                         max_blocks = DIO_MAX_BLOCKS;
    1031         [ #  # ]:          0 :                 handle = ext3_journal_start(inode, DIO_CREDITS +
    1032                 :          0 :                                 EXT3_MAXQUOTAS_TRANS_BLOCKS(inode->i_sb));
    1033         [ #  # ]:          0 :                 if (IS_ERR(handle)) {
    1034                 :            :                         ret = PTR_ERR(handle);
    1035                 :          0 :                         goto out;
    1036                 :            :                 }
    1037                 :            :                 started = 1;
    1038                 :            :         }
    1039                 :            : 
    1040                 :          0 :         ret = ext3_get_blocks_handle(handle, inode, iblock,
    1041                 :            :                                         max_blocks, bh_result, create);
    1042         [ #  # ]:          0 :         if (ret > 0) {
    1043                 :          0 :                 bh_result->b_size = (ret << inode->i_blkbits);
    1044                 :            :                 ret = 0;
    1045                 :            :         }
    1046         [ #  # ]:          0 :         if (started)
    1047                 :          0 :                 ext3_journal_stop(handle);
    1048                 :            : out:
    1049                 :          0 :         return ret;
    1050                 :            : }
    1051                 :            : 
    1052                 :          0 : int ext3_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
    1053                 :            :                 u64 start, u64 len)
    1054                 :            : {
    1055                 :          0 :         return generic_block_fiemap(inode, fieinfo, start, len,
    1056                 :            :                                     ext3_get_block);
    1057                 :            : }
    1058                 :            : 
    1059                 :            : /*
    1060                 :            :  * `handle' can be NULL if create is zero
    1061                 :            :  */
    1062                 :          0 : struct buffer_head *ext3_getblk(handle_t *handle, struct inode *inode,
    1063                 :            :                                 long block, int create, int *errp)
    1064                 :            : {
    1065                 :            :         struct buffer_head dummy;
    1066                 :            :         int fatal = 0, err;
    1067                 :            : 
    1068         [ #  # ]:          0 :         J_ASSERT(handle != NULL || create == 0);
    1069                 :            : 
    1070                 :          0 :         dummy.b_state = 0;
    1071                 :          0 :         dummy.b_blocknr = -1000;
    1072                 :            :         buffer_trace_init(&dummy.b_history);
    1073                 :          0 :         err = ext3_get_blocks_handle(handle, inode, block, 1,
    1074                 :            :                                         &dummy, create);
    1075                 :            :         /*
    1076                 :            :          * ext3_get_blocks_handle() returns number of blocks
    1077                 :            :          * mapped. 0 in case of a HOLE.
    1078                 :            :          */
    1079         [ #  # ]:          0 :         if (err > 0) {
    1080         [ #  # ]:          0 :                 WARN_ON(err > 1);
    1081                 :            :                 err = 0;
    1082                 :            :         }
    1083                 :          0 :         *errp = err;
    1084 [ #  # ][ #  # ]:          0 :         if (!err && buffer_mapped(&dummy)) {
    1085                 :            :                 struct buffer_head *bh;
    1086                 :          0 :                 bh = sb_getblk(inode->i_sb, dummy.b_blocknr);
    1087         [ #  # ]:          0 :                 if (unlikely(!bh)) {
    1088                 :          0 :                         *errp = -ENOMEM;
    1089                 :          0 :                         goto err;
    1090                 :            :                 }
    1091         [ #  # ]:          0 :                 if (buffer_new(&dummy)) {
    1092         [ #  # ]:          0 :                         J_ASSERT(create != 0);
    1093         [ #  # ]:          0 :                         J_ASSERT(handle != NULL);
    1094                 :            : 
    1095                 :            :                         /*
    1096                 :            :                          * Now that we do not always journal data, we should
    1097                 :            :                          * keep in mind whether this should always journal the
    1098                 :            :                          * new buffer as metadata.  For now, regular file
    1099                 :            :                          * writes use ext3_get_block instead, so it's not a
    1100                 :            :                          * problem.
    1101                 :            :                          */
    1102                 :            :                         lock_buffer(bh);
    1103                 :            :                         BUFFER_TRACE(bh, "call get_create_access");
    1104                 :          0 :                         fatal = ext3_journal_get_create_access(handle, bh);
    1105 [ #  # ][ #  # ]:          0 :                         if (!fatal && !buffer_uptodate(bh)) {
    1106         [ #  # ]:          0 :                                 memset(bh->b_data,0,inode->i_sb->s_blocksize);
    1107                 :            :                                 set_buffer_uptodate(bh);
    1108                 :            :                         }
    1109                 :          0 :                         unlock_buffer(bh);
    1110                 :            :                         BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
    1111                 :          0 :                         err = ext3_journal_dirty_metadata(handle, bh);
    1112         [ #  # ]:          0 :                         if (!fatal)
    1113                 :            :                                 fatal = err;
    1114                 :            :                 } else {
    1115                 :            :                         BUFFER_TRACE(bh, "not a new buffer");
    1116                 :            :                 }
    1117         [ #  # ]:          0 :                 if (fatal) {
    1118                 :          0 :                         *errp = fatal;
    1119                 :            :                         brelse(bh);
    1120                 :            :                         bh = NULL;
    1121                 :            :                 }
    1122                 :          0 :                 return bh;
    1123                 :            :         }
    1124                 :            : err:
    1125                 :            :         return NULL;
    1126                 :            : }
    1127                 :            : 
    1128                 :          0 : struct buffer_head *ext3_bread(handle_t *handle, struct inode *inode,
    1129                 :            :                                int block, int create, int *err)
    1130                 :            : {
    1131                 :            :         struct buffer_head * bh;
    1132                 :            : 
    1133                 :          0 :         bh = ext3_getblk(handle, inode, block, create, err);
    1134         [ #  # ]:          0 :         if (!bh)
    1135                 :            :                 return bh;
    1136         [ #  # ]:          0 :         if (bh_uptodate_or_lock(bh))
    1137                 :            :                 return bh;
    1138                 :            :         get_bh(bh);
    1139                 :          0 :         bh->b_end_io = end_buffer_read_sync;
    1140                 :          0 :         submit_bh(READ | REQ_META | REQ_PRIO, bh);
    1141                 :            :         wait_on_buffer(bh);
    1142         [ #  # ]:          0 :         if (buffer_uptodate(bh))
    1143                 :            :                 return bh;
    1144                 :            :         put_bh(bh);
    1145                 :          0 :         *err = -EIO;
    1146                 :          0 :         return NULL;
    1147                 :            : }
    1148                 :            : 
    1149                 :          0 : static int walk_page_buffers(   handle_t *handle,
    1150                 :            :                                 struct buffer_head *head,
    1151                 :            :                                 unsigned from,
    1152                 :            :                                 unsigned to,
    1153                 :            :                                 int *partial,
    1154                 :            :                                 int (*fn)(      handle_t *handle,
    1155                 :            :                                                 struct buffer_head *bh))
    1156                 :            : {
    1157                 :            :         struct buffer_head *bh;
    1158                 :            :         unsigned block_start, block_end;
    1159                 :          0 :         unsigned blocksize = head->b_size;
    1160                 :            :         int err, ret = 0;
    1161                 :            :         struct buffer_head *next;
    1162                 :            : 
    1163         [ #  # ]:          0 :         for (   bh = head, block_start = 0;
    1164         [ #  # ]:          0 :                 ret == 0 && (bh != head || !block_start);
    1165                 :            :                 block_start = block_end, bh = next)
    1166                 :            :         {
    1167                 :          0 :                 next = bh->b_this_page;
    1168                 :          0 :                 block_end = block_start + blocksize;
    1169         [ #  # ]:          0 :                 if (block_end <= from || block_start >= to) {
    1170 [ #  # ][ #  # ]:          0 :                         if (partial && !buffer_uptodate(bh))
    1171                 :          0 :                                 *partial = 1;
    1172                 :          0 :                         continue;
    1173                 :            :                 }
    1174                 :          0 :                 err = (*fn)(handle, bh);
    1175         [ #  # ]:          0 :                 if (!ret)
    1176                 :            :                         ret = err;
    1177                 :            :         }
    1178                 :          0 :         return ret;
    1179                 :            : }
    1180                 :            : 
    1181                 :            : /*
    1182                 :            :  * To preserve ordering, it is essential that the hole instantiation and
    1183                 :            :  * the data write be encapsulated in a single transaction.  We cannot
    1184                 :            :  * close off a transaction and start a new one between the ext3_get_block()
    1185                 :            :  * and the commit_write().  So doing the journal_start at the start of
    1186                 :            :  * prepare_write() is the right place.
    1187                 :            :  *
    1188                 :            :  * Also, this function can nest inside ext3_writepage() ->
    1189                 :            :  * block_write_full_page(). In that case, we *know* that ext3_writepage()
    1190                 :            :  * has generated enough buffer credits to do the whole page.  So we won't
    1191                 :            :  * block on the journal in that case, which is good, because the caller may
    1192                 :            :  * be PF_MEMALLOC.
    1193                 :            :  *
    1194                 :            :  * By accident, ext3 can be reentered when a transaction is open via
    1195                 :            :  * quota file writes.  If we were to commit the transaction while thus
    1196                 :            :  * reentered, there can be a deadlock - we would be holding a quota
    1197                 :            :  * lock, and the commit would never complete if another thread had a
    1198                 :            :  * transaction open and was blocking on the quota lock - a ranking
    1199                 :            :  * violation.
    1200                 :            :  *
    1201                 :            :  * So what we do is to rely on the fact that journal_stop/journal_start
    1202                 :            :  * will _not_ run commit under these circumstances because handle->h_ref
    1203                 :            :  * is elevated.  We'll still have enough credits for the tiny quotafile
    1204                 :            :  * write.
    1205                 :            :  */
    1206                 :          0 : static int do_journal_get_write_access(handle_t *handle,
    1207                 :            :                                         struct buffer_head *bh)
    1208                 :            : {
    1209                 :            :         int dirty = buffer_dirty(bh);
    1210                 :            :         int ret;
    1211                 :            : 
    1212 [ #  # ][ #  # ]:          0 :         if (!buffer_mapped(bh) || buffer_freed(bh))
    1213                 :            :                 return 0;
    1214                 :            :         /*
    1215                 :            :          * __block_prepare_write() could have dirtied some buffers. Clean
    1216                 :            :          * the dirty bit as jbd2_journal_get_write_access() could complain
    1217                 :            :          * otherwise about fs integrity issues. Setting of the dirty bit
    1218                 :            :          * by __block_prepare_write() isn't a real problem here as we clear
    1219                 :            :          * the bit before releasing a page lock and thus writeback cannot
    1220                 :            :          * ever write the buffer.
    1221                 :            :          */
    1222         [ #  # ]:          0 :         if (dirty)
    1223                 :            :                 clear_buffer_dirty(bh);
    1224                 :          0 :         ret = ext3_journal_get_write_access(handle, bh);
    1225         [ #  # ]:          0 :         if (!ret && dirty)
    1226                 :          0 :                 ret = ext3_journal_dirty_metadata(handle, bh);
    1227                 :          0 :         return ret;
    1228                 :            : }
    1229                 :            : 
    1230                 :            : /*
    1231                 :            :  * Truncate blocks that were not used by write. We have to truncate the
    1232                 :            :  * pagecache as well so that corresponding buffers get properly unmapped.
    1233                 :            :  */
    1234                 :          0 : static void ext3_truncate_failed_write(struct inode *inode)
    1235                 :            : {
    1236                 :          0 :         truncate_inode_pages(inode->i_mapping, inode->i_size);
    1237                 :          0 :         ext3_truncate(inode);
    1238                 :          0 : }
    1239                 :            : 
    1240                 :            : /*
    1241                 :            :  * Truncate blocks that were not used by direct IO write. We have to zero out
    1242                 :            :  * the last file block as well because direct IO might have written to it.
    1243                 :            :  */
    1244                 :          0 : static void ext3_truncate_failed_direct_write(struct inode *inode)
    1245                 :            : {
    1246                 :          0 :         ext3_block_truncate_page(inode, inode->i_size);
    1247                 :          0 :         ext3_truncate(inode);
    1248                 :          0 : }
    1249                 :            : 
    1250                 :          0 : static int ext3_write_begin(struct file *file, struct address_space *mapping,
    1251                 :            :                                 loff_t pos, unsigned len, unsigned flags,
    1252                 :            :                                 struct page **pagep, void **fsdata)
    1253                 :            : {
    1254                 :          0 :         struct inode *inode = mapping->host;
    1255                 :            :         int ret;
    1256                 :            :         handle_t *handle;
    1257                 :          0 :         int retries = 0;
    1258                 :            :         struct page *page;
    1259                 :            :         pgoff_t index;
    1260                 :            :         unsigned from, to;
    1261                 :            :         /* Reserve one block more for addition to orphan list in case
    1262                 :            :          * we allocate blocks but write fails for some reason */
    1263                 :          0 :         int needed_blocks = ext3_writepage_trans_blocks(inode) + 1;
    1264                 :            : 
    1265                 :            :         trace_ext3_write_begin(inode, pos, len, flags);
    1266                 :            : 
    1267                 :          0 :         index = pos >> PAGE_CACHE_SHIFT;
    1268                 :          0 :         from = pos & (PAGE_CACHE_SIZE - 1);
    1269                 :          0 :         to = from + len;
    1270                 :            : 
    1271                 :            : retry:
    1272                 :          0 :         page = grab_cache_page_write_begin(mapping, index, flags);
    1273         [ #  # ]:          0 :         if (!page)
    1274                 :            :                 return -ENOMEM;
    1275                 :          0 :         *pagep = page;
    1276                 :            : 
    1277                 :            :         handle = ext3_journal_start(inode, needed_blocks);
    1278         [ #  # ]:          0 :         if (IS_ERR(handle)) {
    1279                 :          0 :                 unlock_page(page);
    1280                 :          0 :                 page_cache_release(page);
    1281                 :            :                 ret = PTR_ERR(handle);
    1282                 :          0 :                 goto out;
    1283                 :            :         }
    1284                 :          0 :         ret = __block_write_begin(page, pos, len, ext3_get_block);
    1285         [ #  # ]:          0 :         if (ret)
    1286                 :            :                 goto write_begin_failed;
    1287                 :            : 
    1288         [ #  # ]:          0 :         if (ext3_should_journal_data(inode)) {
    1289         [ #  # ]:          0 :                 ret = walk_page_buffers(handle, page_buffers(page),
    1290                 :            :                                 from, to, NULL, do_journal_get_write_access);
    1291                 :            :         }
    1292                 :            : write_begin_failed:
    1293         [ #  # ]:          0 :         if (ret) {
    1294                 :            :                 /*
    1295                 :            :                  * block_write_begin may have instantiated a few blocks
    1296                 :            :                  * outside i_size.  Trim these off again. Don't need
    1297                 :            :                  * i_size_read because we hold i_mutex.
    1298                 :            :                  *
    1299                 :            :                  * Add inode to orphan list in case we crash before truncate
    1300                 :            :                  * finishes. Do this only if ext3_can_truncate() agrees so
    1301                 :            :                  * that orphan processing code is happy.
    1302                 :            :                  */
    1303 [ #  # ][ #  # ]:          0 :                 if (pos + len > inode->i_size && ext3_can_truncate(inode))
    1304                 :          0 :                         ext3_orphan_add(handle, inode);
    1305                 :          0 :                 ext3_journal_stop(handle);
    1306                 :          0 :                 unlock_page(page);
    1307                 :          0 :                 page_cache_release(page);
    1308         [ #  # ]:          0 :                 if (pos + len > inode->i_size)
    1309                 :          0 :                         ext3_truncate_failed_write(inode);
    1310                 :            :         }
    1311 [ #  # ][ #  # ]:          0 :         if (ret == -ENOSPC && ext3_should_retry_alloc(inode->i_sb, &retries))
    1312                 :            :                 goto retry;
    1313                 :            : out:
    1314                 :          0 :         return ret;
    1315                 :            : }
    1316                 :            : 
    1317                 :            : 
    1318                 :          0 : int ext3_journal_dirty_data(handle_t *handle, struct buffer_head *bh)
    1319                 :            : {
    1320                 :          0 :         int err = journal_dirty_data(handle, bh);
    1321         [ #  # ]:          0 :         if (err)
    1322                 :          0 :                 ext3_journal_abort_handle(__func__, __func__,
    1323                 :            :                                                 bh, handle, err);
    1324                 :          0 :         return err;
    1325                 :            : }
    1326                 :            : 
    1327                 :            : /* For ordered writepage and write_end functions */
    1328                 :          0 : static int journal_dirty_data_fn(handle_t *handle, struct buffer_head *bh)
    1329                 :            : {
    1330                 :            :         /*
    1331                 :            :          * Write could have mapped the buffer but it didn't copy the data in
    1332                 :            :          * yet. So avoid filing such buffer into a transaction.
    1333                 :            :          */
    1334 [ #  # ][ #  # ]:          0 :         if (buffer_mapped(bh) && buffer_uptodate(bh))
    1335                 :          0 :                 return ext3_journal_dirty_data(handle, bh);
    1336                 :            :         return 0;
    1337                 :            : }
    1338                 :            : 
    1339                 :            : /* For write_end() in data=journal mode */
    1340                 :          0 : static int write_end_fn(handle_t *handle, struct buffer_head *bh)
    1341                 :            : {
    1342 [ #  # ][ #  # ]:          0 :         if (!buffer_mapped(bh) || buffer_freed(bh))
    1343                 :            :                 return 0;
    1344                 :            :         set_buffer_uptodate(bh);
    1345                 :          0 :         return ext3_journal_dirty_metadata(handle, bh);
    1346                 :            : }
    1347                 :            : 
    1348                 :            : /*
    1349                 :            :  * This is nasty and subtle: ext3_write_begin() could have allocated blocks
    1350                 :            :  * for the whole page but later we failed to copy the data in. Update inode
    1351                 :            :  * size according to what we managed to copy. The rest is going to be
    1352                 :            :  * truncated in write_end function.
    1353                 :            :  */
    1354                 :          0 : static void update_file_sizes(struct inode *inode, loff_t pos, unsigned copied)
    1355                 :            : {
    1356                 :            :         /* What matters to us is i_disksize. We don't write i_size anywhere */
    1357         [ #  # ]:          0 :         if (pos + copied > inode->i_size)
    1358                 :            :                 i_size_write(inode, pos + copied);
    1359         [ #  # ]:          0 :         if (pos + copied > EXT3_I(inode)->i_disksize) {
    1360                 :          0 :                 EXT3_I(inode)->i_disksize = pos + copied;
    1361                 :            :                 mark_inode_dirty(inode);
    1362                 :            :         }
    1363                 :          0 : }
    1364                 :            : 
    1365                 :            : /*
    1366                 :            :  * We need to pick up the new inode size which generic_commit_write gave us
    1367                 :            :  * `file' can be NULL - eg, when called from page_symlink().
    1368                 :            :  *
    1369                 :            :  * ext3 never places buffers on inode->i_mapping->private_list.  metadata
    1370                 :            :  * buffers are managed internally.
    1371                 :            :  */
    1372                 :          0 : static int ext3_ordered_write_end(struct file *file,
    1373                 :            :                                 struct address_space *mapping,
    1374                 :            :                                 loff_t pos, unsigned len, unsigned copied,
    1375                 :            :                                 struct page *page, void *fsdata)
    1376                 :            : {
    1377                 :            :         handle_t *handle = ext3_journal_current_handle();
    1378                 :          0 :         struct inode *inode = file->f_mapping->host;
    1379                 :            :         unsigned from, to;
    1380                 :            :         int ret = 0, ret2;
    1381                 :            : 
    1382                 :            :         trace_ext3_ordered_write_end(inode, pos, len, copied);
    1383                 :          0 :         copied = block_write_end(file, mapping, pos, len, copied, page, fsdata);
    1384                 :            : 
    1385                 :          0 :         from = pos & (PAGE_CACHE_SIZE - 1);
    1386                 :          0 :         to = from + copied;
    1387         [ #  # ]:          0 :         ret = walk_page_buffers(handle, page_buffers(page),
    1388                 :            :                 from, to, NULL, journal_dirty_data_fn);
    1389                 :            : 
    1390         [ #  # ]:          0 :         if (ret == 0)
    1391                 :          0 :                 update_file_sizes(inode, pos, copied);
    1392                 :            :         /*
    1393                 :            :          * There may be allocated blocks outside of i_size because
    1394                 :            :          * we failed to copy some data. Prepare for truncate.
    1395                 :            :          */
    1396 [ #  # ][ #  # ]:          0 :         if (pos + len > inode->i_size && ext3_can_truncate(inode))
    1397                 :          0 :                 ext3_orphan_add(handle, inode);
    1398                 :          0 :         ret2 = ext3_journal_stop(handle);
    1399         [ #  # ]:          0 :         if (!ret)
    1400                 :            :                 ret = ret2;
    1401                 :          0 :         unlock_page(page);
    1402                 :          0 :         page_cache_release(page);
    1403                 :            : 
    1404         [ #  # ]:          0 :         if (pos + len > inode->i_size)
    1405                 :          0 :                 ext3_truncate_failed_write(inode);
    1406         [ #  # ]:          0 :         return ret ? ret : copied;
    1407                 :            : }
    1408                 :            : 
    1409                 :          0 : static int ext3_writeback_write_end(struct file *file,
    1410                 :            :                                 struct address_space *mapping,
    1411                 :            :                                 loff_t pos, unsigned len, unsigned copied,
    1412                 :            :                                 struct page *page, void *fsdata)
    1413                 :            : {
    1414                 :            :         handle_t *handle = ext3_journal_current_handle();
    1415                 :          0 :         struct inode *inode = file->f_mapping->host;
    1416                 :            :         int ret;
    1417                 :            : 
    1418                 :            :         trace_ext3_writeback_write_end(inode, pos, len, copied);
    1419                 :          0 :         copied = block_write_end(file, mapping, pos, len, copied, page, fsdata);
    1420                 :          0 :         update_file_sizes(inode, pos, copied);
    1421                 :            :         /*
    1422                 :            :          * There may be allocated blocks outside of i_size because
    1423                 :            :          * we failed to copy some data. Prepare for truncate.
    1424                 :            :          */
    1425 [ #  # ][ #  # ]:          0 :         if (pos + len > inode->i_size && ext3_can_truncate(inode))
    1426                 :          0 :                 ext3_orphan_add(handle, inode);
    1427                 :          0 :         ret = ext3_journal_stop(handle);
    1428                 :          0 :         unlock_page(page);
    1429                 :          0 :         page_cache_release(page);
    1430                 :            : 
    1431         [ #  # ]:          0 :         if (pos + len > inode->i_size)
    1432                 :          0 :                 ext3_truncate_failed_write(inode);
    1433         [ #  # ]:          0 :         return ret ? ret : copied;
    1434                 :            : }
    1435                 :            : 
    1436                 :          0 : static int ext3_journalled_write_end(struct file *file,
    1437                 :            :                                 struct address_space *mapping,
    1438                 :            :                                 loff_t pos, unsigned len, unsigned copied,
    1439                 :            :                                 struct page *page, void *fsdata)
    1440                 :            : {
    1441                 :            :         handle_t *handle = ext3_journal_current_handle();
    1442                 :          0 :         struct inode *inode = mapping->host;
    1443                 :            :         struct ext3_inode_info *ei = EXT3_I(inode);
    1444                 :            :         int ret = 0, ret2;
    1445                 :          0 :         int partial = 0;
    1446                 :            :         unsigned from, to;
    1447                 :            : 
    1448                 :            :         trace_ext3_journalled_write_end(inode, pos, len, copied);
    1449                 :          0 :         from = pos & (PAGE_CACHE_SIZE - 1);
    1450                 :          0 :         to = from + len;
    1451                 :            : 
    1452         [ #  # ]:          0 :         if (copied < len) {
    1453         [ #  # ]:          0 :                 if (!PageUptodate(page))
    1454                 :            :                         copied = 0;
    1455                 :          0 :                 page_zero_new_buffers(page, from + copied, to);
    1456                 :            :                 to = from + copied;
    1457                 :            :         }
    1458                 :            : 
    1459         [ #  # ]:          0 :         ret = walk_page_buffers(handle, page_buffers(page), from,
    1460                 :            :                                 to, &partial, write_end_fn);
    1461         [ #  # ]:          0 :         if (!partial)
    1462                 :            :                 SetPageUptodate(page);
    1463                 :            : 
    1464         [ #  # ]:          0 :         if (pos + copied > inode->i_size)
    1465                 :            :                 i_size_write(inode, pos + copied);
    1466                 :            :         /*
    1467                 :            :          * There may be allocated blocks outside of i_size because
    1468                 :            :          * we failed to copy some data. Prepare for truncate.
    1469                 :            :          */
    1470 [ #  # ][ #  # ]:          0 :         if (pos + len > inode->i_size && ext3_can_truncate(inode))
    1471                 :          0 :                 ext3_orphan_add(handle, inode);
    1472                 :            :         ext3_set_inode_state(inode, EXT3_STATE_JDATA);
    1473                 :          0 :         atomic_set(&ei->i_datasync_tid, handle->h_transaction->t_tid);
    1474         [ #  # ]:          0 :         if (inode->i_size > ei->i_disksize) {
    1475                 :          0 :                 ei->i_disksize = inode->i_size;
    1476                 :          0 :                 ret2 = ext3_mark_inode_dirty(handle, inode);
    1477         [ #  # ]:          0 :                 if (!ret)
    1478                 :            :                         ret = ret2;
    1479                 :            :         }
    1480                 :            : 
    1481                 :          0 :         ret2 = ext3_journal_stop(handle);
    1482         [ #  # ]:          0 :         if (!ret)
    1483                 :            :                 ret = ret2;
    1484                 :          0 :         unlock_page(page);
    1485                 :          0 :         page_cache_release(page);
    1486                 :            : 
    1487         [ #  # ]:          0 :         if (pos + len > inode->i_size)
    1488                 :          0 :                 ext3_truncate_failed_write(inode);
    1489         [ #  # ]:          0 :         return ret ? ret : copied;
    1490                 :            : }
    1491                 :            : 
    1492                 :            : /*
    1493                 :            :  * bmap() is special.  It gets used by applications such as lilo and by
    1494                 :            :  * the swapper to find the on-disk block of a specific piece of data.
    1495                 :            :  *
    1496                 :            :  * Naturally, this is dangerous if the block concerned is still in the
    1497                 :            :  * journal.  If somebody makes a swapfile on an ext3 data-journaling
    1498                 :            :  * filesystem and enables swap, then they may get a nasty shock when the
    1499                 :            :  * data getting swapped to that swapfile suddenly gets overwritten by
    1500                 :            :  * the original zero's written out previously to the journal and
    1501                 :            :  * awaiting writeback in the kernel's buffer cache.
    1502                 :            :  *
    1503                 :            :  * So, if we see any bmap calls here on a modified, data-journaled file,
    1504                 :            :  * take extra steps to flush any blocks which might be in the cache.
    1505                 :            :  */
    1506                 :          0 : static sector_t ext3_bmap(struct address_space *mapping, sector_t block)
    1507                 :            : {
    1508                 :          0 :         struct inode *inode = mapping->host;
    1509                 :            :         journal_t *journal;
    1510                 :            :         int err;
    1511                 :            : 
    1512         [ #  # ]:          0 :         if (ext3_test_inode_state(inode, EXT3_STATE_JDATA)) {
    1513                 :            :                 /*
    1514                 :            :                  * This is a REALLY heavyweight approach, but the use of
    1515                 :            :                  * bmap on dirty files is expected to be extremely rare:
    1516                 :            :                  * only if we run lilo or swapon on a freshly made file
    1517                 :            :                  * do we expect this to happen.
    1518                 :            :                  *
    1519                 :            :                  * (bmap requires CAP_SYS_RAWIO so this does not
    1520                 :            :                  * represent an unprivileged user DOS attack --- we'd be
    1521                 :            :                  * in trouble if mortal users could trigger this path at
    1522                 :            :                  * will.)
    1523                 :            :                  *
    1524                 :            :                  * NB. EXT3_STATE_JDATA is not set on files other than
    1525                 :            :                  * regular files.  If somebody wants to bmap a directory
    1526                 :            :                  * or symlink and gets confused because the buffer
    1527                 :            :                  * hasn't yet been flushed to disk, they deserve
    1528                 :            :                  * everything they get.
    1529                 :            :                  */
    1530                 :            : 
    1531                 :            :                 ext3_clear_inode_state(inode, EXT3_STATE_JDATA);
    1532                 :          0 :                 journal = EXT3_JOURNAL(inode);
    1533                 :          0 :                 journal_lock_updates(journal);
    1534                 :          0 :                 err = journal_flush(journal);
    1535                 :          0 :                 journal_unlock_updates(journal);
    1536                 :            : 
    1537         [ #  # ]:          0 :                 if (err)
    1538                 :            :                         return 0;
    1539                 :            :         }
    1540                 :            : 
    1541                 :          0 :         return generic_block_bmap(mapping,block,ext3_get_block);
    1542                 :            : }
    1543                 :            : 
    1544                 :          0 : static int bget_one(handle_t *handle, struct buffer_head *bh)
    1545                 :            : {
    1546                 :            :         get_bh(bh);
    1547                 :          0 :         return 0;
    1548                 :            : }
    1549                 :            : 
    1550                 :          0 : static int bput_one(handle_t *handle, struct buffer_head *bh)
    1551                 :            : {
    1552                 :            :         put_bh(bh);
    1553                 :          0 :         return 0;
    1554                 :            : }
    1555                 :            : 
    1556                 :          0 : static int buffer_unmapped(handle_t *handle, struct buffer_head *bh)
    1557                 :            : {
    1558                 :          0 :         return !buffer_mapped(bh);
    1559                 :            : }
    1560                 :            : 
    1561                 :            : /*
    1562                 :            :  * Note that we always start a transaction even if we're not journalling
    1563                 :            :  * data.  This is to preserve ordering: any hole instantiation within
    1564                 :            :  * __block_write_full_page -> ext3_get_block() should be journalled
    1565                 :            :  * along with the data so we don't crash and then get metadata which
    1566                 :            :  * refers to old data.
    1567                 :            :  *
    1568                 :            :  * In all journalling modes block_write_full_page() will start the I/O.
    1569                 :            :  *
    1570                 :            :  * Problem:
    1571                 :            :  *
    1572                 :            :  *      ext3_writepage() -> kmalloc() -> __alloc_pages() -> page_launder() ->
    1573                 :            :  *              ext3_writepage()
    1574                 :            :  *
    1575                 :            :  * Similar for:
    1576                 :            :  *
    1577                 :            :  *      ext3_file_write() -> generic_file_write() -> __alloc_pages() -> ...
    1578                 :            :  *
    1579                 :            :  * Same applies to ext3_get_block().  We will deadlock on various things like
    1580                 :            :  * lock_journal and i_truncate_mutex.
    1581                 :            :  *
    1582                 :            :  * Setting PF_MEMALLOC here doesn't work - too many internal memory
    1583                 :            :  * allocations fail.
    1584                 :            :  *
    1585                 :            :  * 16May01: If we're reentered then journal_current_handle() will be
    1586                 :            :  *          non-zero. We simply *return*.
    1587                 :            :  *
    1588                 :            :  * 1 July 2001: @@@ FIXME:
    1589                 :            :  *   In journalled data mode, a data buffer may be metadata against the
    1590                 :            :  *   current transaction.  But the same file is part of a shared mapping
    1591                 :            :  *   and someone does a writepage() on it.
    1592                 :            :  *
    1593                 :            :  *   We will move the buffer onto the async_data list, but *after* it has
    1594                 :            :  *   been dirtied. So there's a small window where we have dirty data on
    1595                 :            :  *   BJ_Metadata.
    1596                 :            :  *
    1597                 :            :  *   Note that this only applies to the last partial page in the file.  The
    1598                 :            :  *   bit which block_write_full_page() uses prepare/commit for.  (That's
    1599                 :            :  *   broken code anyway: it's wrong for msync()).
    1600                 :            :  *
    1601                 :            :  *   It's a rare case: affects the final partial page, for journalled data
    1602                 :            :  *   where the file is subject to bith write() and writepage() in the same
    1603                 :            :  *   transction.  To fix it we'll need a custom block_write_full_page().
    1604                 :            :  *   We'll probably need that anyway for journalling writepage() output.
    1605                 :            :  *
    1606                 :            :  * We don't honour synchronous mounts for writepage().  That would be
    1607                 :            :  * disastrous.  Any write() or metadata operation will sync the fs for
    1608                 :            :  * us.
    1609                 :            :  *
    1610                 :            :  * AKPM2: if all the page's buffers are mapped to disk and !data=journal,
    1611                 :            :  * we don't need to open a transaction here.
    1612                 :            :  */
    1613                 :          0 : static int ext3_ordered_writepage(struct page *page,
    1614                 :            :                                 struct writeback_control *wbc)
    1615                 :            : {
    1616                 :          0 :         struct inode *inode = page->mapping->host;
    1617                 :            :         struct buffer_head *page_bufs;
    1618                 :            :         handle_t *handle = NULL;
    1619                 :            :         int ret = 0;
    1620                 :            :         int err;
    1621                 :            : 
    1622         [ #  # ]:          0 :         J_ASSERT(PageLocked(page));
    1623                 :            :         /*
    1624                 :            :          * We don't want to warn for emergency remount. The condition is
    1625                 :            :          * ordered to avoid dereferencing inode->i_sb in non-error case to
    1626                 :            :          * avoid slow-downs.
    1627                 :            :          */
    1628 [ #  # ][ #  # ]:          0 :         WARN_ON_ONCE(IS_RDONLY(inode) &&
         [ #  # ][ #  # ]
                 [ #  # ]
    1629                 :            :                      !(EXT3_SB(inode->i_sb)->s_mount_state & EXT3_ERROR_FS));
    1630                 :            : 
    1631                 :            :         /*
    1632                 :            :          * We give up here if we're reentered, because it might be for a
    1633                 :            :          * different filesystem.
    1634                 :            :          */
    1635         [ #  # ]:          0 :         if (ext3_journal_current_handle())
    1636                 :            :                 goto out_fail;
    1637                 :            : 
    1638                 :            :         trace_ext3_ordered_writepage(page);
    1639         [ #  # ]:          0 :         if (!page_has_buffers(page)) {
    1640                 :          0 :                 create_empty_buffers(page, inode->i_sb->s_blocksize,
    1641                 :            :                                 (1 << BH_Dirty)|(1 << BH_Uptodate));
    1642         [ #  # ]:          0 :                 page_bufs = page_buffers(page);
    1643                 :            :         } else {
    1644         [ #  # ]:          0 :                 page_bufs = page_buffers(page);
    1645         [ #  # ]:          0 :                 if (!walk_page_buffers(NULL, page_bufs, 0, PAGE_CACHE_SIZE,
    1646                 :            :                                        NULL, buffer_unmapped)) {
    1647                 :            :                         /* Provide NULL get_block() to catch bugs if buffers
    1648                 :            :                          * weren't really mapped */
    1649                 :          0 :                         return block_write_full_page(page, NULL, wbc);
    1650                 :            :                 }
    1651                 :            :         }
    1652                 :          0 :         handle = ext3_journal_start(inode, ext3_writepage_trans_blocks(inode));
    1653                 :            : 
    1654         [ #  # ]:          0 :         if (IS_ERR(handle)) {
    1655                 :            :                 ret = PTR_ERR(handle);
    1656                 :          0 :                 goto out_fail;
    1657                 :            :         }
    1658                 :            : 
    1659                 :          0 :         walk_page_buffers(handle, page_bufs, 0,
    1660                 :            :                         PAGE_CACHE_SIZE, NULL, bget_one);
    1661                 :            : 
    1662                 :          0 :         ret = block_write_full_page(page, ext3_get_block, wbc);
    1663                 :            : 
    1664                 :            :         /*
    1665                 :            :          * The page can become unlocked at any point now, and
    1666                 :            :          * truncate can then come in and change things.  So we
    1667                 :            :          * can't touch *page from now on.  But *page_bufs is
    1668                 :            :          * safe due to elevated refcount.
    1669                 :            :          */
    1670                 :            : 
    1671                 :            :         /*
    1672                 :            :          * And attach them to the current transaction.  But only if
    1673                 :            :          * block_write_full_page() succeeded.  Otherwise they are unmapped,
    1674                 :            :          * and generally junk.
    1675                 :            :          */
    1676         [ #  # ]:          0 :         if (ret == 0) {
    1677                 :          0 :                 err = walk_page_buffers(handle, page_bufs, 0, PAGE_CACHE_SIZE,
    1678                 :            :                                         NULL, journal_dirty_data_fn);
    1679         [ #  # ]:          0 :                 if (!ret)
    1680                 :            :                         ret = err;
    1681                 :            :         }
    1682                 :          0 :         walk_page_buffers(handle, page_bufs, 0,
    1683                 :            :                         PAGE_CACHE_SIZE, NULL, bput_one);
    1684                 :          0 :         err = ext3_journal_stop(handle);
    1685         [ #  # ]:          0 :         if (!ret)
    1686                 :            :                 ret = err;
    1687                 :          0 :         return ret;
    1688                 :            : 
    1689                 :            : out_fail:
    1690                 :          0 :         redirty_page_for_writepage(wbc, page);
    1691                 :          0 :         unlock_page(page);
    1692                 :          0 :         return ret;
    1693                 :            : }
    1694                 :            : 
    1695                 :          0 : static int ext3_writeback_writepage(struct page *page,
    1696                 :            :                                 struct writeback_control *wbc)
    1697                 :            : {
    1698                 :          0 :         struct inode *inode = page->mapping->host;
    1699                 :            :         handle_t *handle = NULL;
    1700                 :            :         int ret = 0;
    1701                 :            :         int err;
    1702                 :            : 
    1703         [ #  # ]:          0 :         J_ASSERT(PageLocked(page));
    1704                 :            :         /*
    1705                 :            :          * We don't want to warn for emergency remount. The condition is
    1706                 :            :          * ordered to avoid dereferencing inode->i_sb in non-error case to
    1707                 :            :          * avoid slow-downs.
    1708                 :            :          */
    1709 [ #  # ][ #  # ]:          0 :         WARN_ON_ONCE(IS_RDONLY(inode) &&
         [ #  # ][ #  # ]
                 [ #  # ]
    1710                 :            :                      !(EXT3_SB(inode->i_sb)->s_mount_state & EXT3_ERROR_FS));
    1711                 :            : 
    1712         [ #  # ]:          0 :         if (ext3_journal_current_handle())
    1713                 :            :                 goto out_fail;
    1714                 :            : 
    1715                 :            :         trace_ext3_writeback_writepage(page);
    1716         [ #  # ]:          0 :         if (page_has_buffers(page)) {
    1717 [ #  # ][ #  # ]:          0 :                 if (!walk_page_buffers(NULL, page_buffers(page), 0,
    1718                 :            :                                       PAGE_CACHE_SIZE, NULL, buffer_unmapped)) {
    1719                 :            :                         /* Provide NULL get_block() to catch bugs if buffers
    1720                 :            :                          * weren't really mapped */
    1721                 :          0 :                         return block_write_full_page(page, NULL, wbc);
    1722                 :            :                 }
    1723                 :            :         }
    1724                 :            : 
    1725                 :          0 :         handle = ext3_journal_start(inode, ext3_writepage_trans_blocks(inode));
    1726         [ #  # ]:          0 :         if (IS_ERR(handle)) {
    1727                 :            :                 ret = PTR_ERR(handle);
    1728                 :          0 :                 goto out_fail;
    1729                 :            :         }
    1730                 :            : 
    1731                 :          0 :         ret = block_write_full_page(page, ext3_get_block, wbc);
    1732                 :            : 
    1733                 :          0 :         err = ext3_journal_stop(handle);
    1734         [ #  # ]:          0 :         if (!ret)
    1735                 :            :                 ret = err;
    1736                 :          0 :         return ret;
    1737                 :            : 
    1738                 :            : out_fail:
    1739                 :          0 :         redirty_page_for_writepage(wbc, page);
    1740                 :          0 :         unlock_page(page);
    1741                 :          0 :         return ret;
    1742                 :            : }
    1743                 :            : 
    1744                 :          0 : static int ext3_journalled_writepage(struct page *page,
    1745                 :            :                                 struct writeback_control *wbc)
    1746                 :            : {
    1747                 :          0 :         struct inode *inode = page->mapping->host;
    1748                 :            :         handle_t *handle = NULL;
    1749                 :            :         int ret = 0;
    1750                 :            :         int err;
    1751                 :            : 
    1752         [ #  # ]:          0 :         J_ASSERT(PageLocked(page));
    1753                 :            :         /*
    1754                 :            :          * We don't want to warn for emergency remount. The condition is
    1755                 :            :          * ordered to avoid dereferencing inode->i_sb in non-error case to
    1756                 :            :          * avoid slow-downs.
    1757                 :            :          */
    1758 [ #  # ][ #  # ]:          0 :         WARN_ON_ONCE(IS_RDONLY(inode) &&
         [ #  # ][ #  # ]
                 [ #  # ]
    1759                 :            :                      !(EXT3_SB(inode->i_sb)->s_mount_state & EXT3_ERROR_FS));
    1760                 :            : 
    1761         [ #  # ]:          0 :         if (ext3_journal_current_handle())
    1762                 :            :                 goto no_write;
    1763                 :            : 
    1764                 :            :         trace_ext3_journalled_writepage(page);
    1765                 :          0 :         handle = ext3_journal_start(inode, ext3_writepage_trans_blocks(inode));
    1766         [ #  # ]:          0 :         if (IS_ERR(handle)) {
    1767                 :            :                 ret = PTR_ERR(handle);
    1768                 :          0 :                 goto no_write;
    1769                 :            :         }
    1770                 :            : 
    1771 [ #  # ][ #  # ]:          0 :         if (!page_has_buffers(page) || PageChecked(page)) {
    1772                 :            :                 /*
    1773                 :            :                  * It's mmapped pagecache.  Add buffers and journal it.  There
    1774                 :            :                  * doesn't seem much point in redirtying the page here.
    1775                 :            :                  */
    1776                 :            :                 ClearPageChecked(page);
    1777                 :          0 :                 ret = __block_write_begin(page, 0, PAGE_CACHE_SIZE,
    1778                 :            :                                           ext3_get_block);
    1779         [ #  # ]:          0 :                 if (ret != 0) {
    1780                 :          0 :                         ext3_journal_stop(handle);
    1781                 :          0 :                         goto out_unlock;
    1782                 :            :                 }
    1783         [ #  # ]:          0 :                 ret = walk_page_buffers(handle, page_buffers(page), 0,
    1784                 :            :                         PAGE_CACHE_SIZE, NULL, do_journal_get_write_access);
    1785                 :            : 
    1786         [ #  # ]:          0 :                 err = walk_page_buffers(handle, page_buffers(page), 0,
    1787                 :            :                                 PAGE_CACHE_SIZE, NULL, write_end_fn);
    1788         [ #  # ]:          0 :                 if (ret == 0)
    1789                 :            :                         ret = err;
    1790                 :            :                 ext3_set_inode_state(inode, EXT3_STATE_JDATA);
    1791                 :          0 :                 atomic_set(&EXT3_I(inode)->i_datasync_tid,
    1792                 :            :                            handle->h_transaction->t_tid);
    1793                 :          0 :                 unlock_page(page);
    1794                 :            :         } else {
    1795                 :            :                 /*
    1796                 :            :                  * It may be a page full of checkpoint-mode buffers.  We don't
    1797                 :            :                  * really know unless we go poke around in the buffer_heads.
    1798                 :            :                  * But block_write_full_page will do the right thing.
    1799                 :            :                  */
    1800                 :          0 :                 ret = block_write_full_page(page, ext3_get_block, wbc);
    1801                 :            :         }
    1802                 :          0 :         err = ext3_journal_stop(handle);
    1803         [ #  # ]:          0 :         if (!ret)
    1804                 :            :                 ret = err;
    1805                 :            : out:
    1806                 :          0 :         return ret;
    1807                 :            : 
    1808                 :            : no_write:
    1809                 :          0 :         redirty_page_for_writepage(wbc, page);
    1810                 :            : out_unlock:
    1811                 :          0 :         unlock_page(page);
    1812                 :          0 :         goto out;
    1813                 :            : }
    1814                 :            : 
    1815                 :          0 : static int ext3_readpage(struct file *file, struct page *page)
    1816                 :            : {
    1817                 :            :         trace_ext3_readpage(page);
    1818                 :          0 :         return mpage_readpage(page, ext3_get_block);
    1819                 :            : }
    1820                 :            : 
    1821                 :            : static int
    1822                 :          0 : ext3_readpages(struct file *file, struct address_space *mapping,
    1823                 :            :                 struct list_head *pages, unsigned nr_pages)
    1824                 :            : {
    1825                 :          0 :         return mpage_readpages(mapping, pages, nr_pages, ext3_get_block);
    1826                 :            : }
    1827                 :            : 
    1828                 :          0 : static void ext3_invalidatepage(struct page *page, unsigned int offset,
    1829                 :            :                                 unsigned int length)
    1830                 :            : {
    1831                 :          0 :         journal_t *journal = EXT3_JOURNAL(page->mapping->host);
    1832                 :            : 
    1833                 :            :         trace_ext3_invalidatepage(page, offset, length);
    1834                 :            : 
    1835                 :            :         /*
    1836                 :            :          * If it's a full truncate we just forget about the pending dirtying
    1837                 :            :          */
    1838         [ #  # ]:          0 :         if (offset == 0 && length == PAGE_CACHE_SIZE)
    1839                 :            :                 ClearPageChecked(page);
    1840                 :            : 
    1841                 :          0 :         journal_invalidatepage(journal, page, offset, length);
    1842                 :          0 : }
    1843                 :            : 
    1844                 :          0 : static int ext3_releasepage(struct page *page, gfp_t wait)
    1845                 :            : {
    1846                 :          0 :         journal_t *journal = EXT3_JOURNAL(page->mapping->host);
    1847                 :            : 
    1848                 :            :         trace_ext3_releasepage(page);
    1849         [ #  # ]:          0 :         WARN_ON(PageChecked(page));
    1850         [ #  # ]:          0 :         if (!page_has_buffers(page))
    1851                 :            :                 return 0;
    1852                 :          0 :         return journal_try_to_free_buffers(journal, page, wait);
    1853                 :            : }
    1854                 :            : 
    1855                 :            : /*
    1856                 :            :  * If the O_DIRECT write will extend the file then add this inode to the
    1857                 :            :  * orphan list.  So recovery will truncate it back to the original size
    1858                 :            :  * if the machine crashes during the write.
    1859                 :            :  *
    1860                 :            :  * If the O_DIRECT write is intantiating holes inside i_size and the machine
    1861                 :            :  * crashes then stale disk data _may_ be exposed inside the file. But current
    1862                 :            :  * VFS code falls back into buffered path in that case so we are safe.
    1863                 :            :  */
    1864                 :          0 : static ssize_t ext3_direct_IO(int rw, struct kiocb *iocb,
    1865                 :            :                         const struct iovec *iov, loff_t offset,
    1866                 :            :                         unsigned long nr_segs)
    1867                 :            : {
    1868                 :          0 :         struct file *file = iocb->ki_filp;
    1869                 :          0 :         struct inode *inode = file->f_mapping->host;
    1870                 :            :         struct ext3_inode_info *ei = EXT3_I(inode);
    1871                 :            :         handle_t *handle;
    1872                 :            :         ssize_t ret;
    1873                 :            :         int orphan = 0;
    1874                 :            :         size_t count = iov_length(iov, nr_segs);
    1875                 :          0 :         int retries = 0;
    1876                 :            : 
    1877                 :            :         trace_ext3_direct_IO_enter(inode, offset, iov_length(iov, nr_segs), rw);
    1878                 :            : 
    1879         [ #  # ]:          0 :         if (rw == WRITE) {
    1880                 :          0 :                 loff_t final_size = offset + count;
    1881                 :            : 
    1882         [ #  # ]:          0 :                 if (final_size > inode->i_size) {
    1883                 :            :                         /* Credits for sb + inode write */
    1884                 :            :                         handle = ext3_journal_start(inode, 2);
    1885         [ #  # ]:          0 :                         if (IS_ERR(handle)) {
    1886                 :            :                                 ret = PTR_ERR(handle);
    1887                 :          0 :                                 goto out;
    1888                 :            :                         }
    1889                 :          0 :                         ret = ext3_orphan_add(handle, inode);
    1890         [ #  # ]:          0 :                         if (ret) {
    1891                 :          0 :                                 ext3_journal_stop(handle);
    1892                 :          0 :                                 goto out;
    1893                 :            :                         }
    1894                 :            :                         orphan = 1;
    1895                 :          0 :                         ei->i_disksize = inode->i_size;
    1896                 :          0 :                         ext3_journal_stop(handle);
    1897                 :            :                 }
    1898                 :            :         }
    1899                 :            : 
    1900                 :            : retry:
    1901                 :            :         ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs,
    1902                 :            :                                  ext3_get_block);
    1903                 :            :         /*
    1904                 :            :          * In case of error extending write may have instantiated a few
    1905                 :            :          * blocks outside i_size. Trim these off again.
    1906                 :            :          */
    1907 [ #  # ][ #  # ]:          0 :         if (unlikely((rw & WRITE) && ret < 0)) {
    1908                 :            :                 loff_t isize = i_size_read(inode);
    1909                 :          0 :                 loff_t end = offset + iov_length(iov, nr_segs);
    1910                 :            : 
    1911         [ #  # ]:          0 :                 if (end > isize)
    1912                 :          0 :                         ext3_truncate_failed_direct_write(inode);
    1913                 :            :         }
    1914 [ #  # ][ #  # ]:          0 :         if (ret == -ENOSPC && ext3_should_retry_alloc(inode->i_sb, &retries))
    1915                 :            :                 goto retry;
    1916                 :            : 
    1917         [ #  # ]:          0 :         if (orphan) {
    1918                 :            :                 int err;
    1919                 :            : 
    1920                 :            :                 /* Credits for sb + inode write */
    1921                 :            :                 handle = ext3_journal_start(inode, 2);
    1922         [ #  # ]:          0 :                 if (IS_ERR(handle)) {
    1923                 :            :                         /* This is really bad luck. We've written the data
    1924                 :            :                          * but cannot extend i_size. Truncate allocated blocks
    1925                 :            :                          * and pretend the write failed... */
    1926                 :          0 :                         ext3_truncate_failed_direct_write(inode);
    1927                 :            :                         ret = PTR_ERR(handle);
    1928                 :          0 :                         goto out;
    1929                 :            :                 }
    1930         [ #  # ]:          0 :                 if (inode->i_nlink)
    1931                 :          0 :                         ext3_orphan_del(handle, inode);
    1932         [ #  # ]:          0 :                 if (ret > 0) {
    1933                 :          0 :                         loff_t end = offset + ret;
    1934         [ #  # ]:          0 :                         if (end > inode->i_size) {
    1935                 :          0 :                                 ei->i_disksize = end;
    1936                 :            :                                 i_size_write(inode, end);
    1937                 :            :                                 /*
    1938                 :            :                                  * We're going to return a positive `ret'
    1939                 :            :                                  * here due to non-zero-length I/O, so there's
    1940                 :            :                                  * no way of reporting error returns from
    1941                 :            :                                  * ext3_mark_inode_dirty() to userspace.  So
    1942                 :            :                                  * ignore it.
    1943                 :            :                                  */
    1944                 :          0 :                                 ext3_mark_inode_dirty(handle, inode);
    1945                 :            :                         }
    1946                 :            :                 }
    1947                 :          0 :                 err = ext3_journal_stop(handle);
    1948         [ #  # ]:          0 :                 if (ret == 0)
    1949                 :            :                         ret = err;
    1950                 :            :         }
    1951                 :            : out:
    1952                 :            :         trace_ext3_direct_IO_exit(inode, offset,
    1953                 :            :                                 iov_length(iov, nr_segs), rw, ret);
    1954                 :          0 :         return ret;
    1955                 :            : }
    1956                 :            : 
    1957                 :            : /*
    1958                 :            :  * Pages can be marked dirty completely asynchronously from ext3's journalling
    1959                 :            :  * activity.  By filemap_sync_pte(), try_to_unmap_one(), etc.  We cannot do
    1960                 :            :  * much here because ->set_page_dirty is called under VFS locks.  The page is
    1961                 :            :  * not necessarily locked.
    1962                 :            :  *
    1963                 :            :  * We cannot just dirty the page and leave attached buffers clean, because the
    1964                 :            :  * buffers' dirty state is "definitive".  We cannot just set the buffers dirty
    1965                 :            :  * or jbddirty because all the journalling code will explode.
    1966                 :            :  *
    1967                 :            :  * So what we do is to mark the page "pending dirty" and next time writepage
    1968                 :            :  * is called, propagate that into the buffers appropriately.
    1969                 :            :  */
    1970                 :          0 : static int ext3_journalled_set_page_dirty(struct page *page)
    1971                 :            : {
    1972                 :            :         SetPageChecked(page);
    1973                 :          0 :         return __set_page_dirty_nobuffers(page);
    1974                 :            : }
    1975                 :            : 
    1976                 :            : static const struct address_space_operations ext3_ordered_aops = {
    1977                 :            :         .readpage               = ext3_readpage,
    1978                 :            :         .readpages              = ext3_readpages,
    1979                 :            :         .writepage              = ext3_ordered_writepage,
    1980                 :            :         .write_begin            = ext3_write_begin,
    1981                 :            :         .write_end              = ext3_ordered_write_end,
    1982                 :            :         .bmap                   = ext3_bmap,
    1983                 :            :         .invalidatepage         = ext3_invalidatepage,
    1984                 :            :         .releasepage            = ext3_releasepage,
    1985                 :            :         .direct_IO              = ext3_direct_IO,
    1986                 :            :         .migratepage            = buffer_migrate_page,
    1987                 :            :         .is_partially_uptodate  = block_is_partially_uptodate,
    1988                 :            :         .is_dirty_writeback     = buffer_check_dirty_writeback,
    1989                 :            :         .error_remove_page      = generic_error_remove_page,
    1990                 :            : };
    1991                 :            : 
    1992                 :            : static const struct address_space_operations ext3_writeback_aops = {
    1993                 :            :         .readpage               = ext3_readpage,
    1994                 :            :         .readpages              = ext3_readpages,
    1995                 :            :         .writepage              = ext3_writeback_writepage,
    1996                 :            :         .write_begin            = ext3_write_begin,
    1997                 :            :         .write_end              = ext3_writeback_write_end,
    1998                 :            :         .bmap                   = ext3_bmap,
    1999                 :            :         .invalidatepage         = ext3_invalidatepage,
    2000                 :            :         .releasepage            = ext3_releasepage,
    2001                 :            :         .direct_IO              = ext3_direct_IO,
    2002                 :            :         .migratepage            = buffer_migrate_page,
    2003                 :            :         .is_partially_uptodate  = block_is_partially_uptodate,
    2004                 :            :         .error_remove_page      = generic_error_remove_page,
    2005                 :            : };
    2006                 :            : 
    2007                 :            : static const struct address_space_operations ext3_journalled_aops = {
    2008                 :            :         .readpage               = ext3_readpage,
    2009                 :            :         .readpages              = ext3_readpages,
    2010                 :            :         .writepage              = ext3_journalled_writepage,
    2011                 :            :         .write_begin            = ext3_write_begin,
    2012                 :            :         .write_end              = ext3_journalled_write_end,
    2013                 :            :         .set_page_dirty         = ext3_journalled_set_page_dirty,
    2014                 :            :         .bmap                   = ext3_bmap,
    2015                 :            :         .invalidatepage         = ext3_invalidatepage,
    2016                 :            :         .releasepage            = ext3_releasepage,
    2017                 :            :         .is_partially_uptodate  = block_is_partially_uptodate,
    2018                 :            :         .error_remove_page      = generic_error_remove_page,
    2019                 :            : };
    2020                 :            : 
    2021                 :          0 : void ext3_set_aops(struct inode *inode)
    2022                 :            : {
    2023         [ #  # ]:          0 :         if (ext3_should_order_data(inode))
    2024                 :          0 :                 inode->i_mapping->a_ops = &ext3_ordered_aops;
    2025         [ #  # ]:          0 :         else if (ext3_should_writeback_data(inode))
    2026                 :          0 :                 inode->i_mapping->a_ops = &ext3_writeback_aops;
    2027                 :            :         else
    2028                 :          0 :                 inode->i_mapping->a_ops = &ext3_journalled_aops;
    2029                 :          0 : }
    2030                 :            : 
    2031                 :            : /*
    2032                 :            :  * ext3_block_truncate_page() zeroes out a mapping from file offset `from'
    2033                 :            :  * up to the end of the block which corresponds to `from'.
    2034                 :            :  * This required during truncate. We need to physically zero the tail end
    2035                 :            :  * of that block so it doesn't yield old data if the file is later grown.
    2036                 :            :  */
    2037                 :          0 : static int ext3_block_truncate_page(struct inode *inode, loff_t from)
    2038                 :            : {
    2039                 :          0 :         ext3_fsblk_t index = from >> PAGE_CACHE_SHIFT;
    2040                 :          0 :         unsigned offset = from & (PAGE_CACHE_SIZE - 1);
    2041                 :            :         unsigned blocksize, iblock, length, pos;
    2042                 :            :         struct page *page;
    2043                 :            :         handle_t *handle = NULL;
    2044                 :            :         struct buffer_head *bh;
    2045                 :            :         int err = 0;
    2046                 :            : 
    2047                 :            :         /* Truncated on block boundary - nothing to do */
    2048                 :          0 :         blocksize = inode->i_sb->s_blocksize;
    2049         [ #  # ]:          0 :         if ((from & (blocksize - 1)) == 0)
    2050                 :            :                 return 0;
    2051                 :            : 
    2052                 :          0 :         page = grab_cache_page(inode->i_mapping, index);
    2053         [ #  # ]:          0 :         if (!page)
    2054                 :            :                 return -ENOMEM;
    2055                 :          0 :         length = blocksize - (offset & (blocksize - 1));
    2056                 :          0 :         iblock = index << (PAGE_CACHE_SHIFT - inode->i_sb->s_blocksize_bits);
    2057                 :            : 
    2058         [ #  # ]:          0 :         if (!page_has_buffers(page))
    2059                 :          0 :                 create_empty_buffers(page, blocksize, 0);
    2060                 :            : 
    2061                 :            :         /* Find the buffer that contains "offset" */
    2062         [ #  # ]:          0 :         bh = page_buffers(page);
    2063                 :            :         pos = blocksize;
    2064         [ #  # ]:          0 :         while (offset >= pos) {
    2065                 :          0 :                 bh = bh->b_this_page;
    2066                 :          0 :                 iblock++;
    2067                 :          0 :                 pos += blocksize;
    2068                 :            :         }
    2069                 :            : 
    2070                 :            :         err = 0;
    2071         [ #  # ]:          0 :         if (buffer_freed(bh)) {
    2072                 :            :                 BUFFER_TRACE(bh, "freed: skip");
    2073                 :            :                 goto unlock;
    2074                 :            :         }
    2075                 :            : 
    2076         [ #  # ]:          0 :         if (!buffer_mapped(bh)) {
    2077                 :            :                 BUFFER_TRACE(bh, "unmapped");
    2078                 :          0 :                 ext3_get_block(inode, iblock, bh, 0);
    2079                 :            :                 /* unmapped? It's a hole - nothing to do */
    2080         [ #  # ]:          0 :                 if (!buffer_mapped(bh)) {
    2081                 :            :                         BUFFER_TRACE(bh, "still unmapped");
    2082                 :            :                         goto unlock;
    2083                 :            :                 }
    2084                 :            :         }
    2085                 :            : 
    2086                 :            :         /* Ok, it's mapped. Make sure it's up-to-date */
    2087         [ #  # ]:          0 :         if (PageUptodate(page))
    2088                 :            :                 set_buffer_uptodate(bh);
    2089                 :            : 
    2090         [ #  # ]:          0 :         if (!bh_uptodate_or_lock(bh)) {
    2091                 :          0 :                 err = bh_submit_read(bh);
    2092                 :            :                 /* Uhhuh. Read error. Complain and punt. */
    2093         [ #  # ]:          0 :                 if (err)
    2094                 :            :                         goto unlock;
    2095                 :            :         }
    2096                 :            : 
    2097                 :            :         /* data=writeback mode doesn't need transaction to zero-out data */
    2098         [ #  # ]:          0 :         if (!ext3_should_writeback_data(inode)) {
    2099                 :            :                 /* We journal at most one block */
    2100                 :            :                 handle = ext3_journal_start(inode, 1);
    2101         [ #  # ]:          0 :                 if (IS_ERR(handle)) {
    2102                 :            :                         clear_highpage(page);
    2103                 :          0 :                         flush_dcache_page(page);
    2104                 :            :                         err = PTR_ERR(handle);
    2105                 :          0 :                         goto unlock;
    2106                 :            :                 }
    2107                 :            :         }
    2108                 :            : 
    2109         [ #  # ]:          0 :         if (ext3_should_journal_data(inode)) {
    2110                 :            :                 BUFFER_TRACE(bh, "get write access");
    2111                 :          0 :                 err = ext3_journal_get_write_access(handle, bh);
    2112         [ #  # ]:          0 :                 if (err)
    2113                 :            :                         goto stop;
    2114                 :            :         }
    2115                 :            : 
    2116                 :            :         zero_user(page, offset, length);
    2117                 :            :         BUFFER_TRACE(bh, "zeroed end of block");
    2118                 :            : 
    2119                 :            :         err = 0;
    2120         [ #  # ]:          0 :         if (ext3_should_journal_data(inode)) {
    2121                 :          0 :                 err = ext3_journal_dirty_metadata(handle, bh);
    2122                 :            :         } else {
    2123         [ #  # ]:          0 :                 if (ext3_should_order_data(inode))
    2124                 :          0 :                         err = ext3_journal_dirty_data(handle, bh);
    2125                 :          0 :                 mark_buffer_dirty(bh);
    2126                 :            :         }
    2127                 :            : stop:
    2128         [ #  # ]:          0 :         if (handle)
    2129                 :          0 :                 ext3_journal_stop(handle);
    2130                 :            : 
    2131                 :            : unlock:
    2132                 :          0 :         unlock_page(page);
    2133                 :          0 :         page_cache_release(page);
    2134                 :          0 :         return err;
    2135                 :            : }
    2136                 :            : 
    2137                 :            : /*
    2138                 :            :  * Probably it should be a library function... search for first non-zero word
    2139                 :            :  * or memcmp with zero_page, whatever is better for particular architecture.
    2140                 :            :  * Linus?
    2141                 :            :  */
    2142                 :            : static inline int all_zeroes(__le32 *p, __le32 *q)
    2143                 :            : {
    2144         [ #  # ]:          0 :         while (p < q)
    2145         [ #  # ]:          0 :                 if (*p++)
    2146                 :            :                         return 0;
    2147                 :            :         return 1;
    2148                 :            : }
    2149                 :            : 
    2150                 :            : /**
    2151                 :            :  *      ext3_find_shared - find the indirect blocks for partial truncation.
    2152                 :            :  *      @inode:   inode in question
    2153                 :            :  *      @depth:   depth of the affected branch
    2154                 :            :  *      @offsets: offsets of pointers in that branch (see ext3_block_to_path)
    2155                 :            :  *      @chain:   place to store the pointers to partial indirect blocks
    2156                 :            :  *      @top:     place to the (detached) top of branch
    2157                 :            :  *
    2158                 :            :  *      This is a helper function used by ext3_truncate().
    2159                 :            :  *
    2160                 :            :  *      When we do truncate() we may have to clean the ends of several
    2161                 :            :  *      indirect blocks but leave the blocks themselves alive. Block is
    2162                 :            :  *      partially truncated if some data below the new i_size is referred
    2163                 :            :  *      from it (and it is on the path to the first completely truncated
    2164                 :            :  *      data block, indeed).  We have to free the top of that path along
    2165                 :            :  *      with everything to the right of the path. Since no allocation
    2166                 :            :  *      past the truncation point is possible until ext3_truncate()
    2167                 :            :  *      finishes, we may safely do the latter, but top of branch may
    2168                 :            :  *      require special attention - pageout below the truncation point
    2169                 :            :  *      might try to populate it.
    2170                 :            :  *
    2171                 :            :  *      We atomically detach the top of branch from the tree, store the
    2172                 :            :  *      block number of its root in *@top, pointers to buffer_heads of
    2173                 :            :  *      partially truncated blocks - in @chain[].bh and pointers to
    2174                 :            :  *      their last elements that should not be removed - in
    2175                 :            :  *      @chain[].p. Return value is the pointer to last filled element
    2176                 :            :  *      of @chain.
    2177                 :            :  *
    2178                 :            :  *      The work left to caller to do the actual freeing of subtrees:
    2179                 :            :  *              a) free the subtree starting from *@top
    2180                 :            :  *              b) free the subtrees whose roots are stored in
    2181                 :            :  *                      (@chain[i].p+1 .. end of @chain[i].bh->b_data)
    2182                 :            :  *              c) free the subtrees growing from the inode past the @chain[0].
    2183                 :            :  *                      (no partially truncated stuff there).  */
    2184                 :            : 
    2185                 :          0 : static Indirect *ext3_find_shared(struct inode *inode, int depth,
    2186                 :            :                         int offsets[4], Indirect chain[4], __le32 *top)
    2187                 :            : {
    2188                 :            :         Indirect *partial, *p;
    2189                 :            :         int k, err;
    2190                 :            : 
    2191                 :          0 :         *top = 0;
    2192                 :            :         /* Make k index the deepest non-null offset + 1 */
    2193 [ #  # ][ #  # ]:          0 :         for (k = depth; k > 1 && !offsets[k-1]; k--)
    2194                 :            :                 ;
    2195                 :          0 :         partial = ext3_get_branch(inode, k, offsets, chain, &err);
    2196                 :            :         /* Writer: pointers */
    2197         [ #  # ]:          0 :         if (!partial)
    2198                 :          0 :                 partial = chain + k-1;
    2199                 :            :         /*
    2200                 :            :          * If the branch acquired continuation since we've looked at it -
    2201                 :            :          * fine, it should all survive and (new) top doesn't belong to us.
    2202                 :            :          */
    2203 [ #  # ][ #  # ]:          0 :         if (!partial->key && *partial->p)
    2204                 :            :                 /* Writer: end */
    2205                 :            :                 goto no_top;
    2206 [ #  # ][ #  # ]:          0 :         for (p=partial; p>chain && all_zeroes((__le32*)p->bh->b_data,p->p); p--)
    2207                 :            :                 ;
    2208                 :            :         /*
    2209                 :            :          * OK, we've found the last block that must survive. The rest of our
    2210                 :            :          * branch should be detached before unlocking. However, if that rest
    2211                 :            :          * of branch is all ours and does not grow immediately from the inode
    2212                 :            :          * it's easier to cheat and just decrement partial->p.
    2213                 :            :          */
    2214 [ #  # ][ #  # ]:          0 :         if (p == chain + k - 1 && p > chain) {
    2215                 :          0 :                 p->p--;
    2216                 :            :         } else {
    2217                 :          0 :                 *top = *p->p;
    2218                 :            :                 /* Nope, don't do this in ext3.  Must leave the tree intact */
    2219                 :            : #if 0
    2220                 :            :                 *p->p = 0;
    2221                 :            : #endif
    2222                 :            :         }
    2223                 :            :         /* Writer: end */
    2224                 :            : 
    2225         [ #  # ]:          0 :         while(partial > p) {
    2226                 :          0 :                 brelse(partial->bh);
    2227                 :          0 :                 partial--;
    2228                 :            :         }
    2229                 :            : no_top:
    2230                 :          0 :         return partial;
    2231                 :            : }
    2232                 :            : 
    2233                 :            : /*
    2234                 :            :  * Zero a number of block pointers in either an inode or an indirect block.
    2235                 :            :  * If we restart the transaction we must again get write access to the
    2236                 :            :  * indirect block for further modification.
    2237                 :            :  *
    2238                 :            :  * We release `count' blocks on disk, but (last - first) may be greater
    2239                 :            :  * than `count' because there can be holes in there.
    2240                 :            :  */
    2241                 :          0 : static void ext3_clear_blocks(handle_t *handle, struct inode *inode,
    2242                 :            :                 struct buffer_head *bh, ext3_fsblk_t block_to_free,
    2243                 :            :                 unsigned long count, __le32 *first, __le32 *last)
    2244                 :            : {
    2245                 :            :         __le32 *p;
    2246         [ #  # ]:          0 :         if (try_to_extend_transaction(handle, inode)) {
    2247         [ #  # ]:          0 :                 if (bh) {
    2248                 :            :                         BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
    2249         [ #  # ]:          0 :                         if (ext3_journal_dirty_metadata(handle, bh))
    2250                 :            :                                 return;
    2251                 :            :                 }
    2252                 :          0 :                 ext3_mark_inode_dirty(handle, inode);
    2253                 :          0 :                 truncate_restart_transaction(handle, inode);
    2254         [ #  # ]:          0 :                 if (bh) {
    2255                 :            :                         BUFFER_TRACE(bh, "retaking write access");
    2256         [ #  # ]:          0 :                         if (ext3_journal_get_write_access(handle, bh))
    2257                 :            :                                 return;
    2258                 :            :                 }
    2259                 :            :         }
    2260                 :            : 
    2261                 :            :         /*
    2262                 :            :          * Any buffers which are on the journal will be in memory. We find
    2263                 :            :          * them on the hash table so journal_revoke() will run journal_forget()
    2264                 :            :          * on them.  We've already detached each block from the file, so
    2265                 :            :          * bforget() in journal_forget() should be safe.
    2266                 :            :          *
    2267                 :            :          * AKPM: turn on bforget in journal_forget()!!!
    2268                 :            :          */
    2269         [ #  # ]:          0 :         for (p = first; p < last; p++) {
    2270                 :          0 :                 u32 nr = le32_to_cpu(*p);
    2271         [ #  # ]:          0 :                 if (nr) {
    2272                 :            :                         struct buffer_head *bh;
    2273                 :            : 
    2274                 :          0 :                         *p = 0;
    2275                 :          0 :                         bh = sb_find_get_block(inode->i_sb, nr);
    2276                 :          0 :                         ext3_forget(handle, 0, inode, bh, nr);
    2277                 :            :                 }
    2278                 :            :         }
    2279                 :            : 
    2280                 :          0 :         ext3_free_blocks(handle, inode, block_to_free, count);
    2281                 :            : }
    2282                 :            : 
    2283                 :            : /**
    2284                 :            :  * ext3_free_data - free a list of data blocks
    2285                 :            :  * @handle:     handle for this transaction
    2286                 :            :  * @inode:      inode we are dealing with
    2287                 :            :  * @this_bh:    indirect buffer_head which contains *@first and *@last
    2288                 :            :  * @first:      array of block numbers
    2289                 :            :  * @last:       points immediately past the end of array
    2290                 :            :  *
    2291                 :            :  * We are freeing all blocks referred from that array (numbers are stored as
    2292                 :            :  * little-endian 32-bit) and updating @inode->i_blocks appropriately.
    2293                 :            :  *
    2294                 :            :  * We accumulate contiguous runs of blocks to free.  Conveniently, if these
    2295                 :            :  * blocks are contiguous then releasing them at one time will only affect one
    2296                 :            :  * or two bitmap blocks (+ group descriptor(s) and superblock) and we won't
    2297                 :            :  * actually use a lot of journal space.
    2298                 :            :  *
    2299                 :            :  * @this_bh will be %NULL if @first and @last point into the inode's direct
    2300                 :            :  * block pointers.
    2301                 :            :  */
    2302                 :          0 : static void ext3_free_data(handle_t *handle, struct inode *inode,
    2303                 :          0 :                            struct buffer_head *this_bh,
    2304                 :            :                            __le32 *first, __le32 *last)
    2305                 :            : {
    2306                 :            :         ext3_fsblk_t block_to_free = 0;    /* Starting block # of a run */
    2307                 :            :         unsigned long count = 0;            /* Number of blocks in the run */
    2308                 :            :         __le32 *block_to_free_p = NULL;     /* Pointer into inode/ind
    2309                 :            :                                                corresponding to
    2310                 :            :                                                block_to_free */
    2311                 :            :         ext3_fsblk_t nr;                    /* Current block # */
    2312                 :            :         __le32 *p;                          /* Pointer into inode/ind
    2313                 :            :                                                for current block */
    2314                 :            :         int err;
    2315                 :            : 
    2316         [ #  # ]:          0 :         if (this_bh) {                          /* For indirect block */
    2317                 :            :                 BUFFER_TRACE(this_bh, "get_write_access");
    2318                 :          0 :                 err = ext3_journal_get_write_access(handle, this_bh);
    2319                 :            :                 /* Important: if we can't update the indirect pointers
    2320                 :            :                  * to the blocks, we can't free them. */
    2321         [ #  # ]:          0 :                 if (err)
    2322                 :          0 :                         return;
    2323                 :            :         }
    2324                 :            : 
    2325         [ #  # ]:          0 :         for (p = first; p < last; p++) {
    2326                 :          0 :                 nr = le32_to_cpu(*p);
    2327         [ #  # ]:          0 :                 if (nr) {
    2328                 :            :                         /* accumulate blocks to free if they're contiguous */
    2329         [ #  # ]:          0 :                         if (count == 0) {
    2330                 :            :                                 block_to_free = nr;
    2331                 :            :                                 block_to_free_p = p;
    2332                 :            :                                 count = 1;
    2333         [ #  # ]:          0 :                         } else if (nr == block_to_free + count) {
    2334                 :          0 :                                 count++;
    2335                 :            :                         } else {
    2336                 :          0 :                                 ext3_clear_blocks(handle, inode, this_bh,
    2337                 :            :                                                   block_to_free,
    2338                 :            :                                                   count, block_to_free_p, p);
    2339                 :            :                                 block_to_free = nr;
    2340                 :            :                                 block_to_free_p = p;
    2341                 :            :                                 count = 1;
    2342                 :            :                         }
    2343                 :            :                 }
    2344                 :            :         }
    2345                 :            : 
    2346         [ #  # ]:          0 :         if (count > 0)
    2347                 :          0 :                 ext3_clear_blocks(handle, inode, this_bh, block_to_free,
    2348                 :            :                                   count, block_to_free_p, p);
    2349                 :            : 
    2350         [ #  # ]:          0 :         if (this_bh) {
    2351                 :            :                 BUFFER_TRACE(this_bh, "call ext3_journal_dirty_metadata");
    2352                 :            : 
    2353                 :            :                 /*
    2354                 :            :                  * The buffer head should have an attached journal head at this
    2355                 :            :                  * point. However, if the data is corrupted and an indirect
    2356                 :            :                  * block pointed to itself, it would have been detached when
    2357                 :            :                  * the block was cleared. Check for this instead of OOPSing.
    2358                 :            :                  */
    2359         [ #  # ]:          0 :                 if (bh2jh(this_bh))
    2360                 :          0 :                         ext3_journal_dirty_metadata(handle, this_bh);
    2361                 :            :                 else
    2362                 :          0 :                         ext3_error(inode->i_sb, "ext3_free_data",
    2363                 :            :                                    "circular indirect block detected, "
    2364                 :            :                                    "inode=%lu, block=%llu",
    2365                 :            :                                    inode->i_ino,
    2366                 :            :                                    (unsigned long long)this_bh->b_blocknr);
    2367                 :            :         }
    2368                 :            : }
    2369                 :            : 
    2370                 :            : /**
    2371                 :            :  *      ext3_free_branches - free an array of branches
    2372                 :            :  *      @handle: JBD handle for this transaction
    2373                 :            :  *      @inode: inode we are dealing with
    2374                 :            :  *      @parent_bh: the buffer_head which contains *@first and *@last
    2375                 :            :  *      @first: array of block numbers
    2376                 :            :  *      @last:  pointer immediately past the end of array
    2377                 :            :  *      @depth: depth of the branches to free
    2378                 :            :  *
    2379                 :            :  *      We are freeing all blocks referred from these branches (numbers are
    2380                 :            :  *      stored as little-endian 32-bit) and updating @inode->i_blocks
    2381                 :            :  *      appropriately.
    2382                 :            :  */
    2383                 :          0 : static void ext3_free_branches(handle_t *handle, struct inode *inode,
    2384                 :            :                                struct buffer_head *parent_bh,
    2385                 :            :                                __le32 *first, __le32 *last, int depth)
    2386                 :            : {
    2387                 :            :         ext3_fsblk_t nr;
    2388                 :            :         __le32 *p;
    2389                 :            : 
    2390         [ #  # ]:          0 :         if (is_handle_aborted(handle))
    2391                 :            :                 return;
    2392                 :            : 
    2393         [ #  # ]:          0 :         if (depth--) {
    2394                 :            :                 struct buffer_head *bh;
    2395                 :          0 :                 int addr_per_block = EXT3_ADDR_PER_BLOCK(inode->i_sb);
    2396                 :            :                 p = last;
    2397         [ #  # ]:          0 :                 while (--p >= first) {
    2398                 :          0 :                         nr = le32_to_cpu(*p);
    2399         [ #  # ]:          0 :                         if (!nr)
    2400                 :          0 :                                 continue;               /* A hole */
    2401                 :            : 
    2402                 :            :                         /* Go read the buffer for the next level down */
    2403                 :          0 :                         bh = sb_bread(inode->i_sb, nr);
    2404                 :            : 
    2405                 :            :                         /*
    2406                 :            :                          * A read failure? Report error and clear slot
    2407                 :            :                          * (should be rare).
    2408                 :            :                          */
    2409         [ #  # ]:          0 :                         if (!bh) {
    2410                 :          0 :                                 ext3_error(inode->i_sb, "ext3_free_branches",
    2411                 :            :                                            "Read failure, inode=%lu, block="E3FSBLK,
    2412                 :            :                                            inode->i_ino, nr);
    2413                 :          0 :                                 continue;
    2414                 :            :                         }
    2415                 :            : 
    2416                 :            :                         /* This zaps the entire block.  Bottom up. */
    2417                 :            :                         BUFFER_TRACE(bh, "free child branches");
    2418                 :          0 :                         ext3_free_branches(handle, inode, bh,
    2419                 :            :                                            (__le32*)bh->b_data,
    2420                 :          0 :                                            (__le32*)bh->b_data + addr_per_block,
    2421                 :            :                                            depth);
    2422                 :            : 
    2423                 :            :                         /*
    2424                 :            :                          * Everything below this this pointer has been
    2425                 :            :                          * released.  Now let this top-of-subtree go.
    2426                 :            :                          *
    2427                 :            :                          * We want the freeing of this indirect block to be
    2428                 :            :                          * atomic in the journal with the updating of the
    2429                 :            :                          * bitmap block which owns it.  So make some room in
    2430                 :            :                          * the journal.
    2431                 :            :                          *
    2432                 :            :                          * We zero the parent pointer *after* freeing its
    2433                 :            :                          * pointee in the bitmaps, so if extend_transaction()
    2434                 :            :                          * for some reason fails to put the bitmap changes and
    2435                 :            :                          * the release into the same transaction, recovery
    2436                 :            :                          * will merely complain about releasing a free block,
    2437                 :            :                          * rather than leaking blocks.
    2438                 :            :                          */
    2439         [ #  # ]:          0 :                         if (is_handle_aborted(handle))
    2440                 :            :                                 return;
    2441         [ #  # ]:          0 :                         if (try_to_extend_transaction(handle, inode)) {
    2442                 :          0 :                                 ext3_mark_inode_dirty(handle, inode);
    2443                 :          0 :                                 truncate_restart_transaction(handle, inode);
    2444                 :            :                         }
    2445                 :            : 
    2446                 :            :                         /*
    2447                 :            :                          * We've probably journalled the indirect block several
    2448                 :            :                          * times during the truncate.  But it's no longer
    2449                 :            :                          * needed and we now drop it from the transaction via
    2450                 :            :                          * journal_revoke().
    2451                 :            :                          *
    2452                 :            :                          * That's easy if it's exclusively part of this
    2453                 :            :                          * transaction.  But if it's part of the committing
    2454                 :            :                          * transaction then journal_forget() will simply
    2455                 :            :                          * brelse() it.  That means that if the underlying
    2456                 :            :                          * block is reallocated in ext3_get_block(),
    2457                 :            :                          * unmap_underlying_metadata() will find this block
    2458                 :            :                          * and will try to get rid of it.  damn, damn. Thus
    2459                 :            :                          * we don't allow a block to be reallocated until
    2460                 :            :                          * a transaction freeing it has fully committed.
    2461                 :            :                          *
    2462                 :            :                          * We also have to make sure journal replay after a
    2463                 :            :                          * crash does not overwrite non-journaled data blocks
    2464                 :            :                          * with old metadata when the block got reallocated for
    2465                 :            :                          * data.  Thus we have to store a revoke record for a
    2466                 :            :                          * block in the same transaction in which we free the
    2467                 :            :                          * block.
    2468                 :            :                          */
    2469                 :          0 :                         ext3_forget(handle, 1, inode, bh, bh->b_blocknr);
    2470                 :            : 
    2471                 :          0 :                         ext3_free_blocks(handle, inode, nr, 1);
    2472                 :            : 
    2473         [ #  # ]:          0 :                         if (parent_bh) {
    2474                 :            :                                 /*
    2475                 :            :                                  * The block which we have just freed is
    2476                 :            :                                  * pointed to by an indirect block: journal it
    2477                 :            :                                  */
    2478                 :            :                                 BUFFER_TRACE(parent_bh, "get_write_access");
    2479         [ #  # ]:          0 :                                 if (!ext3_journal_get_write_access(handle,
    2480                 :            :                                                                    parent_bh)){
    2481                 :          0 :                                         *p = 0;
    2482                 :            :                                         BUFFER_TRACE(parent_bh,
    2483                 :            :                                         "call ext3_journal_dirty_metadata");
    2484                 :          0 :                                         ext3_journal_dirty_metadata(handle,
    2485                 :            :                                                                     parent_bh);
    2486                 :            :                                 }
    2487                 :            :                         }
    2488                 :            :                 }
    2489                 :            :         } else {
    2490                 :            :                 /* We have reached the bottom of the tree. */
    2491                 :            :                 BUFFER_TRACE(parent_bh, "free data blocks");
    2492                 :          0 :                 ext3_free_data(handle, inode, parent_bh, first, last);
    2493                 :            :         }
    2494                 :            : }
    2495                 :            : 
    2496                 :          0 : int ext3_can_truncate(struct inode *inode)
    2497                 :            : {
    2498         [ #  # ]:          0 :         if (S_ISREG(inode->i_mode))
    2499                 :            :                 return 1;
    2500         [ #  # ]:          0 :         if (S_ISDIR(inode->i_mode))
    2501                 :            :                 return 1;
    2502         [ #  # ]:          0 :         if (S_ISLNK(inode->i_mode))
    2503                 :          0 :                 return !ext3_inode_is_fast_symlink(inode);
    2504                 :            :         return 0;
    2505                 :            : }
    2506                 :            : 
    2507                 :            : /*
    2508                 :            :  * ext3_truncate()
    2509                 :            :  *
    2510                 :            :  * We block out ext3_get_block() block instantiations across the entire
    2511                 :            :  * transaction, and VFS/VM ensures that ext3_truncate() cannot run
    2512                 :            :  * simultaneously on behalf of the same inode.
    2513                 :            :  *
    2514                 :            :  * As we work through the truncate and commit bits of it to the journal there
    2515                 :            :  * is one core, guiding principle: the file's tree must always be consistent on
    2516                 :            :  * disk.  We must be able to restart the truncate after a crash.
    2517                 :            :  *
    2518                 :            :  * The file's tree may be transiently inconsistent in memory (although it
    2519                 :            :  * probably isn't), but whenever we close off and commit a journal transaction,
    2520                 :            :  * the contents of (the filesystem + the journal) must be consistent and
    2521                 :            :  * restartable.  It's pretty simple, really: bottom up, right to left (although
    2522                 :            :  * left-to-right works OK too).
    2523                 :            :  *
    2524                 :            :  * Note that at recovery time, journal replay occurs *before* the restart of
    2525                 :            :  * truncate against the orphan inode list.
    2526                 :            :  *
    2527                 :            :  * The committed inode has the new, desired i_size (which is the same as
    2528                 :            :  * i_disksize in this case).  After a crash, ext3_orphan_cleanup() will see
    2529                 :            :  * that this inode's truncate did not complete and it will again call
    2530                 :            :  * ext3_truncate() to have another go.  So there will be instantiated blocks
    2531                 :            :  * to the right of the truncation point in a crashed ext3 filesystem.  But
    2532                 :            :  * that's fine - as long as they are linked from the inode, the post-crash
    2533                 :            :  * ext3_truncate() run will find them and release them.
    2534                 :            :  */
    2535                 :          0 : void ext3_truncate(struct inode *inode)
    2536                 :            : {
    2537                 :            :         handle_t *handle;
    2538                 :            :         struct ext3_inode_info *ei = EXT3_I(inode);
    2539                 :          0 :         __le32 *i_data = ei->i_data;
    2540                 :          0 :         int addr_per_block = EXT3_ADDR_PER_BLOCK(inode->i_sb);
    2541                 :            :         int offsets[4];
    2542                 :            :         Indirect chain[4];
    2543                 :            :         Indirect *partial;
    2544                 :          0 :         __le32 nr = 0;
    2545                 :            :         int n;
    2546                 :            :         long last_block;
    2547                 :            :         unsigned blocksize = inode->i_sb->s_blocksize;
    2548                 :            : 
    2549                 :            :         trace_ext3_truncate_enter(inode);
    2550                 :            : 
    2551         [ #  # ]:          0 :         if (!ext3_can_truncate(inode))
    2552                 :            :                 goto out_notrans;
    2553                 :            : 
    2554 [ #  # ][ #  # ]:          0 :         if (inode->i_size == 0 && ext3_should_writeback_data(inode))
    2555                 :            :                 ext3_set_inode_state(inode, EXT3_STATE_FLUSH_ON_CLOSE);
    2556                 :            : 
    2557                 :          0 :         handle = start_transaction(inode);
    2558         [ #  # ]:          0 :         if (IS_ERR(handle))
    2559                 :            :                 goto out_notrans;
    2560                 :            : 
    2561                 :          0 :         last_block = (inode->i_size + blocksize-1)
    2562                 :          0 :                                         >> EXT3_BLOCK_SIZE_BITS(inode->i_sb);
    2563                 :          0 :         n = ext3_block_to_path(inode, last_block, offsets, NULL);
    2564         [ #  # ]:          0 :         if (n == 0)
    2565                 :            :                 goto out_stop;  /* error */
    2566                 :            : 
    2567                 :            :         /*
    2568                 :            :          * OK.  This truncate is going to happen.  We add the inode to the
    2569                 :            :          * orphan list, so that if this truncate spans multiple transactions,
    2570                 :            :          * and we crash, we will resume the truncate when the filesystem
    2571                 :            :          * recovers.  It also marks the inode dirty, to catch the new size.
    2572                 :            :          *
    2573                 :            :          * Implication: the file must always be in a sane, consistent
    2574                 :            :          * truncatable state while each transaction commits.
    2575                 :            :          */
    2576         [ #  # ]:          0 :         if (ext3_orphan_add(handle, inode))
    2577                 :            :                 goto out_stop;
    2578                 :            : 
    2579                 :            :         /*
    2580                 :            :          * The orphan list entry will now protect us from any crash which
    2581                 :            :          * occurs before the truncate completes, so it is now safe to propagate
    2582                 :            :          * the new, shorter inode size (held for now in i_size) into the
    2583                 :            :          * on-disk inode. We do this via i_disksize, which is the value which
    2584                 :            :          * ext3 *really* writes onto the disk inode.
    2585                 :            :          */
    2586                 :          0 :         ei->i_disksize = inode->i_size;
    2587                 :            : 
    2588                 :            :         /*
    2589                 :            :          * From here we block out all ext3_get_block() callers who want to
    2590                 :            :          * modify the block allocation tree.
    2591                 :            :          */
    2592                 :          0 :         mutex_lock(&ei->truncate_mutex);
    2593                 :            : 
    2594         [ #  # ]:          0 :         if (n == 1) {           /* direct blocks */
    2595                 :          0 :                 ext3_free_data(handle, inode, NULL, i_data+offsets[0],
    2596                 :            :                                i_data + EXT3_NDIR_BLOCKS);
    2597                 :          0 :                 goto do_indirects;
    2598                 :            :         }
    2599                 :            : 
    2600                 :          0 :         partial = ext3_find_shared(inode, n, offsets, chain, &nr);
    2601                 :            :         /* Kill the top of shared branch (not detached) */
    2602         [ #  # ]:          0 :         if (nr) {
    2603         [ #  # ]:          0 :                 if (partial == chain) {
    2604                 :            :                         /* Shared branch grows from the inode */
    2605                 :          0 :                         ext3_free_branches(handle, inode, NULL,
    2606                 :          0 :                                            &nr, &nr+1, (chain+n-1) - partial);
    2607                 :          0 :                         *partial->p = 0;
    2608                 :            :                         /*
    2609                 :            :                          * We mark the inode dirty prior to restart,
    2610                 :            :                          * and prior to stop.  No need for it here.
    2611                 :            :                          */
    2612                 :            :                 } else {
    2613                 :            :                         /* Shared branch grows from an indirect block */
    2614                 :          0 :                         ext3_free_branches(handle, inode, partial->bh,
    2615                 :            :                                         partial->p,
    2616                 :          0 :                                         partial->p+1, (chain+n-1) - partial);
    2617                 :            :                 }
    2618                 :            :         }
    2619                 :            :         /* Clear the ends of indirect blocks on the shared branch */
    2620         [ #  # ]:          0 :         while (partial > chain) {
    2621                 :          0 :                 ext3_free_branches(handle, inode, partial->bh, partial->p + 1,
    2622                 :          0 :                                    (__le32*)partial->bh->b_data+addr_per_block,
    2623                 :          0 :                                    (chain+n-1) - partial);
    2624                 :            :                 BUFFER_TRACE(partial->bh, "call brelse");
    2625                 :          0 :                 brelse (partial->bh);
    2626                 :          0 :                 partial--;
    2627                 :            :         }
    2628                 :            : do_indirects:
    2629                 :            :         /* Kill the remaining (whole) subtrees */
    2630   [ #  #  #  # ]:          0 :         switch (offsets[0]) {
    2631                 :            :         default:
    2632                 :          0 :                 nr = i_data[EXT3_IND_BLOCK];
    2633         [ #  # ]:          0 :                 if (nr) {
    2634                 :          0 :                         ext3_free_branches(handle, inode, NULL, &nr, &nr+1, 1);
    2635                 :          0 :                         i_data[EXT3_IND_BLOCK] = 0;
    2636                 :            :                 }
    2637                 :            :         case EXT3_IND_BLOCK:
    2638                 :          0 :                 nr = i_data[EXT3_DIND_BLOCK];
    2639         [ #  # ]:          0 :                 if (nr) {
    2640                 :          0 :                         ext3_free_branches(handle, inode, NULL, &nr, &nr+1, 2);
    2641                 :          0 :                         i_data[EXT3_DIND_BLOCK] = 0;
    2642                 :            :                 }
    2643                 :            :         case EXT3_DIND_BLOCK:
    2644                 :          0 :                 nr = i_data[EXT3_TIND_BLOCK];
    2645         [ #  # ]:          0 :                 if (nr) {
    2646                 :          0 :                         ext3_free_branches(handle, inode, NULL, &nr, &nr+1, 3);
    2647                 :          0 :                         i_data[EXT3_TIND_BLOCK] = 0;
    2648                 :            :                 }
    2649                 :            :         case EXT3_TIND_BLOCK:
    2650                 :            :                 ;
    2651                 :            :         }
    2652                 :            : 
    2653                 :          0 :         ext3_discard_reservation(inode);
    2654                 :            : 
    2655                 :          0 :         mutex_unlock(&ei->truncate_mutex);
    2656                 :          0 :         inode->i_mtime = inode->i_ctime = CURRENT_TIME_SEC;
    2657                 :          0 :         ext3_mark_inode_dirty(handle, inode);
    2658                 :            : 
    2659                 :            :         /*
    2660                 :            :          * In a multi-transaction truncate, we only make the final transaction
    2661                 :            :          * synchronous
    2662                 :            :          */
    2663 [ #  # ][ #  # ]:          0 :         if (IS_SYNC(inode))
    2664                 :          0 :                 handle->h_sync = 1;
    2665                 :            : out_stop:
    2666                 :            :         /*
    2667                 :            :          * If this was a simple ftruncate(), and the file will remain alive
    2668                 :            :          * then we need to clear up the orphan record which we created above.
    2669                 :            :          * However, if this was a real unlink then we were called by
    2670                 :            :          * ext3_evict_inode(), and we allow that function to clean up the
    2671                 :            :          * orphan info for us.
    2672                 :            :          */
    2673         [ #  # ]:          0 :         if (inode->i_nlink)
    2674                 :          0 :                 ext3_orphan_del(handle, inode);
    2675                 :            : 
    2676                 :          0 :         ext3_journal_stop(handle);
    2677                 :            :         trace_ext3_truncate_exit(inode);
    2678                 :          0 :         return;
    2679                 :            : out_notrans:
    2680                 :            :         /*
    2681                 :            :          * Delete the inode from orphan list so that it doesn't stay there
    2682                 :            :          * forever and trigger assertion on umount.
    2683                 :            :          */
    2684         [ #  # ]:          0 :         if (inode->i_nlink)
    2685                 :          0 :                 ext3_orphan_del(NULL, inode);
    2686                 :            :         trace_ext3_truncate_exit(inode);
    2687                 :            : }
    2688                 :            : 
    2689                 :          0 : static ext3_fsblk_t ext3_get_inode_block(struct super_block *sb,
    2690                 :            :                 unsigned long ino, struct ext3_iloc *iloc)
    2691                 :            : {
    2692                 :            :         unsigned long block_group;
    2693                 :            :         unsigned long offset;
    2694                 :            :         ext3_fsblk_t block;
    2695                 :            :         struct ext3_group_desc *gdp;
    2696                 :            : 
    2697         [ #  # ]:          0 :         if (!ext3_valid_inum(sb, ino)) {
    2698                 :            :                 /*
    2699                 :            :                  * This error is already checked for in namei.c unless we are
    2700                 :            :                  * looking at an NFS filehandle, in which case no error
    2701                 :            :                  * report is needed
    2702                 :            :                  */
    2703                 :            :                 return 0;
    2704                 :            :         }
    2705                 :            : 
    2706                 :          0 :         block_group = (ino - 1) / EXT3_INODES_PER_GROUP(sb);
    2707                 :          0 :         gdp = ext3_get_group_desc(sb, block_group, NULL);
    2708         [ #  # ]:          0 :         if (!gdp)
    2709                 :            :                 return 0;
    2710                 :            :         /*
    2711                 :            :          * Figure out the offset within the block group inode table
    2712                 :            :          */
    2713                 :          0 :         offset = ((ino - 1) % EXT3_INODES_PER_GROUP(sb)) *
    2714                 :          0 :                 EXT3_INODE_SIZE(sb);
    2715                 :          0 :         block = le32_to_cpu(gdp->bg_inode_table) +
    2716                 :          0 :                 (offset >> EXT3_BLOCK_SIZE_BITS(sb));
    2717                 :            : 
    2718                 :          0 :         iloc->block_group = block_group;
    2719                 :          0 :         iloc->offset = offset & (EXT3_BLOCK_SIZE(sb) - 1);
    2720                 :            :         return block;
    2721                 :            : }
    2722                 :            : 
    2723                 :            : /*
    2724                 :            :  * ext3_get_inode_loc returns with an extra refcount against the inode's
    2725                 :            :  * underlying buffer_head on success. If 'in_mem' is true, we have all
    2726                 :            :  * data in memory that is needed to recreate the on-disk version of this
    2727                 :            :  * inode.
    2728                 :            :  */
    2729                 :          0 : static int __ext3_get_inode_loc(struct inode *inode,
    2730                 :            :                                 struct ext3_iloc *iloc, int in_mem)
    2731                 :            : {
    2732                 :            :         ext3_fsblk_t block;
    2733                 :            :         struct buffer_head *bh;
    2734                 :            : 
    2735                 :          0 :         block = ext3_get_inode_block(inode->i_sb, inode->i_ino, iloc);
    2736         [ #  # ]:          0 :         if (!block)
    2737                 :            :                 return -EIO;
    2738                 :            : 
    2739                 :          0 :         bh = sb_getblk(inode->i_sb, block);
    2740         [ #  # ]:          0 :         if (unlikely(!bh)) {
    2741                 :          0 :                 ext3_error (inode->i_sb, "ext3_get_inode_loc",
    2742                 :            :                                 "unable to read inode block - "
    2743                 :            :                                 "inode=%lu, block="E3FSBLK,
    2744                 :            :                                  inode->i_ino, block);
    2745                 :          0 :                 return -ENOMEM;
    2746                 :            :         }
    2747         [ #  # ]:          0 :         if (!buffer_uptodate(bh)) {
    2748                 :            :                 lock_buffer(bh);
    2749                 :            : 
    2750                 :            :                 /*
    2751                 :            :                  * If the buffer has the write error flag, we have failed
    2752                 :            :                  * to write out another inode in the same block.  In this
    2753                 :            :                  * case, we don't have to read the block because we may
    2754                 :            :                  * read the old inode data successfully.
    2755                 :            :                  */
    2756 [ #  # ][ #  # ]:          0 :                 if (buffer_write_io_error(bh) && !buffer_uptodate(bh))
    2757                 :            :                         set_buffer_uptodate(bh);
    2758                 :            : 
    2759         [ #  # ]:          0 :                 if (buffer_uptodate(bh)) {
    2760                 :            :                         /* someone brought it uptodate while we waited */
    2761                 :          0 :                         unlock_buffer(bh);
    2762                 :          0 :                         goto has_buffer;
    2763                 :            :                 }
    2764                 :            : 
    2765                 :            :                 /*
    2766                 :            :                  * If we have all information of the inode in memory and this
    2767                 :            :                  * is the only valid inode in the block, we need not read the
    2768                 :            :                  * block.
    2769                 :            :                  */
    2770         [ #  # ]:          0 :                 if (in_mem) {
    2771                 :            :                         struct buffer_head *bitmap_bh;
    2772                 :            :                         struct ext3_group_desc *desc;
    2773                 :            :                         int inodes_per_buffer;
    2774                 :            :                         int inode_offset, i;
    2775                 :            :                         int block_group;
    2776                 :            :                         int start;
    2777                 :            : 
    2778                 :          0 :                         block_group = (inode->i_ino - 1) /
    2779                 :          0 :                                         EXT3_INODES_PER_GROUP(inode->i_sb);
    2780                 :          0 :                         inodes_per_buffer = bh->b_size /
    2781                 :          0 :                                 EXT3_INODE_SIZE(inode->i_sb);
    2782                 :          0 :                         inode_offset = ((inode->i_ino - 1) %
    2783                 :            :                                         EXT3_INODES_PER_GROUP(inode->i_sb));
    2784                 :          0 :                         start = inode_offset & ~(inodes_per_buffer - 1);
    2785                 :            : 
    2786                 :            :                         /* Is the inode bitmap in cache? */
    2787                 :          0 :                         desc = ext3_get_group_desc(inode->i_sb,
    2788                 :            :                                                 block_group, NULL);
    2789         [ #  # ]:          0 :                         if (!desc)
    2790                 :            :                                 goto make_io;
    2791                 :            : 
    2792                 :          0 :                         bitmap_bh = sb_getblk(inode->i_sb,
    2793                 :          0 :                                         le32_to_cpu(desc->bg_inode_bitmap));
    2794         [ #  # ]:          0 :                         if (unlikely(!bitmap_bh))
    2795                 :            :                                 goto make_io;
    2796                 :            : 
    2797                 :            :                         /*
    2798                 :            :                          * If the inode bitmap isn't in cache then the
    2799                 :            :                          * optimisation may end up performing two reads instead
    2800                 :            :                          * of one, so skip it.
    2801                 :            :                          */
    2802         [ #  # ]:          0 :                         if (!buffer_uptodate(bitmap_bh)) {
    2803                 :            :                                 brelse(bitmap_bh);
    2804                 :            :                                 goto make_io;
    2805                 :            :                         }
    2806         [ #  # ]:          0 :                         for (i = start; i < start + inodes_per_buffer; i++) {
    2807         [ #  # ]:          0 :                                 if (i == inode_offset)
    2808                 :          0 :                                         continue;
    2809         [ #  # ]:          0 :                                 if (ext3_test_bit(i, bitmap_bh->b_data))
    2810                 :            :                                         break;
    2811                 :            :                         }
    2812                 :            :                         brelse(bitmap_bh);
    2813         [ #  # ]:          0 :                         if (i == start + inodes_per_buffer) {
    2814                 :            :                                 /* all other inodes are free, so skip I/O */
    2815         [ #  # ]:          0 :                                 memset(bh->b_data, 0, bh->b_size);
    2816                 :            :                                 set_buffer_uptodate(bh);
    2817                 :          0 :                                 unlock_buffer(bh);
    2818                 :          0 :                                 goto has_buffer;
    2819                 :            :                         }
    2820                 :            :                 }
    2821                 :            : 
    2822                 :            : make_io:
    2823                 :            :                 /*
    2824                 :            :                  * There are other valid inodes in the buffer, this inode
    2825                 :            :                  * has in-inode xattrs, or we don't have this inode in memory.
    2826                 :            :                  * Read the block from disk.
    2827                 :            :                  */
    2828                 :            :                 trace_ext3_load_inode(inode);
    2829                 :            :                 get_bh(bh);
    2830                 :          0 :                 bh->b_end_io = end_buffer_read_sync;
    2831                 :          0 :                 submit_bh(READ | REQ_META | REQ_PRIO, bh);
    2832                 :            :                 wait_on_buffer(bh);
    2833         [ #  # ]:          0 :                 if (!buffer_uptodate(bh)) {
    2834                 :          0 :                         ext3_error(inode->i_sb, "ext3_get_inode_loc",
    2835                 :            :                                         "unable to read inode block - "
    2836                 :            :                                         "inode=%lu, block="E3FSBLK,
    2837                 :            :                                         inode->i_ino, block);
    2838                 :            :                         brelse(bh);
    2839                 :            :                         return -EIO;
    2840                 :            :                 }
    2841                 :            :         }
    2842                 :            : has_buffer:
    2843                 :          0 :         iloc->bh = bh;
    2844                 :          0 :         return 0;
    2845                 :            : }
    2846                 :            : 
    2847                 :          0 : int ext3_get_inode_loc(struct inode *inode, struct ext3_iloc *iloc)
    2848                 :            : {
    2849                 :            :         /* We have all inode data except xattrs in memory here. */
    2850                 :          0 :         return __ext3_get_inode_loc(inode, iloc,
    2851                 :            :                 !ext3_test_inode_state(inode, EXT3_STATE_XATTR));
    2852                 :            : }
    2853                 :            : 
    2854                 :          0 : void ext3_set_inode_flags(struct inode *inode)
    2855                 :            : {
    2856                 :          0 :         unsigned int flags = EXT3_I(inode)->i_flags;
    2857                 :            : 
    2858                 :          0 :         inode->i_flags &= ~(S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC);
    2859         [ #  # ]:          0 :         if (flags & EXT3_SYNC_FL)
    2860                 :          0 :                 inode->i_flags |= S_SYNC;
    2861         [ #  # ]:          0 :         if (flags & EXT3_APPEND_FL)
    2862                 :          0 :                 inode->i_flags |= S_APPEND;
    2863         [ #  # ]:          0 :         if (flags & EXT3_IMMUTABLE_FL)
    2864                 :          0 :                 inode->i_flags |= S_IMMUTABLE;
    2865         [ #  # ]:          0 :         if (flags & EXT3_NOATIME_FL)
    2866                 :          0 :                 inode->i_flags |= S_NOATIME;
    2867         [ #  # ]:          0 :         if (flags & EXT3_DIRSYNC_FL)
    2868                 :          0 :                 inode->i_flags |= S_DIRSYNC;
    2869                 :          0 : }
    2870                 :            : 
    2871                 :            : /* Propagate flags from i_flags to EXT3_I(inode)->i_flags */
    2872                 :          0 : void ext3_get_inode_flags(struct ext3_inode_info *ei)
    2873                 :            : {
    2874                 :          0 :         unsigned int flags = ei->vfs_inode.i_flags;
    2875                 :            : 
    2876                 :          0 :         ei->i_flags &= ~(EXT3_SYNC_FL|EXT3_APPEND_FL|
    2877                 :            :                         EXT3_IMMUTABLE_FL|EXT3_NOATIME_FL|EXT3_DIRSYNC_FL);
    2878         [ #  # ]:          0 :         if (flags & S_SYNC)
    2879                 :          0 :                 ei->i_flags |= EXT3_SYNC_FL;
    2880         [ #  # ]:          0 :         if (flags & S_APPEND)
    2881                 :          0 :                 ei->i_flags |= EXT3_APPEND_FL;
    2882         [ #  # ]:          0 :         if (flags & S_IMMUTABLE)
    2883                 :          0 :                 ei->i_flags |= EXT3_IMMUTABLE_FL;
    2884         [ #  # ]:          0 :         if (flags & S_NOATIME)
    2885                 :          0 :                 ei->i_flags |= EXT3_NOATIME_FL;
    2886         [ #  # ]:          0 :         if (flags & S_DIRSYNC)
    2887                 :          0 :                 ei->i_flags |= EXT3_DIRSYNC_FL;
    2888                 :          0 : }
    2889                 :            : 
    2890                 :          0 : struct inode *ext3_iget(struct super_block *sb, unsigned long ino)
    2891                 :            : {
    2892                 :            :         struct ext3_iloc iloc;
    2893                 :            :         struct ext3_inode *raw_inode;
    2894                 :            :         struct ext3_inode_info *ei;
    2895                 :            :         struct buffer_head *bh;
    2896                 :            :         struct inode *inode;
    2897                 :          0 :         journal_t *journal = EXT3_SB(sb)->s_journal;
    2898                 :            :         transaction_t *transaction;
    2899                 :            :         long ret;
    2900                 :            :         int block;
    2901                 :            :         uid_t i_uid;
    2902                 :            :         gid_t i_gid;
    2903                 :            : 
    2904                 :          0 :         inode = iget_locked(sb, ino);
    2905         [ #  # ]:          0 :         if (!inode)
    2906                 :            :                 return ERR_PTR(-ENOMEM);
    2907         [ #  # ]:          0 :         if (!(inode->i_state & I_NEW))
    2908                 :            :                 return inode;
    2909                 :            : 
    2910                 :            :         ei = EXT3_I(inode);
    2911                 :          0 :         ei->i_block_alloc_info = NULL;
    2912                 :            : 
    2913                 :          0 :         ret = __ext3_get_inode_loc(inode, &iloc, 0);
    2914         [ #  # ]:          0 :         if (ret < 0)
    2915                 :            :                 goto bad_inode;
    2916                 :          0 :         bh = iloc.bh;
    2917                 :          0 :         raw_inode = ext3_raw_inode(&iloc);
    2918                 :          0 :         inode->i_mode = le16_to_cpu(raw_inode->i_mode);
    2919                 :          0 :         i_uid = (uid_t)le16_to_cpu(raw_inode->i_uid_low);
    2920                 :          0 :         i_gid = (gid_t)le16_to_cpu(raw_inode->i_gid_low);
    2921         [ #  # ]:          0 :         if(!(test_opt (inode->i_sb, NO_UID32))) {
    2922                 :          0 :                 i_uid |= le16_to_cpu(raw_inode->i_uid_high) << 16;
    2923                 :          0 :                 i_gid |= le16_to_cpu(raw_inode->i_gid_high) << 16;
    2924                 :            :         }
    2925                 :            :         i_uid_write(inode, i_uid);
    2926                 :            :         i_gid_write(inode, i_gid);
    2927                 :          0 :         set_nlink(inode, le16_to_cpu(raw_inode->i_links_count));
    2928                 :          0 :         inode->i_size = le32_to_cpu(raw_inode->i_size);
    2929                 :          0 :         inode->i_atime.tv_sec = (signed)le32_to_cpu(raw_inode->i_atime);
    2930                 :          0 :         inode->i_ctime.tv_sec = (signed)le32_to_cpu(raw_inode->i_ctime);
    2931                 :          0 :         inode->i_mtime.tv_sec = (signed)le32_to_cpu(raw_inode->i_mtime);
    2932                 :          0 :         inode->i_atime.tv_nsec = inode->i_ctime.tv_nsec = inode->i_mtime.tv_nsec = 0;
    2933                 :            : 
    2934                 :          0 :         ei->i_state_flags = 0;
    2935                 :          0 :         ei->i_dir_start_lookup = 0;
    2936                 :          0 :         ei->i_dtime = le32_to_cpu(raw_inode->i_dtime);
    2937                 :            :         /* We now have enough fields to check if the inode was active or not.
    2938                 :            :          * This is needed because nfsd might try to access dead inodes
    2939                 :            :          * the test is that same one that e2fsck uses
    2940                 :            :          * NeilBrown 1999oct15
    2941                 :            :          */
    2942         [ #  # ]:          0 :         if (inode->i_nlink == 0) {
    2943 [ #  # ][ #  # ]:          0 :                 if (inode->i_mode == 0 ||
    2944                 :          0 :                     !(EXT3_SB(inode->i_sb)->s_mount_state & EXT3_ORPHAN_FS)) {
    2945                 :            :                         /* this inode is deleted */
    2946                 :            :                         brelse (bh);
    2947                 :            :                         ret = -ESTALE;
    2948                 :            :                         goto bad_inode;
    2949                 :            :                 }
    2950                 :            :                 /* The only unlinked inodes we let through here have
    2951                 :            :                  * valid i_mode and are being read by the orphan
    2952                 :            :                  * recovery code: that's fine, we're about to complete
    2953                 :            :                  * the process of deleting those. */
    2954                 :            :         }
    2955                 :          0 :         inode->i_blocks = le32_to_cpu(raw_inode->i_blocks);
    2956                 :          0 :         ei->i_flags = le32_to_cpu(raw_inode->i_flags);
    2957                 :            : #ifdef EXT3_FRAGMENTS
    2958                 :            :         ei->i_faddr = le32_to_cpu(raw_inode->i_faddr);
    2959                 :            :         ei->i_frag_no = raw_inode->i_frag;
    2960                 :            :         ei->i_frag_size = raw_inode->i_fsize;
    2961                 :            : #endif
    2962                 :          0 :         ei->i_file_acl = le32_to_cpu(raw_inode->i_file_acl);
    2963         [ #  # ]:          0 :         if (!S_ISREG(inode->i_mode)) {
    2964                 :          0 :                 ei->i_dir_acl = le32_to_cpu(raw_inode->i_dir_acl);
    2965                 :            :         } else {
    2966                 :          0 :                 inode->i_size |=
    2967                 :          0 :                         ((__u64)le32_to_cpu(raw_inode->i_size_high)) << 32;
    2968                 :            :         }
    2969                 :          0 :         ei->i_disksize = inode->i_size;
    2970                 :          0 :         inode->i_generation = le32_to_cpu(raw_inode->i_generation);
    2971                 :          0 :         ei->i_block_group = iloc.block_group;
    2972                 :            :         /*
    2973                 :            :          * NOTE! The in-memory inode i_data array is in little-endian order
    2974                 :            :          * even on big-endian machines: we do NOT byteswap the block numbers!
    2975                 :            :          */
    2976         [ #  # ]:          0 :         for (block = 0; block < EXT3_N_BLOCKS; block++)
    2977                 :          0 :                 ei->i_data[block] = raw_inode->i_block[block];
    2978                 :          0 :         INIT_LIST_HEAD(&ei->i_orphan);
    2979                 :            : 
    2980                 :            :         /*
    2981                 :            :          * Set transaction id's of transactions that have to be committed
    2982                 :            :          * to finish f[data]sync. We set them to currently running transaction
    2983                 :            :          * as we cannot be sure that the inode or some of its metadata isn't
    2984                 :            :          * part of the transaction - the inode could have been reclaimed and
    2985                 :            :          * now it is reread from disk.
    2986                 :            :          */
    2987         [ #  # ]:          0 :         if (journal) {
    2988                 :            :                 tid_t tid;
    2989                 :            : 
    2990                 :            :                 spin_lock(&journal->j_state_lock);
    2991         [ #  # ]:          0 :                 if (journal->j_running_transaction)
    2992                 :            :                         transaction = journal->j_running_transaction;
    2993                 :            :                 else
    2994                 :          0 :                         transaction = journal->j_committing_transaction;
    2995         [ #  # ]:          0 :                 if (transaction)
    2996                 :          0 :                         tid = transaction->t_tid;
    2997                 :            :                 else
    2998                 :          0 :                         tid = journal->j_commit_sequence;
    2999                 :            :                 spin_unlock(&journal->j_state_lock);
    3000                 :          0 :                 atomic_set(&ei->i_sync_tid, tid);
    3001                 :          0 :                 atomic_set(&ei->i_datasync_tid, tid);
    3002                 :            :         }
    3003                 :            : 
    3004 [ #  # ][ #  # ]:          0 :         if (inode->i_ino >= EXT3_FIRST_INO(inode->i_sb) + 1 &&
    3005                 :          0 :             EXT3_INODE_SIZE(inode->i_sb) > EXT3_GOOD_OLD_INODE_SIZE) {
    3006                 :            :                 /*
    3007                 :            :                  * When mke2fs creates big inodes it does not zero out
    3008                 :            :                  * the unused bytes above EXT3_GOOD_OLD_INODE_SIZE,
    3009                 :            :                  * so ignore those first few inodes.
    3010                 :            :                  */
    3011                 :          0 :                 ei->i_extra_isize = le16_to_cpu(raw_inode->i_extra_isize);
    3012         [ #  # ]:          0 :                 if (EXT3_GOOD_OLD_INODE_SIZE + ei->i_extra_isize >
    3013                 :          0 :                     EXT3_INODE_SIZE(inode->i_sb)) {
    3014                 :            :                         brelse (bh);
    3015                 :            :                         ret = -EIO;
    3016                 :            :                         goto bad_inode;
    3017                 :            :                 }
    3018         [ #  # ]:          0 :                 if (ei->i_extra_isize == 0) {
    3019                 :            :                         /* The extra space is currently unused. Use it. */
    3020                 :          0 :                         ei->i_extra_isize = sizeof(struct ext3_inode) -
    3021                 :            :                                             EXT3_GOOD_OLD_INODE_SIZE;
    3022                 :            :                 } else {
    3023                 :          0 :                         __le32 *magic = (void *)raw_inode +
    3024                 :          0 :                                         EXT3_GOOD_OLD_INODE_SIZE +
    3025                 :            :                                         ei->i_extra_isize;
    3026         [ #  # ]:          0 :                         if (*magic == cpu_to_le32(EXT3_XATTR_MAGIC))
    3027                 :            :                                  ext3_set_inode_state(inode, EXT3_STATE_XATTR);
    3028                 :            :                 }
    3029                 :            :         } else
    3030                 :          0 :                 ei->i_extra_isize = 0;
    3031                 :            : 
    3032         [ #  # ]:          0 :         if (S_ISREG(inode->i_mode)) {
    3033                 :          0 :                 inode->i_op = &ext3_file_inode_operations;
    3034                 :          0 :                 inode->i_fop = &ext3_file_operations;
    3035                 :          0 :                 ext3_set_aops(inode);
    3036         [ #  # ]:          0 :         } else if (S_ISDIR(inode->i_mode)) {
    3037                 :          0 :                 inode->i_op = &ext3_dir_inode_operations;
    3038                 :          0 :                 inode->i_fop = &ext3_dir_operations;
    3039         [ #  # ]:          0 :         } else if (S_ISLNK(inode->i_mode)) {
    3040         [ #  # ]:          0 :                 if (ext3_inode_is_fast_symlink(inode)) {
    3041                 :          0 :                         inode->i_op = &ext3_fast_symlink_inode_operations;
    3042                 :          0 :                         nd_terminate_link(ei->i_data, inode->i_size,
    3043                 :            :                                 sizeof(ei->i_data) - 1);
    3044                 :            :                 } else {
    3045                 :          0 :                         inode->i_op = &ext3_symlink_inode_operations;
    3046                 :          0 :                         ext3_set_aops(inode);
    3047                 :            :                 }
    3048                 :            :         } else {
    3049                 :          0 :                 inode->i_op = &ext3_special_inode_operations;
    3050         [ #  # ]:          0 :                 if (raw_inode->i_block[0])
    3051                 :          0 :                         init_special_inode(inode, inode->i_mode,
    3052                 :            :                            old_decode_dev(le32_to_cpu(raw_inode->i_block[0])));
    3053                 :            :                 else
    3054                 :          0 :                         init_special_inode(inode, inode->i_mode,
    3055                 :            :                            new_decode_dev(le32_to_cpu(raw_inode->i_block[1])));
    3056                 :            :         }
    3057                 :          0 :         brelse (iloc.bh);
    3058                 :          0 :         ext3_set_inode_flags(inode);
    3059                 :          0 :         unlock_new_inode(inode);
    3060                 :          0 :         return inode;
    3061                 :            : 
    3062                 :            : bad_inode:
    3063                 :          0 :         iget_failed(inode);
    3064                 :          0 :         return ERR_PTR(ret);
    3065                 :            : }
    3066                 :            : 
    3067                 :            : /*
    3068                 :            :  * Post the struct inode info into an on-disk inode location in the
    3069                 :            :  * buffer-cache.  This gobbles the caller's reference to the
    3070                 :            :  * buffer_head in the inode location struct.
    3071                 :            :  *
    3072                 :            :  * The caller must have write access to iloc->bh.
    3073                 :            :  */
    3074                 :          0 : static int ext3_do_update_inode(handle_t *handle,
    3075                 :          0 :                                 struct inode *inode,
    3076                 :          0 :                                 struct ext3_iloc *iloc)
    3077                 :            : {
    3078                 :            :         struct ext3_inode *raw_inode = ext3_raw_inode(iloc);
    3079                 :          0 :         struct ext3_inode_info *ei = EXT3_I(inode);
    3080                 :            :         struct buffer_head *bh = iloc->bh;
    3081                 :            :         int err = 0, rc, block;
    3082                 :            :         int need_datasync = 0;
    3083                 :            :         __le32 disksize;
    3084                 :            :         uid_t i_uid;
    3085                 :            :         gid_t i_gid;
    3086                 :            : 
    3087                 :            : again:
    3088                 :            :         /* we can't allow multiple procs in here at once, its a bit racey */
    3089                 :            :         lock_buffer(bh);
    3090                 :            : 
    3091                 :            :         /* For fields not not tracking in the in-memory inode,
    3092                 :            :          * initialise them to zero for new inodes. */
    3093         [ #  # ]:          0 :         if (ext3_test_inode_state(inode, EXT3_STATE_NEW))
    3094         [ #  # ]:          0 :                 memset(raw_inode, 0, EXT3_SB(inode->i_sb)->s_inode_size);
    3095                 :            : 
    3096                 :          0 :         ext3_get_inode_flags(ei);
    3097                 :          0 :         raw_inode->i_mode = cpu_to_le16(inode->i_mode);
    3098                 :            :         i_uid = i_uid_read(inode);
    3099                 :            :         i_gid = i_gid_read(inode);
    3100         [ #  # ]:          0 :         if(!(test_opt(inode->i_sb, NO_UID32))) {
    3101                 :          0 :                 raw_inode->i_uid_low = cpu_to_le16(low_16_bits(i_uid));
    3102                 :          0 :                 raw_inode->i_gid_low = cpu_to_le16(low_16_bits(i_gid));
    3103                 :            : /*
    3104                 :            :  * Fix up interoperability with old kernels. Otherwise, old inodes get
    3105                 :            :  * re-used with the upper 16 bits of the uid/gid intact
    3106                 :            :  */
    3107         [ #  # ]:          0 :                 if(!ei->i_dtime) {
    3108                 :          0 :                         raw_inode->i_uid_high =
    3109                 :          0 :                                 cpu_to_le16(high_16_bits(i_uid));
    3110                 :          0 :                         raw_inode->i_gid_high =
    3111                 :          0 :                                 cpu_to_le16(high_16_bits(i_gid));
    3112                 :            :                 } else {
    3113                 :          0 :                         raw_inode->i_uid_high = 0;
    3114                 :          0 :                         raw_inode->i_gid_high = 0;
    3115                 :            :                 }
    3116                 :            :         } else {
    3117                 :          0 :                 raw_inode->i_uid_low =
    3118         [ #  # ]:          0 :                         cpu_to_le16(fs_high2lowuid(i_uid));
    3119                 :          0 :                 raw_inode->i_gid_low =
    3120         [ #  # ]:          0 :                         cpu_to_le16(fs_high2lowgid(i_gid));
    3121                 :          0 :                 raw_inode->i_uid_high = 0;
    3122                 :          0 :                 raw_inode->i_gid_high = 0;
    3123                 :            :         }
    3124                 :          0 :         raw_inode->i_links_count = cpu_to_le16(inode->i_nlink);
    3125                 :          0 :         disksize = cpu_to_le32(ei->i_disksize);
    3126         [ #  # ]:          0 :         if (disksize != raw_inode->i_size) {
    3127                 :            :                 need_datasync = 1;
    3128                 :          0 :                 raw_inode->i_size = disksize;
    3129                 :            :         }
    3130                 :          0 :         raw_inode->i_atime = cpu_to_le32(inode->i_atime.tv_sec);
    3131                 :          0 :         raw_inode->i_ctime = cpu_to_le32(inode->i_ctime.tv_sec);
    3132                 :          0 :         raw_inode->i_mtime = cpu_to_le32(inode->i_mtime.tv_sec);
    3133                 :          0 :         raw_inode->i_blocks = cpu_to_le32(inode->i_blocks);
    3134                 :          0 :         raw_inode->i_dtime = cpu_to_le32(ei->i_dtime);
    3135                 :          0 :         raw_inode->i_flags = cpu_to_le32(ei->i_flags);
    3136                 :            : #ifdef EXT3_FRAGMENTS
    3137                 :            :         raw_inode->i_faddr = cpu_to_le32(ei->i_faddr);
    3138                 :            :         raw_inode->i_frag = ei->i_frag_no;
    3139                 :            :         raw_inode->i_fsize = ei->i_frag_size;
    3140                 :            : #endif
    3141                 :          0 :         raw_inode->i_file_acl = cpu_to_le32(ei->i_file_acl);
    3142         [ #  # ]:          0 :         if (!S_ISREG(inode->i_mode)) {
    3143                 :          0 :                 raw_inode->i_dir_acl = cpu_to_le32(ei->i_dir_acl);
    3144                 :            :         } else {
    3145                 :          0 :                 disksize = cpu_to_le32(ei->i_disksize >> 32);
    3146         [ #  # ]:          0 :                 if (disksize != raw_inode->i_size_high) {
    3147                 :          0 :                         raw_inode->i_size_high = disksize;
    3148                 :            :                         need_datasync = 1;
    3149                 :            :                 }
    3150         [ #  # ]:          0 :                 if (ei->i_disksize > 0x7fffffffULL) {
    3151                 :          0 :                         struct super_block *sb = inode->i_sb;
    3152         [ #  # ]:          0 :                         if (!EXT3_HAS_RO_COMPAT_FEATURE(sb,
    3153         [ #  # ]:          0 :                                         EXT3_FEATURE_RO_COMPAT_LARGE_FILE) ||
    3154                 :          0 :                             EXT3_SB(sb)->s_es->s_rev_level ==
    3155                 :            :                                         cpu_to_le32(EXT3_GOOD_OLD_REV)) {
    3156                 :            :                                /* If this is the first large file
    3157                 :            :                                 * created, add a flag to the superblock.
    3158                 :            :                                 */
    3159                 :          0 :                                 unlock_buffer(bh);
    3160                 :          0 :                                 err = ext3_journal_get_write_access(handle,
    3161                 :            :                                                 EXT3_SB(sb)->s_sbh);
    3162         [ #  # ]:          0 :                                 if (err)
    3163                 :            :                                         goto out_brelse;
    3164                 :            : 
    3165                 :          0 :                                 ext3_update_dynamic_rev(sb);
    3166                 :          0 :                                 EXT3_SET_RO_COMPAT_FEATURE(sb,
    3167                 :            :                                         EXT3_FEATURE_RO_COMPAT_LARGE_FILE);
    3168                 :          0 :                                 handle->h_sync = 1;
    3169                 :          0 :                                 err = ext3_journal_dirty_metadata(handle,
    3170                 :            :                                                 EXT3_SB(sb)->s_sbh);
    3171                 :            :                                 /* get our lock and start over */
    3172                 :          0 :                                 goto again;
    3173                 :            :                         }
    3174                 :            :                 }
    3175                 :            :         }
    3176                 :          0 :         raw_inode->i_generation = cpu_to_le32(inode->i_generation);
    3177         [ #  # ]:          0 :         if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) {
    3178         [ #  # ]:          0 :                 if (old_valid_dev(inode->i_rdev)) {
    3179                 :          0 :                         raw_inode->i_block[0] =
    3180                 :          0 :                                 cpu_to_le32(old_encode_dev(inode->i_rdev));
    3181                 :          0 :                         raw_inode->i_block[1] = 0;
    3182                 :            :                 } else {
    3183                 :          0 :                         raw_inode->i_block[0] = 0;
    3184                 :          0 :                         raw_inode->i_block[1] =
    3185                 :          0 :                                 cpu_to_le32(new_encode_dev(inode->i_rdev));
    3186                 :          0 :                         raw_inode->i_block[2] = 0;
    3187                 :            :                 }
    3188         [ #  # ]:          0 :         } else for (block = 0; block < EXT3_N_BLOCKS; block++)
    3189                 :          0 :                 raw_inode->i_block[block] = ei->i_data[block];
    3190                 :            : 
    3191         [ #  # ]:          0 :         if (ei->i_extra_isize)
    3192                 :          0 :                 raw_inode->i_extra_isize = cpu_to_le16(ei->i_extra_isize);
    3193                 :            : 
    3194                 :            :         BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
    3195                 :          0 :         unlock_buffer(bh);
    3196                 :          0 :         rc = ext3_journal_dirty_metadata(handle, bh);
    3197         [ #  # ]:          0 :         if (!err)
    3198                 :            :                 err = rc;
    3199                 :            :         ext3_clear_inode_state(inode, EXT3_STATE_NEW);
    3200                 :            : 
    3201                 :          0 :         atomic_set(&ei->i_sync_tid, handle->h_transaction->t_tid);
    3202         [ #  # ]:          0 :         if (need_datasync)
    3203                 :          0 :                 atomic_set(&ei->i_datasync_tid, handle->h_transaction->t_tid);
    3204                 :            : out_brelse:
    3205                 :            :         brelse (bh);
    3206         [ #  # ]:          0 :         ext3_std_error(inode->i_sb, err);
    3207                 :          0 :         return err;
    3208                 :            : }
    3209                 :            : 
    3210                 :            : /*
    3211                 :            :  * ext3_write_inode()
    3212                 :            :  *
    3213                 :            :  * We are called from a few places:
    3214                 :            :  *
    3215                 :            :  * - Within generic_file_write() for O_SYNC files.
    3216                 :            :  *   Here, there will be no transaction running. We wait for any running
    3217                 :            :  *   transaction to commit.
    3218                 :            :  *
    3219                 :            :  * - Within sys_sync(), kupdate and such.
    3220                 :            :  *   We wait on commit, if tol to.
    3221                 :            :  *
    3222                 :            :  * - Within prune_icache() (PF_MEMALLOC == true)
    3223                 :            :  *   Here we simply return.  We can't afford to block kswapd on the
    3224                 :            :  *   journal commit.
    3225                 :            :  *
    3226                 :            :  * In all cases it is actually safe for us to return without doing anything,
    3227                 :            :  * because the inode has been copied into a raw inode buffer in
    3228                 :            :  * ext3_mark_inode_dirty().  This is a correctness thing for O_SYNC and for
    3229                 :            :  * knfsd.
    3230                 :            :  *
    3231                 :            :  * Note that we are absolutely dependent upon all inode dirtiers doing the
    3232                 :            :  * right thing: they *must* call mark_inode_dirty() after dirtying info in
    3233                 :            :  * which we are interested.
    3234                 :            :  *
    3235                 :            :  * It would be a bug for them to not do this.  The code:
    3236                 :            :  *
    3237                 :            :  *      mark_inode_dirty(inode)
    3238                 :            :  *      stuff();
    3239                 :            :  *      inode->i_size = expr;
    3240                 :            :  *
    3241                 :            :  * is in error because a kswapd-driven write_inode() could occur while
    3242                 :            :  * `stuff()' is running, and the new i_size will be lost.  Plus the inode
    3243                 :            :  * will no longer be on the superblock's dirty inode list.
    3244                 :            :  */
    3245                 :          0 : int ext3_write_inode(struct inode *inode, struct writeback_control *wbc)
    3246                 :            : {
    3247         [ #  # ]:          0 :         if (current->flags & PF_MEMALLOC)
    3248                 :            :                 return 0;
    3249                 :            : 
    3250         [ #  # ]:          0 :         if (ext3_journal_current_handle()) {
    3251                 :            :                 jbd_debug(1, "called recursively, non-PF_MEMALLOC!\n");
    3252                 :          0 :                 dump_stack();
    3253                 :          0 :                 return -EIO;
    3254                 :            :         }
    3255                 :            : 
    3256         [ #  # ]:          0 :         if (wbc->sync_mode != WB_SYNC_ALL)
    3257                 :            :                 return 0;
    3258                 :            : 
    3259                 :          0 :         return ext3_force_commit(inode->i_sb);
    3260                 :            : }
    3261                 :            : 
    3262                 :            : /*
    3263                 :            :  * ext3_setattr()
    3264                 :            :  *
    3265                 :            :  * Called from notify_change.
    3266                 :            :  *
    3267                 :            :  * We want to trap VFS attempts to truncate the file as soon as
    3268                 :            :  * possible.  In particular, we want to make sure that when the VFS
    3269                 :            :  * shrinks i_size, we put the inode on the orphan list and modify
    3270                 :            :  * i_disksize immediately, so that during the subsequent flushing of
    3271                 :            :  * dirty pages and freeing of disk blocks, we can guarantee that any
    3272                 :            :  * commit will leave the blocks being flushed in an unused state on
    3273                 :            :  * disk.  (On recovery, the inode will get truncated and the blocks will
    3274                 :            :  * be freed, so we have a strong guarantee that no future commit will
    3275                 :            :  * leave these blocks visible to the user.)
    3276                 :            :  *
    3277                 :            :  * Called with inode->sem down.
    3278                 :            :  */
    3279                 :          0 : int ext3_setattr(struct dentry *dentry, struct iattr *attr)
    3280                 :            : {
    3281                 :          0 :         struct inode *inode = dentry->d_inode;
    3282                 :            :         int error, rc = 0;
    3283                 :          0 :         const unsigned int ia_valid = attr->ia_valid;
    3284                 :            : 
    3285                 :          0 :         error = inode_change_ok(inode, attr);
    3286         [ #  # ]:          0 :         if (error)
    3287                 :            :                 return error;
    3288                 :            : 
    3289         [ #  # ]:          0 :         if (is_quota_modification(inode, attr))
    3290                 :          0 :                 dquot_initialize(inode);
    3291 [ #  # ][ #  # ]:          0 :         if ((ia_valid & ATTR_UID && !uid_eq(attr->ia_uid, inode->i_uid)) ||
                 [ #  # ]
    3292         [ #  # ]:          0 :             (ia_valid & ATTR_GID && !gid_eq(attr->ia_gid, inode->i_gid))) {
    3293                 :            :                 handle_t *handle;
    3294                 :            : 
    3295                 :            :                 /* (user+group)*(old+new) structure, inode write (sb,
    3296                 :            :                  * inode block, ? - but truncate inode update has it) */
    3297         [ #  # ]:          0 :                 handle = ext3_journal_start(inode, EXT3_MAXQUOTAS_INIT_BLOCKS(inode->i_sb)+
    3298         [ #  # ]:          0 :                                         EXT3_MAXQUOTAS_DEL_BLOCKS(inode->i_sb)+3);
    3299         [ #  # ]:          0 :                 if (IS_ERR(handle)) {
    3300                 :            :                         error = PTR_ERR(handle);
    3301                 :          0 :                         goto err_out;
    3302                 :            :                 }
    3303                 :          0 :                 error = dquot_transfer(inode, attr);
    3304         [ #  # ]:          0 :                 if (error) {
    3305                 :          0 :                         ext3_journal_stop(handle);
    3306                 :          0 :                         return error;
    3307                 :            :                 }
    3308                 :            :                 /* Update corresponding info in inode so that everything is in
    3309                 :            :                  * one transaction */
    3310         [ #  # ]:          0 :                 if (attr->ia_valid & ATTR_UID)
    3311                 :          0 :                         inode->i_uid = attr->ia_uid;
    3312         [ #  # ]:          0 :                 if (attr->ia_valid & ATTR_GID)
    3313                 :          0 :                         inode->i_gid = attr->ia_gid;
    3314                 :          0 :                 error = ext3_mark_inode_dirty(handle, inode);
    3315                 :          0 :                 ext3_journal_stop(handle);
    3316                 :            :         }
    3317                 :            : 
    3318         [ #  # ]:          0 :         if (attr->ia_valid & ATTR_SIZE)
    3319                 :          0 :                 inode_dio_wait(inode);
    3320                 :            : 
    3321 [ #  # ][ #  # ]:          0 :         if (S_ISREG(inode->i_mode) &&
    3322         [ #  # ]:          0 :             attr->ia_valid & ATTR_SIZE && attr->ia_size < inode->i_size) {
    3323                 :            :                 handle_t *handle;
    3324                 :            : 
    3325                 :            :                 handle = ext3_journal_start(inode, 3);
    3326         [ #  # ]:          0 :                 if (IS_ERR(handle)) {
    3327                 :            :                         error = PTR_ERR(handle);
    3328                 :          0 :                         goto err_out;
    3329                 :            :                 }
    3330                 :            : 
    3331                 :          0 :                 error = ext3_orphan_add(handle, inode);
    3332         [ #  # ]:          0 :                 if (error) {
    3333                 :          0 :                         ext3_journal_stop(handle);
    3334                 :          0 :                         goto err_out;
    3335                 :            :                 }
    3336                 :          0 :                 EXT3_I(inode)->i_disksize = attr->ia_size;
    3337                 :          0 :                 error = ext3_mark_inode_dirty(handle, inode);
    3338                 :          0 :                 ext3_journal_stop(handle);
    3339         [ #  # ]:          0 :                 if (error) {
    3340                 :            :                         /* Some hard fs error must have happened. Bail out. */
    3341                 :          0 :                         ext3_orphan_del(NULL, inode);
    3342                 :          0 :                         goto err_out;
    3343                 :            :                 }
    3344                 :          0 :                 rc = ext3_block_truncate_page(inode, attr->ia_size);
    3345         [ #  # ]:          0 :                 if (rc) {
    3346                 :            :                         /* Cleanup orphan list and exit */
    3347                 :            :                         handle = ext3_journal_start(inode, 3);
    3348         [ #  # ]:          0 :                         if (IS_ERR(handle)) {
    3349                 :          0 :                                 ext3_orphan_del(NULL, inode);
    3350                 :          0 :                                 goto err_out;
    3351                 :            :                         }
    3352                 :          0 :                         ext3_orphan_del(handle, inode);
    3353                 :          0 :                         ext3_journal_stop(handle);
    3354                 :          0 :                         goto err_out;
    3355                 :            :                 }
    3356                 :            :         }
    3357                 :            : 
    3358 [ #  # ][ #  # ]:          0 :         if ((attr->ia_valid & ATTR_SIZE) &&
    3359                 :          0 :             attr->ia_size != i_size_read(inode)) {
    3360                 :          0 :                 truncate_setsize(inode, attr->ia_size);
    3361                 :          0 :                 ext3_truncate(inode);
    3362                 :            :         }
    3363                 :            : 
    3364                 :          0 :         setattr_copy(inode, attr);
    3365                 :            :         mark_inode_dirty(inode);
    3366                 :            : 
    3367         [ #  # ]:          0 :         if (ia_valid & ATTR_MODE)
    3368                 :            :                 rc = ext3_acl_chmod(inode);
    3369                 :            : 
    3370                 :            : err_out:
    3371         [ #  # ]:          0 :         ext3_std_error(inode->i_sb, error);
    3372         [ #  # ]:          0 :         if (!error)
    3373                 :            :                 error = rc;
    3374                 :          0 :         return error;
    3375                 :            : }
    3376                 :            : 
    3377                 :            : 
    3378                 :            : /*
    3379                 :            :  * How many blocks doth make a writepage()?
    3380                 :            :  *
    3381                 :            :  * With N blocks per page, it may be:
    3382                 :            :  * N data blocks
    3383                 :            :  * 2 indirect block
    3384                 :            :  * 2 dindirect
    3385                 :            :  * 1 tindirect
    3386                 :            :  * N+5 bitmap blocks (from the above)
    3387                 :            :  * N+5 group descriptor summary blocks
    3388                 :            :  * 1 inode block
    3389                 :            :  * 1 superblock.
    3390                 :            :  * 2 * EXT3_SINGLEDATA_TRANS_BLOCKS for the quote files
    3391                 :            :  *
    3392                 :            :  * 3 * (N + 5) + 2 + 2 * EXT3_SINGLEDATA_TRANS_BLOCKS
    3393                 :            :  *
    3394                 :            :  * With ordered or writeback data it's the same, less the N data blocks.
    3395                 :            :  *
    3396                 :            :  * If the inode's direct blocks can hold an integral number of pages then a
    3397                 :            :  * page cannot straddle two indirect blocks, and we can only touch one indirect
    3398                 :            :  * and dindirect block, and the "5" above becomes "3".
    3399                 :            :  *
    3400                 :            :  * This still overestimates under most circumstances.  If we were to pass the
    3401                 :            :  * start and end offsets in here as well we could do block_to_path() on each
    3402                 :            :  * block and work out the exact number of indirects which are touched.  Pah.
    3403                 :            :  */
    3404                 :            : 
    3405                 :          0 : static int ext3_writepage_trans_blocks(struct inode *inode)
    3406                 :            : {
    3407                 :            :         int bpp = ext3_journal_blocks_per_page(inode);
    3408         [ #  # ]:          0 :         int indirects = (EXT3_NDIR_BLOCKS % bpp) ? 5 : 3;
    3409                 :            :         int ret;
    3410                 :            : 
    3411         [ #  # ]:          0 :         if (ext3_should_journal_data(inode))
    3412                 :          0 :                 ret = 3 * (bpp + indirects) + 2;
    3413                 :            :         else
    3414                 :          0 :                 ret = 2 * (bpp + indirects) + indirects + 2;
    3415                 :            : 
    3416                 :            : #ifdef CONFIG_QUOTA
    3417                 :            :         /* We know that structure was already allocated during dquot_initialize so
    3418                 :            :          * we will be updating only the data blocks + inodes */
    3419         [ #  # ]:          0 :         ret += EXT3_MAXQUOTAS_TRANS_BLOCKS(inode->i_sb);
    3420                 :            : #endif
    3421                 :            : 
    3422                 :          0 :         return ret;
    3423                 :            : }
    3424                 :            : 
    3425                 :            : /*
    3426                 :            :  * The caller must have previously called ext3_reserve_inode_write().
    3427                 :            :  * Give this, we know that the caller already has write access to iloc->bh.
    3428                 :            :  */
    3429                 :          0 : int ext3_mark_iloc_dirty(handle_t *handle,
    3430                 :            :                 struct inode *inode, struct ext3_iloc *iloc)
    3431                 :            : {
    3432                 :            :         int err = 0;
    3433                 :            : 
    3434                 :            :         /* the do_update_inode consumes one bh->b_count */
    3435                 :          0 :         get_bh(iloc->bh);
    3436                 :            : 
    3437                 :            :         /* ext3_do_update_inode() does journal_dirty_metadata */
    3438                 :          0 :         err = ext3_do_update_inode(handle, inode, iloc);
    3439                 :          0 :         put_bh(iloc->bh);
    3440                 :          0 :         return err;
    3441                 :            : }
    3442                 :            : 
    3443                 :            : /*
    3444                 :            :  * On success, We end up with an outstanding reference count against
    3445                 :            :  * iloc->bh.  This _must_ be cleaned up later.
    3446                 :            :  */
    3447                 :            : 
    3448                 :            : int
    3449                 :          0 : ext3_reserve_inode_write(handle_t *handle, struct inode *inode,
    3450                 :            :                          struct ext3_iloc *iloc)
    3451                 :            : {
    3452                 :            :         int err = 0;
    3453         [ #  # ]:          0 :         if (handle) {
    3454                 :            :                 err = ext3_get_inode_loc(inode, iloc);
    3455         [ #  # ]:          0 :                 if (!err) {
    3456                 :            :                         BUFFER_TRACE(iloc->bh, "get_write_access");
    3457                 :          0 :                         err = ext3_journal_get_write_access(handle, iloc->bh);
    3458         [ #  # ]:          0 :                         if (err) {
    3459                 :          0 :                                 brelse(iloc->bh);
    3460                 :          0 :                                 iloc->bh = NULL;
    3461                 :            :                         }
    3462                 :            :                 }
    3463                 :            :         }
    3464         [ #  # ]:          0 :         ext3_std_error(inode->i_sb, err);
    3465                 :          0 :         return err;
    3466                 :            : }
    3467                 :            : 
    3468                 :            : /*
    3469                 :            :  * What we do here is to mark the in-core inode as clean with respect to inode
    3470                 :            :  * dirtiness (it may still be data-dirty).
    3471                 :            :  * This means that the in-core inode may be reaped by prune_icache
    3472                 :            :  * without having to perform any I/O.  This is a very good thing,
    3473                 :            :  * because *any* task may call prune_icache - even ones which
    3474                 :            :  * have a transaction open against a different journal.
    3475                 :            :  *
    3476                 :            :  * Is this cheating?  Not really.  Sure, we haven't written the
    3477                 :            :  * inode out, but prune_icache isn't a user-visible syncing function.
    3478                 :            :  * Whenever the user wants stuff synced (sys_sync, sys_msync, sys_fsync)
    3479                 :            :  * we start and wait on commits.
    3480                 :            :  */
    3481                 :          0 : int ext3_mark_inode_dirty(handle_t *handle, struct inode *inode)
    3482                 :            : {
    3483                 :            :         struct ext3_iloc iloc;
    3484                 :            :         int err;
    3485                 :            : 
    3486                 :            :         might_sleep();
    3487                 :          0 :         trace_ext3_mark_inode_dirty(inode, _RET_IP_);
    3488                 :          0 :         err = ext3_reserve_inode_write(handle, inode, &iloc);
    3489         [ #  # ]:          0 :         if (!err)
    3490                 :          0 :                 err = ext3_mark_iloc_dirty(handle, inode, &iloc);
    3491                 :          0 :         return err;
    3492                 :            : }
    3493                 :            : 
    3494                 :            : /*
    3495                 :            :  * ext3_dirty_inode() is called from __mark_inode_dirty()
    3496                 :            :  *
    3497                 :            :  * We're really interested in the case where a file is being extended.
    3498                 :            :  * i_size has been changed by generic_commit_write() and we thus need
    3499                 :            :  * to include the updated inode in the current transaction.
    3500                 :            :  *
    3501                 :            :  * Also, dquot_alloc_space() will always dirty the inode when blocks
    3502                 :            :  * are allocated to the file.
    3503                 :            :  *
    3504                 :            :  * If the inode is marked synchronous, we don't honour that here - doing
    3505                 :            :  * so would cause a commit on atime updates, which we don't bother doing.
    3506                 :            :  * We handle synchronous inodes at the highest possible level.
    3507                 :            :  */
    3508                 :          0 : void ext3_dirty_inode(struct inode *inode, int flags)
    3509                 :            : {
    3510                 :            :         handle_t *current_handle = ext3_journal_current_handle();
    3511                 :            :         handle_t *handle;
    3512                 :            : 
    3513                 :            :         handle = ext3_journal_start(inode, 2);
    3514         [ #  # ]:          0 :         if (IS_ERR(handle))
    3515                 :            :                 goto out;
    3516 [ #  # ][ #  # ]:          0 :         if (current_handle &&
    3517                 :          0 :                 current_handle->h_transaction != handle->h_transaction) {
    3518                 :            :                 /* This task has a transaction open against a different fs */
    3519                 :          0 :                 printk(KERN_EMERG "%s: transactions do not match!\n",
    3520                 :            :                        __func__);
    3521                 :            :         } else {
    3522                 :            :                 jbd_debug(5, "marking dirty.  outer handle=%p\n",
    3523                 :            :                                 current_handle);
    3524                 :          0 :                 ext3_mark_inode_dirty(handle, inode);
    3525                 :            :         }
    3526                 :          0 :         ext3_journal_stop(handle);
    3527                 :            : out:
    3528                 :          0 :         return;
    3529                 :            : }
    3530                 :            : 
    3531                 :            : #if 0
    3532                 :            : /*
    3533                 :            :  * Bind an inode's backing buffer_head into this transaction, to prevent
    3534                 :            :  * it from being flushed to disk early.  Unlike
    3535                 :            :  * ext3_reserve_inode_write, this leaves behind no bh reference and
    3536                 :            :  * returns no iloc structure, so the caller needs to repeat the iloc
    3537                 :            :  * lookup to mark the inode dirty later.
    3538                 :            :  */
    3539                 :            : static int ext3_pin_inode(handle_t *handle, struct inode *inode)
    3540                 :            : {
    3541                 :            :         struct ext3_iloc iloc;
    3542                 :            : 
    3543                 :            :         int err = 0;
    3544                 :            :         if (handle) {
    3545                 :            :                 err = ext3_get_inode_loc(inode, &iloc);
    3546                 :            :                 if (!err) {
    3547                 :            :                         BUFFER_TRACE(iloc.bh, "get_write_access");
    3548                 :            :                         err = journal_get_write_access(handle, iloc.bh);
    3549                 :            :                         if (!err)
    3550                 :            :                                 err = ext3_journal_dirty_metadata(handle,
    3551                 :            :                                                                   iloc.bh);
    3552                 :            :                         brelse(iloc.bh);
    3553                 :            :                 }
    3554                 :            :         }
    3555                 :            :         ext3_std_error(inode->i_sb, err);
    3556                 :            :         return err;
    3557                 :            : }
    3558                 :            : #endif
    3559                 :            : 
    3560                 :          0 : int ext3_change_inode_journal_flag(struct inode *inode, int val)
    3561                 :            : {
    3562                 :          0 :         journal_t *journal;
    3563                 :            :         handle_t *handle;
    3564                 :            :         int err;
    3565                 :            : 
    3566                 :            :         /*
    3567                 :            :          * We have to be very careful here: changing a data block's
    3568                 :            :          * journaling status dynamically is dangerous.  If we write a
    3569                 :            :          * data block to the journal, change the status and then delete
    3570                 :            :          * that block, we risk forgetting to revoke the old log record
    3571                 :            :          * from the journal and so a subsequent replay can corrupt data.
    3572                 :            :          * So, first we make sure that the journal is empty and that
    3573                 :            :          * nobody is changing anything.
    3574                 :            :          */
    3575                 :            : 
    3576                 :          0 :         journal = EXT3_JOURNAL(inode);
    3577         [ #  # ]:          0 :         if (is_journal_aborted(journal))
    3578                 :            :                 return -EROFS;
    3579                 :            : 
    3580                 :          0 :         journal_lock_updates(journal);
    3581                 :          0 :         journal_flush(journal);
    3582                 :            : 
    3583                 :            :         /*
    3584                 :            :          * OK, there are no updates running now, and all cached data is
    3585                 :            :          * synced to disk.  We are now in a completely consistent state
    3586                 :            :          * which doesn't have anything in the journal, and we know that
    3587                 :            :          * no filesystem updates are running, so it is safe to modify
    3588                 :            :          * the inode's in-core data-journaling state flag now.
    3589                 :            :          */
    3590                 :            : 
    3591         [ #  # ]:          0 :         if (val)
    3592                 :          0 :                 EXT3_I(inode)->i_flags |= EXT3_JOURNAL_DATA_FL;
    3593                 :            :         else
    3594                 :          0 :                 EXT3_I(inode)->i_flags &= ~EXT3_JOURNAL_DATA_FL;
    3595                 :          0 :         ext3_set_aops(inode);
    3596                 :            : 
    3597                 :          0 :         journal_unlock_updates(journal);
    3598                 :            : 
    3599                 :            :         /* Finally we can mark the inode as dirty. */
    3600                 :            : 
    3601                 :            :         handle = ext3_journal_start(inode, 1);
    3602         [ #  # ]:          0 :         if (IS_ERR(handle))
    3603                 :          0 :                 return PTR_ERR(handle);
    3604                 :            : 
    3605                 :          0 :         err = ext3_mark_inode_dirty(handle, inode);
    3606                 :          0 :         handle->h_sync = 1;
    3607                 :          0 :         ext3_journal_stop(handle);
    3608         [ #  # ]:          0 :         ext3_std_error(inode->i_sb, err);
    3609                 :            : 
    3610                 :          0 :         return err;
    3611                 :            : }

Generated by: LCOV version 1.9