linux/fs/ext4/ext4_jbd2.c
<<
>>
Prefs
   1/*
   2 * Interface between ext4 and JBD
   3 */
   4
   5#include "ext4_jbd2.h"
   6
   7int __ext4_journal_get_undo_access(const char *where, handle_t *handle,
   8                                struct buffer_head *bh)
   9{
  10        int err = 0;
  11
  12        if (ext4_handle_valid(handle)) {
  13                err = jbd2_journal_get_undo_access(handle, bh);
  14                if (err)
  15                        ext4_journal_abort_handle(where, __func__, bh,
  16                                                  handle, err);
  17        }
  18        return err;
  19}
  20
  21int __ext4_journal_get_write_access(const char *where, handle_t *handle,
  22                                struct buffer_head *bh)
  23{
  24        int err = 0;
  25
  26        if (ext4_handle_valid(handle)) {
  27                err = jbd2_journal_get_write_access(handle, bh);
  28                if (err)
  29                        ext4_journal_abort_handle(where, __func__, bh,
  30                                                  handle, err);
  31        }
  32        return err;
  33}
  34
  35int __ext4_journal_forget(const char *where, handle_t *handle,
  36                                struct buffer_head *bh)
  37{
  38        int err = 0;
  39
  40        if (ext4_handle_valid(handle)) {
  41                err = jbd2_journal_forget(handle, bh);
  42                if (err)
  43                        ext4_journal_abort_handle(where, __func__, bh,
  44                                                  handle, err);
  45        }
  46        else
  47                bforget(bh);
  48        return err;
  49}
  50
  51int __ext4_journal_revoke(const char *where, handle_t *handle,
  52                                ext4_fsblk_t blocknr, struct buffer_head *bh)
  53{
  54        int err = 0;
  55
  56        if (ext4_handle_valid(handle)) {
  57                err = jbd2_journal_revoke(handle, blocknr, bh);
  58                if (err)
  59                        ext4_journal_abort_handle(where, __func__, bh,
  60                                                  handle, err);
  61        }
  62        else
  63                bforget(bh);
  64        return err;
  65}
  66
  67int __ext4_journal_get_create_access(const char *where,
  68                                handle_t *handle, struct buffer_head *bh)
  69{
  70        int err = 0;
  71
  72        if (ext4_handle_valid(handle)) {
  73                err = jbd2_journal_get_create_access(handle, bh);
  74                if (err)
  75                        ext4_journal_abort_handle(where, __func__, bh,
  76                                                  handle, err);
  77        }
  78        return err;
  79}
  80
  81int __ext4_handle_dirty_metadata(const char *where, handle_t *handle,
  82                                 struct inode *inode, struct buffer_head *bh)
  83{
  84        int err = 0;
  85
  86        if (ext4_handle_valid(handle)) {
  87                err = jbd2_journal_dirty_metadata(handle, bh);
  88                if (err)
  89                        ext4_journal_abort_handle(where, __func__, bh,
  90                                                  handle, err);
  91        } else {
  92                if (inode && bh)
  93                        mark_buffer_dirty_inode(bh, inode);
  94                else
  95                        mark_buffer_dirty(bh);
  96                if (inode && inode_needs_sync(inode)) {
  97                        sync_dirty_buffer(bh);
  98                        if (buffer_req(bh) && !buffer_uptodate(bh)) {
  99                                ext4_error(inode->i_sb, __func__,
 100                                           "IO error syncing inode, "
 101                                           "inode=%lu, block=%llu",
 102                                           inode->i_ino,
 103                                           (unsigned long long) bh->b_blocknr);
 104                                err = -EIO;
 105                        }
 106                }
 107        }
 108        return err;
 109}
 110