/* which subvolume this inode belongs to */
struct btrfs_root *root;
- /* the block group preferred for allocations. This pointer is buggy
- * and needs to be replaced with a bytenr instead
- */
- struct btrfs_block_group_cache *block_group;
-
/* key used to find this inode on disk. This is used by the code
* to read in roots of subvolumes
*/
*/
struct extent_io_tree io_failure_tree;
- /* held while inserting checksums to avoid races */
- struct mutex csum_mutex;
-
/* held while inesrting or deleting extents from files */
struct mutex extent_mutex;
*/
struct list_head delalloc_inodes;
+ /*
+ * list for tracking inodes that must be sent to disk before a
+ * rename or truncate commit
+ */
+ struct list_head ordered_operations;
+
+ /* the space_info for where this inode's data allocations are done */
+ struct btrfs_space_info *space_info;
+
/* full 64 bit generation number, struct vfs_inode doesn't have a big
* enough field for this.
*/
u64 generation;
+ /* sequence number for NFS changes */
+ u64 sequence;
+
/*
* transid of the trans_handle that last modified this inode
*/
*/
u64 logged_trans;
- /*
- * trans that last made a change that should be fully fsync'd. This
- * gets reset to zero each time the inode is logged
- */
- u64 log_dirty_trans;
-
/* total number of bytes pending delalloc, used by stat to calc the
* real block usage of the file
*/
u64 delalloc_bytes;
+ /* total number of bytes that may be used for this inode for
+ * delalloc
+ */
+ u64 reserved_bytes;
+
/*
* the size of the file stored in the metadata on disk. data=ordered
* means the in-memory i_size might be larger than the size on disk
*/
u64 index_cnt;
+ /* the start of block group preferred for allocations. */
+ u64 block_group;
+
+ /* the fsync log has some corner cases that mean we have to check
+ * directories to see if any unlinks have been done before
+ * the directory was logged. See tree-log.c for all the
+ * details
+ */
+ u64 last_unlink_trans;
+
+ /*
+ * ordered_data_close is set by truncate when a file that used
+ * to have good data has been truncated to zero. When it is set
+ * the btrfs file release call will add this inode to the
+ * ordered operations list so that we make sure to flush out any
+ * new data the application may have written before commit.
+ *
+ * yes, its silly to have a single bitflag, but we might grow more
+ * of these.
+ */
+ unsigned ordered_data_close:1;
+
struct inode vfs_inode;
};