[PVFS2-users] Re: Timestamp metadata, heterogenous architecture,
files and directory not accessible
Murali Vilayannur
vilayann at mcs.anl.gov
Mon Oct 24 21:09:59 EDT 2005
Hi,
Apologies for combining multiple email responses into 1 email!
I did not catch any of these threads earlier on....
Simon, Could you try the attached patch (against latest CVS)
and let us know if it fixes your problem?
I was able to reproduce it on an x86_64/ia32 setup and after this patch
the timestamp problem disappeared.
There is still the permission problem that Ekow Otoo brought up on the
list that I have not tracked down yet. I am able to reproduce it on an
x86_64 box (not on an ia32 box). Ekow, could you confirm if you are
seeing this problem on an x86_64 or an IA-64 machine? I dont remember
seeing the platform you were using in your email...
Thanks,
Murali
> Rob Ross wrote:
>
>> By disappears you mean that the timestamp appears normal, right?
>>
>> Sounds like there's something amiss in how we copy the stat results
>> into the user buffer.
>>
>> Thanks, we'll do some investigating.
>>
>> Rob
>
>
>
> Yep. In summary:
>
> 1) Create any file in pvfs2 filesystem.
> 2) ls -l the file => consistent but erroneous timestamp (Jan 1970)
> 3) 'touch' the file => different but erroneous timestamp (another day
> in Jan 1970)
> 4) umount pvfs2, mount pvfs2 => same 1970 timestamp
> 5) umount, kill pvfs2-client, start pvfs2-client, mount pvfs2 =>
> correct timestamp (i.e. last 'touch' time)
>
>
-------------- next part --------------
Index: include/pvfs2-util.h
===================================================================
RCS file: /anoncvs/pvfs2/include/pvfs2-util.h,v
retrieving revision 1.38
diff -u -r1.38 pvfs2-util.h
--- include/pvfs2-util.h 4 Oct 2005 19:04:53 -0000 1.38
+++ include/pvfs2-util.h 25 Oct 2005 00:51:09 -0000
@@ -145,6 +145,11 @@
{
return (PVFS_time)(version >> 32);
}
+
+inline static int PVFS_util_istime_versioned(PVFS_time version_or_time)
+{
+ return (version_or_time >> 32 == 0 ? 0 : 1);
+}
#endif /* __KERNEL__ */
#endif /* __PVFS2_UTIL_H */
Index: src/client/sysint/acache.c
===================================================================
RCS file: /anoncvs/pvfs2/src/client/sysint/acache.c,v
retrieving revision 1.20
diff -u -r1.20 acache.c
--- src/client/sysint/acache.c 23 Aug 2005 18:44:13 -0000 1.20
+++ src/client/sysint/acache.c 25 Oct 2005 00:51:10 -0000
@@ -18,6 +18,7 @@
#include "acache.h"
#include "quickhash.h"
#include "pint-util.h"
+#include "pvfs2-util.h"
/* comment out the following for non-verbose acache debugging */
#define VERBOSE_ACACHE_DEBUG
@@ -369,7 +370,12 @@
pinode->refn.fs_id = refn.fs_id;
pinode->refn.handle = refn.handle;
- PINT_copy_object_attr(&pinode->attr, attr);
+ PINT_copy_object_attr(&pinode->attr, attr,
+ PVFS_util_istime_versioned(attr->mtime));
+ gossip_debug(GOSSIP_ACACHE_DEBUG, "acache inserted handle %Ld "
+ "atime: %Ld, mtime: %Ld, ctime: %Ld\n", pinode->refn.handle,
+ pinode->attr.atime, PVFS_util_mkversion_time(pinode->attr.mtime),
+ pinode->attr.ctime);
PINT_acache_set_valid(pinode);
Index: src/client/sysint/sys-getattr.sm
===================================================================
RCS file: /anoncvs/pvfs2/src/client/sysint/sys-getattr.sm,v
retrieving revision 1.85
diff -u -r1.85 sys-getattr.sm
--- src/client/sysint/sys-getattr.sm 10 Oct 2005 16:28:06 -0000 1.85
+++ src/client/sysint/sys-getattr.sm 25 Oct 2005 00:51:10 -0000
@@ -405,7 +405,10 @@
cache_hit:
- PINT_copy_object_attr(&sm_p->getattr.attr, &pinode->attr);
+ PINT_copy_object_attr(&sm_p->getattr.attr, &pinode->attr,
+ PVFS_util_istime_versioned(pinode->attr.mtime));
+ gossip_debug(GOSSIP_ACACHE_DEBUG, "Acache HIT! for %s: handle %Lu fsid %d, mtime %Ld\n",
+ __func__, Lu(object_ref.handle), object_ref.fs_id, Ld(pinode->attr.mtime));
if(trimmed_mask & PVFS_ATTR_DATA_SIZE)
{
@@ -518,8 +521,8 @@
* then we can make a copy of the retrieved attribute for later
* caching.
*/
- PINT_copy_object_attr(&sm_p->getattr.attr,
- &resp_p->u.getattr.attr);
+ PINT_copy_object_attr(&sm_p->getattr.attr, &resp_p->u.getattr.attr,
+ PVFS_util_istime_versioned(resp_p->u.getattr.attr.mtime));
attr = &sm_p->getattr.attr;
assert(attr);
@@ -782,9 +785,13 @@
sm_p->getattr.attr.mask |= PVFS_ATTR_DATA_SIZE;
}
- PINT_copy_object_attr(&pinode->attr, &sm_p->getattr.attr);
+ PINT_copy_object_attr(&pinode->attr, &sm_p->getattr.attr,
+ PVFS_util_istime_versioned(sm_p->getattr.attr.mtime));
PINT_acache_set_valid(pinode);
+ gossip_debug(GOSSIP_ACACHE_DEBUG, "Acache INSERT! for %s: handle %Lu fsid %d, mtime %Ld\n",
+ __func__, Lu(sm_p->getattr.object_ref.handle), sm_p->getattr.object_ref.fs_id,
+ Ld(pinode->attr.mtime));
if (release_required)
{
Index: src/client/sysint/sys-lookup.sm
===================================================================
RCS file: /anoncvs/pvfs2/src/client/sysint/sys-lookup.sm,v
retrieving revision 1.57
diff -u -r1.57 sys-lookup.sm
--- src/client/sysint/sys-lookup.sm 26 Aug 2005 19:10:56 -0000 1.57
+++ src/client/sysint/sys-lookup.sm 25 Oct 2005 00:51:10 -0000
@@ -737,7 +737,7 @@
PINT_free_object_attr(&(cur_seg->seg_attr));
PINT_copy_object_attr(&(cur_seg->seg_attr),
- &(sm_p->getattr.attr));
+ &(sm_p->getattr.attr), PVFS_util_istime_versioned(sm_p->getattr.attr.mtime));
cur_ctx = GET_CURRENT_CONTEXT(sm_p);
assert(cur_ctx);
@@ -1112,7 +1112,8 @@
PINT_free_object_attr(&(cur_seg->seg_attr));
PINT_copy_object_attr(
&(cur_seg->seg_attr),
- &(resp_p->u.lookup_path.attr_array[i]));
+ &(resp_p->u.lookup_path.attr_array[i]),
+ PVFS_util_istime_versioned(resp_p->u.lookup_path.attr_array[i].mtime));
}
}
assert(i == resp_p->u.lookup_path.handle_count);
Index: src/common/misc/pint-util.c
===================================================================
RCS file: /anoncvs/pvfs2/src/common/misc/pint-util.c,v
retrieving revision 1.9
diff -u -r1.9 pint-util.c
--- src/common/misc/pint-util.c 23 Aug 2005 18:44:17 -0000 1.9
+++ src/common/misc/pint-util.c 25 Oct 2005 00:51:10 -0000
@@ -25,6 +25,7 @@
#include "gen-locks.h"
#include "gossip.h"
#include "pvfs2-debug.h"
+#include "pvfs2-util.h"
static int current_tag = 1;
static gen_mutex_t current_tag_lock = GEN_MUTEX_INITIALIZER;
@@ -92,7 +93,7 @@
return ret;
}
-int PINT_copy_object_attr(PVFS_object_attr *dest, PVFS_object_attr *src)
+int PINT_copy_object_attr(PVFS_object_attr *dest, PVFS_object_attr *src, int convert_mtime)
{
int ret = -PVFS_ENOMEM;
@@ -120,7 +121,10 @@
}
if (src->mask & PVFS_ATTR_COMMON_MTIME)
{
- dest->mtime = src->mtime;
+ if (convert_mtime)
+ dest->mtime = PVFS_util_mkversion_time(src->mtime);
+ else
+ dest->mtime = src->mtime;
}
if (src->mask & PVFS_ATTR_COMMON_TYPE)
{
Index: src/common/misc/pint-util.h
===================================================================
RCS file: /anoncvs/pvfs2/src/common/misc/pint-util.h,v
retrieving revision 1.7
diff -u -r1.7 pint-util.h
--- src/common/misc/pint-util.h 8 Jun 2005 19:30:29 -0000 1.7
+++ src/common/misc/pint-util.h 25 Oct 2005 00:51:10 -0000
@@ -38,7 +38,7 @@
PVFS_msg_tag_t PINT_util_get_next_tag(void);
-int PINT_copy_object_attr(PVFS_object_attr *dest, PVFS_object_attr *src);
+int PINT_copy_object_attr(PVFS_object_attr *dest, PVFS_object_attr *src, int convert_mtime);
void PINT_free_object_attr(PVFS_object_attr *attr);
void PINT_time_mark(PINT_time_marker* out_marker);
void PINT_time_diff(PINT_time_marker mark1,
More information about the PVFS2-users
mailing list