#ifndef _REISER_FS_I
#define _REISER_FS_I

#include <linux/list.h>

/* these are used to keep track of the pages that need
** flushing before the current transaction can commit
*/
struct reiserfs_page_list ;

struct reiserfs_inode_info {
  __u32 i_key [4];/* key is still 4 32 bit integers */
  
				/* this comment will be totally
                                   cryptic to readers not familiar
                                   with 3.5/3.6 format conversion, and
                                   it does not consider that that 3.6
                                   might not be the last version */
  int i_version;  // this says whether file is old or new

  int i_pack_on_close ; // file might need tail packing on close 

  __u32 i_first_direct_byte; // offset of first byte stored in direct item.

  /* pointer to the page that must be flushed before 
  ** the current transaction can commit.
  **
  ** this pointer is only used when the tail is converted back into
  ** a direct item, or the file is deleted
  */
  struct reiserfs_page_list *i_converted_page ;

  /* we save the id of the transaction when we did the direct->indirect
  ** conversion.  That allows us to flush the buffers to disk
  ** without having to update this inode to zero out the converted
  ** page variable
  */
  int i_conversion_trans_id ;

				/* My guess is this contains the first
                                   unused block of a sequence of
                                   blocks plus the length of the
                                   sequence, which I think is always
                                   at least two at the time of the
                                   preallocation.  I really prefer
                                   allocate on flush conceptually.....

				   You know, it really annoys me when
				   code is this badly commented that I
				   have to guess what it does.
				   Neither I nor anyone else has time
				   for guessing what your
				   datastructures mean.  -Hans */
  //For preallocation
  int i_prealloc_block;
  int i_prealloc_count;
  struct list_head i_prealloc_list;	/* per-transaction list of inodes which
				 * have preallocated blocks */
				/* I regret that you think the below
                                   is a comment you should make.... -Hans */
  //nopack-attribute
  int nopack;
};


#endif
