~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/btrfs/btrfs_inode.h

Version: ~ [ linux-5.2-rc1 ] ~ [ linux-5.1.2 ] ~ [ linux-5.0.16 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.43 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.119 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.176 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.179 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.139 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.67 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.39.4 ] ~ [ linux-2.6.38.8 ] ~ [ linux-2.6.37.6 ] ~ [ linux-2.6.36.4 ] ~ [ linux-2.6.35.14 ] ~ [ linux-2.6.34.15 ] ~ [ linux-2.6.33.20 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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_I__
 20 #define __BTRFS_I__
 21 
 22 #include "extent_map.h"
 23 #include "extent_io.h"
 24 #include "ordered-data.h"
 25 
 26 /* in memory btrfs inode */
 27 struct btrfs_inode {
 28         /* which subvolume this inode belongs to */
 29         struct btrfs_root *root;
 30 
 31         /* key used to find this inode on disk.  This is used by the code
 32          * to read in roots of subvolumes
 33          */
 34         struct btrfs_key location;
 35 
 36         /* the extent_tree has caches of all the extent mappings to disk */
 37         struct extent_map_tree extent_tree;
 38 
 39         /* the io_tree does range state (DIRTY, LOCKED etc) */
 40         struct extent_io_tree io_tree;
 41 
 42         /* special utility tree used to record which mirrors have already been
 43          * tried when checksums fail for a given block
 44          */
 45         struct extent_io_tree io_failure_tree;
 46 
 47         /* held while logging the inode in tree-log.c */
 48         struct mutex log_mutex;
 49 
 50         /* used to order data wrt metadata */
 51         struct btrfs_ordered_inode_tree ordered_tree;
 52 
 53         /* for keeping track of orphaned inodes */
 54         struct list_head i_orphan;
 55 
 56         /* list of all the delalloc inodes in the FS.  There are times we need
 57          * to write all the delalloc pages to disk, and this list is used
 58          * to walk them all.
 59          */
 60         struct list_head delalloc_inodes;
 61 
 62         /*
 63          * list for tracking inodes that must be sent to disk before a
 64          * rename or truncate commit
 65          */
 66         struct list_head ordered_operations;
 67 
 68         /* node for the red-black tree that links inodes in subvolume root */
 69         struct rb_node rb_node;
 70 
 71         /* the space_info for where this inode's data allocations are done */
 72         struct btrfs_space_info *space_info;
 73 
 74         /* full 64 bit generation number, struct vfs_inode doesn't have a big
 75          * enough field for this.
 76          */
 77         u64 generation;
 78 
 79         /* sequence number for NFS changes */
 80         u64 sequence;
 81 
 82         /*
 83          * transid of the trans_handle that last modified this inode
 84          */
 85         u64 last_trans;
 86 
 87         /*
 88          * log transid when this inode was last modified
 89          */
 90         u64 last_sub_trans;
 91 
 92         /*
 93          * transid that last logged this inode
 94          */
 95         u64 logged_trans;
 96 
 97         /* total number of bytes pending delalloc, used by stat to calc the
 98          * real block usage of the file
 99          */
100         u64 delalloc_bytes;
101 
102         /* total number of bytes that may be used for this inode for
103          * delalloc
104          */
105         u64 reserved_bytes;
106 
107         /*
108          * the size of the file stored in the metadata on disk.  data=ordered
109          * means the in-memory i_size might be larger than the size on disk
110          * because not all the blocks are written yet.
111          */
112         u64 disk_i_size;
113 
114         /* flags field from the on disk inode */
115         u32 flags;
116 
117         /*
118          * if this is a directory then index_cnt is the counter for the index
119          * number for new files that are created
120          */
121         u64 index_cnt;
122 
123         /* the start of block group preferred for allocations. */
124         u64 block_group;
125 
126         /* the fsync log has some corner cases that mean we have to check
127          * directories to see if any unlinks have been done before
128          * the directory was logged.  See tree-log.c for all the
129          * details
130          */
131         u64 last_unlink_trans;
132 
133         /*
134          * Counters to keep track of the number of extent item's we may use due
135          * to delalloc and such.  outstanding_extents is the number of extent
136          * items we think we'll end up using, and reserved_extents is the number
137          * of extent items we've reserved metadata for.
138          */
139         atomic_t outstanding_extents;
140         atomic_t reserved_extents;
141 
142         /*
143          * ordered_data_close is set by truncate when a file that used
144          * to have good data has been truncated to zero.  When it is set
145          * the btrfs file release call will add this inode to the
146          * ordered operations list so that we make sure to flush out any
147          * new data the application may have written before commit.
148          *
149          * yes, its silly to have a single bitflag, but we might grow more
150          * of these.
151          */
152         unsigned ordered_data_close:1;
153         unsigned orphan_meta_reserved:1;
154         unsigned dummy_inode:1;
155 
156         /*
157          * always compress this one file
158          */
159         unsigned force_compress:4;
160 
161         struct inode vfs_inode;
162 };
163 
164 static inline struct btrfs_inode *BTRFS_I(struct inode *inode)
165 {
166         return container_of(inode, struct btrfs_inode, vfs_inode);
167 }
168 
169 static inline void btrfs_i_size_write(struct inode *inode, u64 size)
170 {
171         i_size_write(inode, size);
172         BTRFS_I(inode)->disk_i_size = size;
173 }
174 
175 #endif
176 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp