#define OBD_FL_OBDMDEXISTS (1UL << 1)
#define OBD_INLINESZ 60
-#define OBD_OBDMDSZ 64
+#define OBD_OBDMDSZ 60
/* Note: 64-bit types are 64-bit aligned in structure */
struct obdo {
obd_id o_id;
obd_flag o_flags;
obd_flag o_obdflags;
obd_count o_nlink;
+ obd_count o_generation;
obd_flag o_valid; /* hot fields in this obdo */
char o_inline[OBD_INLINESZ];
char o_obdmd[OBD_OBDMDSZ];
};
#define OBD_MD_FLALL (~0UL)
-#define OBD_MD_FLID (1UL)
-#define OBD_MD_FLATIME (1UL<<1)
-#define OBD_MD_FLMTIME (1UL<<2)
-#define OBD_MD_FLCTIME (1UL<<3)
-#define OBD_MD_FLSIZE (1UL<<4)
-#define OBD_MD_FLBLOCKS (1UL<<5)
-#define OBD_MD_FLBLKSZ (1UL<<6)
-#define OBD_MD_FLMODE (1UL<<7)
-#define OBD_MD_FLUID (1UL<<8)
-#define OBD_MD_FLGID (1UL<<9)
-#define OBD_MD_FLFLAGS (1UL<<10)
-#define OBD_MD_FLOBDFLG (1UL<<11)
-#define OBD_MD_FLNLINK (1UL<<12)
-#define OBD_MD_FLINLINE (1UL<<13)
-#define OBD_MD_FLOBDMD (1UL<<14)
+#define OBD_MD_FLID (0x0001UL)
+#define OBD_MD_FLATIME (0x0002UL)
+#define OBD_MD_FLMTIME (0x0004UL)
+#define OBD_MD_FLCTIME (0x0008UL)
+#define OBD_MD_FLSIZE (0x0010UL)
+#define OBD_MD_FLBLOCKS (0x0020UL)
+#define OBD_MD_FLBLKSZ (0x0040UL)
+#define OBD_MD_FLMODE (0x0080UL)
+#define OBD_MD_FLUID (0x0100UL)
+#define OBD_MD_FLGID (0x0200UL)
+#define OBD_MD_FLFLAGS (0x0400UL)
+#define OBD_MD_FLOBDFLG (0x0800UL)
+#define OBD_MD_FLNLINK (0x1000UL)
+#define OBD_MD_FLGENER (0x2000UL)
+#define OBD_MD_FLINLINE (0x4000UL)
+#define OBD_MD_FLOBDMD (0x8000UL)
/*
* ======== OBD Device Declarations ===========
*/
extern int obd_init_obdo_cache(void);
+extern void obd_cleanup_obdo_cache(void);
static inline int obdo_has_inline(struct obdo *obdo)
static __inline__ void obdo_cpy_md(struct obdo *dst, struct obdo *src)
{
- CDEBUG(D_INODE, "flags %x\n", src->o_valid);
+ CDEBUG(D_INODE, "flags 0x%x\n", src->o_valid);
if ( src->o_valid & OBD_MD_FLATIME )
dst->o_atime = src->o_atime;
if ( src->o_valid & OBD_MD_FLMTIME )
dst->o_obdflags = src->o_obdflags;
if ( src->o_valid & OBD_MD_FLNLINK )
dst->o_nlink = src->o_nlink;
+ if ( src->o_valid & OBD_MD_FLGENER )
+ dst->o_generation = src->o_generation;
if ( src->o_valid & OBD_MD_FLINLINE )
memcpy(dst->o_inline, src->o_inline, sizeof(src->o_inline));
if ( src->o_valid & OBD_MD_FLOBDMD )
dst->o_gid = src->i_gid;
if ( dst->o_valid & OBD_MD_FLFLAGS )
dst->o_flags = src->i_flags;
+ if ( dst->o_valid & OBD_MD_FLNLINK )
+ dst->o_nlink = src->i_nlink;
+ if ( dst->o_valid & OBD_MD_FLGENER )
+ dst->o_generation = src->i_generation;
}
static __inline__ void obdo_to_inode(struct inode *dst, struct obdo *src)
dst->i_mtime = src->o_mtime;
if ( src->o_valid & OBD_MD_FLCTIME )
dst->i_ctime = src->o_ctime;
+ if ( src->o_valid & OBD_MD_FLSIZE )
+ dst->i_size = src->o_size;
if ( src->o_valid & OBD_MD_FLBLOCKS ) /* allocation of space */
dst->i_blocks = src->o_blocks;
if ( src->o_valid & OBD_MD_FLBLKSZ )
dst->i_uid = src->o_uid;
if ( src->o_valid & OBD_MD_FLGID )
dst->i_gid = src->o_gid;
- if ( src->o_valid & OBD_MD_FLSIZE )
- dst->i_size = src->o_size;
if ( src->o_valid & OBD_MD_FLFLAGS )
dst->i_flags = src->o_flags;
+ if ( src->o_valid & OBD_MD_FLNLINK )
+ dst->i_nlink = src->o_nlink;
+ if ( src->o_valid & OBD_MD_FLGENER )
+ dst->i_generation = src->o_generation;
}
static __inline__ int obdo_cmp_md(struct obdo *dst, struct obdo *src)