Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
all: significant overhaul by Peter to avoid problems with OBD metadata
[fs/lustre-release.git]
/
lustre
/
include
/
linux
/
obd_class.h
diff --git
a/lustre/include/linux/obd_class.h
b/lustre/include/linux/obd_class.h
index
4dec562
..
259d031
100644
(file)
--- a/
lustre/include/linux/obd_class.h
+++ b/
lustre/include/linux/obd_class.h
@@
-222,6
+222,7
@@
static __inline__ obdattr *obd_empty_oa(void)
{
obdattr *res = NULL;
OBD_ALLOC(res, obdattr *, sizeof(*res));
+ memset(res, 0, sizeof (*res));
return res;
}
@@
-239,32
+240,102
@@
static __inline__ obdattr *obd_oa_fromid(struct obd_conn *conn, objid id)
obdattr *res = NULL;
OBD_ALLOC(res, obdattr *, sizeof(*res));
- if ( !res )
+ if ( !res ) {
+ EXIT;
return NULL;
+ }
memset(res, 0, sizeof(*res));
res->i_ino = id;
if (conn->oc_dev->obd_type->typ_ops->o_getattr(conn, res)) {
OBD_FREE(res, sizeof(*res));
+ EXIT;
return NULL;
}
-
+ EXIT;
+ return res;
+}
+
+#define OBD_MD_FLMODE (1UL<<1)
+#define OBD_MD_FLUID (1UL<<2)
+#define OBD_MD_FLGID (1UL<<3)
+#define OBD_MD_FLSIZE (1UL<<4)
+#define OBD_MD_FLATIME (1UL<<5)
+#define OBD_MD_FLMTIME (1UL<<6)
+#define OBD_MD_FLCTIME (1UL<<7)
+#define OBD_MD_FLFLAGS (1UL<<8)
+#define OBD_MD_FLBLOCKS (1UL<<9)
+#define OBD_MD_FLOBDMD (1UL<<10)
+
+
+static __inline__ void obdo_cpy_md(obdattr *dst, obdattr *src, int mask)
+{
+ CDEBUG(D_INODE, "flags %x\n", mask);
+ if ( ! (mask & OBD_MD_FLMODE) )
+ dst->i_mode = src->i_mode;
+ if ( ! (mask & OBD_MD_FLUID) )
+ dst->i_uid = src->i_uid;
+ if ( ! (mask & OBD_MD_FLGID) )
+ dst->i_gid = src->i_gid;
+ if ( ! (mask & OBD_MD_FLSIZE) )
+ dst->i_size = src->i_size;
+ if ( ! (mask & OBD_MD_FLATIME) )
+ dst->i_atime = src->i_atime;
+ if ( ! (mask & OBD_MD_FLMTIME) )
+ dst->i_mtime = src->i_mtime;
+ if ( ! (mask & OBD_MD_FLCTIME) )
+ dst->i_ctime = src->i_ctime;
+ if ( ! (mask & OBD_MD_FLFLAGS) )
+ dst->i_flags = src->i_flags;
+ /* allocation of space */
+ if ( ! (mask & OBD_MD_FLBLOCKS) )
+ dst->i_blocks = src->i_blocks;
+ if ( ! (mask & OBD_MD_FLOBDMD) && !src->i_blocks ) {
+ CDEBUG(D_IOCTL, "copying inline data: ino %ld\n", dst->i_ino);
+ memcpy(&dst->u.ext2_i.i_data, &src->u.ext2_i.i_data,
+ sizeof(src->u.ext2_i.i_data));
+ } else {
+ CDEBUG(D_INODE, "XXXX cpy_obdmd: ino %ld iblocks not 0!\n", src->i_ino);
+ }
+}
+
+static __inline__ int obdo_cmp_md(obdattr *dst, obdattr *src, int mask)
+{
+ int res = 1;
+ if ( ! (mask & OBD_MD_FLMODE) )
+ res = (res && (dst->i_mode == src->i_mode));
+ if ( ! (mask & OBD_MD_FLUID) )
+ res = (res && (dst->i_uid == src->i_uid));
+ if ( ! (mask & OBD_MD_FLGID) )
+ res = (res && (dst->i_gid == src->i_gid));
+ if ( ! (mask & OBD_MD_FLSIZE) )
+ res = (res && (dst->i_size == src->i_size));
+ if ( ! (mask & OBD_MD_FLATIME) )
+ res = (res && (dst->i_atime == src->i_atime));
+ if ( ! (mask & OBD_MD_FLMTIME) )
+ res = (res && (dst->i_mtime == src->i_mtime));
+ if ( ! (mask & OBD_MD_FLCTIME) )
+ res = (res && (dst->i_ctime == src->i_ctime));
+ if ( ! (mask & OBD_MD_FLFLAGS) )
+ res = (res && (dst->i_flags == src->i_flags));
+ /* allocation of space */
+ if ( ! (mask & OBD_MD_FLBLOCKS) )
+ res = (res && (dst->i_blocks == src->i_blocks));
return res;
}
-/* #define obd_cpy_obdo(a,b) memcpy(a, b, sizeof(*a)) */
-static __inline__ void obd_cpy_appmd(obdattr *
a, obdattr *b
)
+static __inline__ void obd_cpy_appmd(obdattr *
dst, obdattr *src
)
{
-
a->i_mode = b
->i_mode;
-
a->i_uid = b
->i_uid;
-
a->i_gid = b
->i_gid;
-
a->i_size = b
->i_size;
-
a->i_atime = b
->i_atime;
-
a->i_mtime = b
->i_mtime;
-
a->i_ctime = b
->i_ctime;
-
a->i_flags = b
->i_flags;
+
dst->i_mode = src
->i_mode;
+
dst->i_uid = src
->i_uid;
+
dst->i_gid = src
->i_gid;
+
dst->i_size = src
->i_size;
+
dst->i_atime = src
->i_atime;
+
dst->i_mtime = src
->i_mtime;
+
dst->i_ctime = src
->i_ctime;
+
dst->i_flags = src
->i_flags;
/* allocation of space */
-
a->i_blocks = b
->i_blocks;
+
dst->i_blocks = src
->i_blocks;
}
#endif /* __LINUX_CLASS_OBD_H */