summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libglusterfs/src/iatt.h59
-rw-r--r--xlators/cluster/afr/src/afr-self-heal-common.c6
-rw-r--r--xlators/cluster/ec/src/ec-combine.c4
-rw-r--r--xlators/debug/trace/src/trace.c6
-rw-r--r--xlators/nfs/server/src/nfs3.c6
-rw-r--r--xlators/storage/posix/src/posix-helpers.c4
6 files changed, 64 insertions, 21 deletions
diff --git a/libglusterfs/src/iatt.h b/libglusterfs/src/iatt.h
index b8907598b18..8cb2b4a5b27 100644
--- a/libglusterfs/src/iatt.h
+++ b/libglusterfs/src/iatt.h
@@ -33,7 +33,6 @@ typedef enum {
IA_IFSOCK
} ia_type_t;
-
typedef struct {
uint8_t suid:1;
uint8_t sgid:1;
@@ -45,28 +44,63 @@ typedef struct {
} owner, group, other;
} ia_prot_t;
-
struct iatt {
+ uint64_t ia_flags;
uint64_t ia_ino; /* inode number */
- uuid_t ia_gfid;
uint64_t ia_dev; /* backing device ID */
- ia_type_t ia_type; /* type of file */
- ia_prot_t ia_prot; /* protection */
+ uint64_t ia_rdev; /* device ID (if special file) */
+ uint64_t ia_size; /* file size in bytes */
uint32_t ia_nlink; /* Link count */
uint32_t ia_uid; /* user ID of owner */
uint32_t ia_gid; /* group ID of owner */
- uint64_t ia_rdev; /* device ID (if special file) */
- uint64_t ia_size; /* file size in bytes */
uint32_t ia_blksize; /* blocksize for filesystem I/O */
uint64_t ia_blocks; /* number of 512B blocks allocated */
- uint32_t ia_atime; /* last access time */
+ int64_t ia_atime; /* last access time */
+ int64_t ia_mtime; /* last modification time */
+ int64_t ia_ctime; /* last status change time */
+ int64_t ia_btime; /* creation time. Fill using statx */
uint32_t ia_atime_nsec;
- uint32_t ia_mtime; /* last modification time */
uint32_t ia_mtime_nsec;
- uint32_t ia_ctime; /* last status change time */
uint32_t ia_ctime_nsec;
+ uint32_t ia_btime_nsec;
+ uint64_t ia_attributes; /* chattr related:compressed, immutable,
+ * append only, encrypted etc.*/
+ uint64_t ia_attributes_mask; /* Mask for the attributes */
+
+ uuid_t ia_gfid;
+ ia_type_t ia_type; /* type of file */
+ ia_prot_t ia_prot; /* protection */
};
+/* 64-bit mask for valid members in struct iatt. */
+#define IATT_TYPE 0x0000000000000001U
+#define IATT_MODE 0x0000000000000002U
+#define IATT_NLINK 0x0000000000000004U
+#define IATT_UID 0x0000000000000008U
+#define IATT_GID 0x0000000000000010U
+#define IATT_ATIME 0x0000000000000020U
+#define IATT_MTIME 0x0000000000000040U
+#define IATT_CTIME 0x0000000000000080U
+#define IATT_INO 0x0000000000000100U
+#define IATT_SIZE 0x0000000000000200U
+#define IATT_BLOCKS 0x0000000000000400U
+#define IATT_BTIME 0x0000000000000800U
+#define IATT_GFID 0x0000000000001000U
+
+/* Macros for checking validity of struct iatt members.*/
+#define IATT_TYPE_VALID(iaflags) (iaflags & IATT_TYPE)
+#define IATT_MODE_VALID(iaflags) (iaflags & IATT_MODE)
+#define IATT_NLINK_VALID(iaflags) (iaflags & IATT_NLINK)
+#define IATT_UID_VALID(iaflags) (iaflags & IATT_UID)
+#define IATT_GID_VALID(iaflags) (iaflags & IATT_GID)
+#define IATT_ATIME_VALID(iaflags) (iaflags & IATT_ATIME)
+#define IATT_MTIME_VALID(iaflags) (iaflags & IATT_MTIME)
+#define IATT_CTIME_VALID(iaflags) (iaflags & IATT_CTIME)
+#define IATT_INO_VALID(iaflags) (iaflags & IATT_INO)
+#define IATT_SIZE_VALID(iaflags) (iaflags & IATT_SIZE)
+#define IATT_BLOCKS_VALID(iaflags) (iaflags & IATT_BLOCKS)
+#define IATT_BTIME_VALID(iaflags) (iaflags & IATT_BTIME)
+#define IATT_GFID_VALID(iaflags) (iaflags & IATT_GFID)
#define IA_ISREG(t) (t == IA_IFREG)
#define IA_ISDIR(t) (t == IA_IFDIR)
@@ -302,6 +336,11 @@ iatt_from_stat (struct iatt *iatt, struct stat *stat)
iatt->ia_ctime = stat->st_ctime;
iatt->ia_ctime_nsec = ST_CTIM_NSEC (stat);
+ /* Setting IATT_INO in ia_flags is done in posix_fill_ino_from_gfid. */
+ iatt->ia_flags = iatt->ia_flags | IATT_TYPE | IATT_MODE | IATT_NLINK |
+ IATT_UID | IATT_GID | IATT_SIZE | IATT_BLOCKS |
+ IATT_ATIME | IATT_MTIME | IATT_CTIME;
+
return 0;
}
diff --git a/xlators/cluster/afr/src/afr-self-heal-common.c b/xlators/cluster/afr/src/afr-self-heal-common.c
index 7e020bb6bee..88a3d9618e3 100644
--- a/xlators/cluster/afr/src/afr-self-heal-common.c
+++ b/xlators/cluster/afr/src/afr-self-heal-common.c
@@ -1015,7 +1015,7 @@ afr_sh_fav_by_majority (xlator_t *this, struct afr_reply *replies,
for (i = 0; i < priv->child_count; i++) {
if (replies[i].valid == 1) {
gf_msg_debug (this->name, 0, "Child:%s "
- "mtime_sec = %d, size = %lu for gfid %s",
+ "mtime_sec = %ld, size = %lu for gfid %s",
priv->children[i]->name,
replies[i].poststat.ia_mtime,
replies[i].poststat.ia_size,
@@ -1056,7 +1056,7 @@ afr_sh_fav_by_mtime (xlator_t *this, struct afr_reply *replies, inode_t *inode)
for (i = 0; i < priv->child_count; i++) {
if (replies[i].valid == 1) {
gf_msg_debug (this->name, 0, "Child:%s "
- "mtime = %d, mtime_nsec = %d for gfid %s",
+ "mtime = %ld, mtime_nsec = %d for gfid %s",
priv->children[i]->name,
replies[i].poststat.ia_mtime,
replies[i].poststat.ia_mtime_nsec,
@@ -1096,7 +1096,7 @@ afr_sh_fav_by_ctime (xlator_t *this, struct afr_reply *replies, inode_t *inode)
for (i = 0; i < priv->child_count; i++) {
if (replies[i].valid == 1) {
gf_msg_debug (this->name, 0, "Child:%s "
- "ctime = %d, ctime_nsec = %d for gfid %s",
+ "ctime = %ld, ctime_nsec = %d for gfid %s",
priv->children[i]->name,
replies[i].poststat.ia_ctime,
replies[i].poststat.ia_ctime_nsec,
diff --git a/xlators/cluster/ec/src/ec-combine.c b/xlators/cluster/ec/src/ec-combine.c
index 01a865628f9..b51ec87a934 100644
--- a/xlators/cluster/ec/src/ec-combine.c
+++ b/xlators/cluster/ec/src/ec-combine.c
@@ -98,8 +98,8 @@ ec_combine_write (ec_fop_data_t *fop, ec_cbk_data_t *dst,
return 1;
}
-void ec_iatt_time_merge(uint32_t * dst_sec, uint32_t * dst_nsec,
- uint32_t src_sec, uint32_t src_nsec)
+void ec_iatt_time_merge(int64_t *dst_sec, uint32_t *dst_nsec,
+ int64_t src_sec, uint32_t src_nsec)
{
if ((*dst_sec < src_sec) ||
((*dst_sec == src_sec) && (*dst_nsec < src_nsec)))
diff --git a/xlators/debug/trace/src/trace.c b/xlators/debug/trace/src/trace.c
index c85f2a7a994..be2f84d936f 100644
--- a/xlators/debug/trace/src/trace.c
+++ b/xlators/debug/trace/src/trace.c
@@ -41,9 +41,9 @@ trace_stat_to_str(struct iatt *buf, char *str, size_t len)
snprintf (str, len, "gfid=%s ino=%"PRIu64", mode=%o, "
"nlink=%"GF_PRI_NLINK", uid=%u, gid=%u, size=%"PRIu64", "
"blocks=%"PRIu64", atime=%s mtime=%s ctime=%s "
- "atime_sec=%"PRIu32", atime_nsec=%"PRIu32","
- " mtime_sec=%"PRIu32", mtime_nsec=%"PRIu32", "
- "ctime_sec=%"PRIu32", ctime_nsec=%"PRIu32"",
+ "atime_sec=%"PRId64", atime_nsec=%"PRIu32","
+ " mtime_sec=%"PRId64", mtime_nsec=%"PRIu32", "
+ "ctime_sec=%"PRId64", ctime_nsec=%"PRIu32"",
uuid_utoa (buf->ia_gfid), buf->ia_ino,
st_mode_from_ia (buf->ia_prot, buf->ia_type), buf->ia_nlink,
buf->ia_uid, buf->ia_gid, buf->ia_size, buf->ia_blocks,
diff --git a/xlators/nfs/server/src/nfs3.c b/xlators/nfs/server/src/nfs3.c
index 6428a77442e..93f5124acf4 100644
--- a/xlators/nfs/server/src/nfs3.c
+++ b/xlators/nfs/server/src/nfs3.c
@@ -2661,14 +2661,14 @@ nfs3svc_create_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
if ((cs->stbuf.ia_mtime == buf->ia_mtime) &&
(cs->stbuf.ia_atime == buf->ia_atime)) {
gf_msg_debug (GF_NFS3, 0,
- "Create req retransmitted verf %x %x",
+ "Create req retransmitted verf %ld %ld",
cs->stbuf.ia_mtime, cs->stbuf.ia_atime);
stat = NFS3_OK;
nfs3_fh_build_child_fh (&cs->parent, buf, &cs->fh);
} else {
gf_msg_debug (GF_NFS3, 0,
- "File already exist new_verf %x %x"
- "old_verf %x %x", cs->stbuf.ia_mtime,
+ "File already exist new_verf %ld %ld"
+ "old_verf %ld %ld", cs->stbuf.ia_mtime,
cs->stbuf.ia_atime,
buf->ia_mtime, buf->ia_atime);
stat = NFS3ERR_EXIST;
diff --git a/xlators/storage/posix/src/posix-helpers.c b/xlators/storage/posix/src/posix-helpers.c
index 39d29f413a8..e299dcb837c 100644
--- a/xlators/storage/posix/src/posix-helpers.c
+++ b/xlators/storage/posix/src/posix-helpers.c
@@ -597,6 +597,7 @@ posix_fill_ino_from_gfid (xlator_t *this, struct iatt *buf)
goto out;
}
buf->ia_ino = gfid_to_ino (buf->ia_gfid);
+ buf->ia_flags |= IATT_INO;
out:
return;
}
@@ -618,6 +619,7 @@ posix_fdstat (xlator_t *this, int fd, struct iatt *stbuf_p)
iatt_from_stat (&stbuf, &fstatbuf);
ret = posix_fill_gfid_fd (this, fd, &stbuf);
+ stbuf.ia_flags |= IATT_GFID;
posix_fill_ino_from_gfid (this, &stbuf);
@@ -688,6 +690,7 @@ posix_istat (xlator_t *this, uuid_t gfid, const char *basename,
posix_fill_gfid_path (this, real_path, &stbuf);
else
gf_uuid_copy (stbuf.ia_gfid, gfid);
+ stbuf.ia_flags |= IATT_GFID;
posix_fill_ino_from_gfid (this, &stbuf);
@@ -716,6 +719,7 @@ posix_pstat (xlator_t *this, uuid_t gfid, const char *path,
gf_uuid_copy (stbuf.ia_gfid, gfid);
else
posix_fill_gfid_path (this, path, &stbuf);
+ stbuf.ia_flags |= IATT_GFID;
ret = sys_lstat (path, &lstatbuf);
if (ret == -1) {