linux/fs/btrfs/transaction.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2007 Oracle.  All rights reserved.
   3 *
   4 * This program is free software; you can redistribute it and/or
   5 * modify it under the terms of the GNU General Public
   6 * License v2 as published by the Free Software Foundation.
   7 *
   8 * This program is distributed in the hope that it will be useful,
   9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  11 * General Public License for more details.
  12 *
  13 * You should have received a copy of the GNU General Public
  14 * License along with this program; if not, write to the
  15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  16 * Boston, MA 021110-1307, USA.
  17 */
  18
  19#ifndef __BTRFS_TRANSACTION__
  20#define __BTRFS_TRANSACTION__
  21#include "btrfs_inode.h"
  22#include "delayed-ref.h"
  23
  24struct btrfs_transaction {
  25        u64 transid;
  26        /*
  27         * total writers in this transaction, it must be zero before the
  28         * transaction can end
  29         */
  30        unsigned long num_writers;
  31
  32        unsigned long num_joined;
  33        int in_commit;
  34        int use_count;
  35        int commit_done;
  36        int blocked;
  37        struct list_head list;
  38        struct extent_io_tree dirty_pages;
  39        unsigned long start_time;
  40        wait_queue_head_t writer_wait;
  41        wait_queue_head_t commit_wait;
  42        struct list_head pending_snapshots;
  43        struct btrfs_delayed_ref_root delayed_refs;
  44};
  45
  46struct btrfs_trans_handle {
  47        u64 transid;
  48        unsigned long blocks_reserved;
  49        unsigned long blocks_used;
  50        struct btrfs_transaction *transaction;
  51        u64 block_group;
  52        u64 alloc_exclude_start;
  53        u64 alloc_exclude_nr;
  54        unsigned long delayed_ref_updates;
  55};
  56
  57struct btrfs_pending_snapshot {
  58        struct dentry *dentry;
  59        struct btrfs_root *root;
  60        char *name;
  61        struct btrfs_key root_key;
  62        struct list_head list;
  63};
  64
  65struct btrfs_dirty_root {
  66        struct list_head list;
  67        struct btrfs_root *root;
  68        struct btrfs_root *latest_root;
  69};
  70
  71static inline void btrfs_set_trans_block_group(struct btrfs_trans_handle *trans,
  72                                               struct inode *inode)
  73{
  74        trans->block_group = BTRFS_I(inode)->block_group;
  75}
  76
  77static inline void btrfs_update_inode_block_group(
  78                                          struct btrfs_trans_handle *trans,
  79                                          struct inode *inode)
  80{
  81        BTRFS_I(inode)->block_group = trans->block_group;
  82}
  83
  84static inline void btrfs_set_inode_last_trans(struct btrfs_trans_handle *trans,
  85                                              struct inode *inode)
  86{
  87        BTRFS_I(inode)->last_trans = trans->transaction->transid;
  88}
  89
  90int btrfs_end_transaction(struct btrfs_trans_handle *trans,
  91                          struct btrfs_root *root);
  92struct btrfs_trans_handle *btrfs_start_transaction(struct btrfs_root *root,
  93                                                   int num_blocks);
  94struct btrfs_trans_handle *btrfs_join_transaction(struct btrfs_root *root,
  95                                                   int num_blocks);
  96struct btrfs_trans_handle *btrfs_start_ioctl_transaction(struct btrfs_root *r,
  97                                                   int num_blocks);
  98int btrfs_write_and_wait_transaction(struct btrfs_trans_handle *trans,
  99                                     struct btrfs_root *root);
 100int btrfs_commit_tree_roots(struct btrfs_trans_handle *trans,
 101                            struct btrfs_root *root);
 102
 103int btrfs_add_dead_root(struct btrfs_root *root, struct btrfs_root *latest);
 104int btrfs_defrag_root(struct btrfs_root *root, int cacheonly);
 105int btrfs_clean_old_snapshots(struct btrfs_root *root);
 106int btrfs_commit_transaction(struct btrfs_trans_handle *trans,
 107                             struct btrfs_root *root);
 108int btrfs_end_transaction_throttle(struct btrfs_trans_handle *trans,
 109                                   struct btrfs_root *root);
 110void btrfs_throttle(struct btrfs_root *root);
 111int btrfs_record_root_in_trans(struct btrfs_root *root);
 112int btrfs_write_and_wait_marked_extents(struct btrfs_root *root,
 113                                        struct extent_io_tree *dirty_pages);
 114#endif
 115
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.