On Mar 3, 2012, Sage Weil <sage@xxxxxxxxxxxx> wrote: > On Sat, 25 Feb 2012, Alexandre Oliva wrote: >> On Feb 23, 2012, Sage Weil <sage@xxxxxxxxxxxx> wrote: >> > On Tue, 21 Feb 2012, Alexandre Oliva wrote: >> >> This was supposed to fix bug 1946, and likely bug 1849 too, but it looks >> >> like something's still missing for a complete fix. >> create snapshot >> check timestamps -> baseline >> unmount >> mount again >> check timestamps -> same >> restart mds >> check timestamps -> same >> unmount >> mount again >> check timestamps -> same >> moved a tree into dir >> check timestamps -> dir changed and snapshot unchanged, as expected >> unmount >> mount again >> check timestamps -> same >> restart mds >> check timestamps -> snapshot changed to dir's; its size too! > It looks like the problem is that CInode::first isn't being journaled. I see old_inodes are being journalled properly now. I've looked further into this tonight, and I found out what modifies the timestamps in the inode is (re)issuing caps to a client. I had a hw watchpoint on the timestamp in old_inodes, and it hit when I accessed the directory from a client, with this stack trace: #0 0x0000000000668e1d in operator= (this=0x7fffb5513370) at ../../src/mds/mdstypes.h:375 #1 CInode::cow_old_inode (this=0x7fffe09f6630, follows=..., cow_head=true) at ../../src/mds/CInode.cc:2035 #2 0x000000000066972e in CInode::pre_cow_old_inode (this=0x7fffe09f6630) at ../../src/mds/CInode.cc:2058 #3 0x00000000005dac8b in Locker::scatter_writebehind (this=0x1277500, lock=0x7fffe09f6d78) at ../../src/mds/Locker.cc:3583 #4 0x00000000005e5bac in Locker::eval_gather (this=0x1277500, lock=0x7fffe09f6d78, first=true, pneed_issue=0x7ffff4fc4f3f, pfinishers=0x0) at ../../src/mds/Locker.cc:686 #5 0x00000000005e993e in eval_any (need_issue=0x7ffff4fc4f3f, lock=<optimized out>, this=0x1277500) at ../../src/mds/Locker.h:103 #6 eval_any (need_issue=0x7ffff4fc4f3f, lock=0x7fffe09f6d78, this=0x1277500) at ../../src/mds/Locker.cc:763 #7 Locker::eval (this=0x1277500, in=0x7fffe09f6630, mask=<optimized out>) at ../../src/mds/Locker.cc:783 #8 0x00000000005f9ff9 in Locker::handle_client_caps (this=0x1277500, m=0x7fff683e8620) at ../../src/mds/Locker.cc:2340 #9 0x00000000004ba900 in MDS::handle_deferrable_message (this=0x1272d70, m=0x7fff683e8620) at ../../src/mds/MDS.cc:1742 #10 0x00000000004cddae in MDS::_dispatch (this=0x1272d70, m=<optimized out>) at ../../src/mds/MDS.cc:1833 ---Type <return> to continue, or q <return> to quit--- old_inodes looks like this: std::map with 1 elements = {[{val = 5}] = {first = {val = 2}, inode = { ino = {val = 1099511627776} follows is 5 and first is 2 within CInode::pre_cow_old_inode. So, how can we stop pre_cow_old_inode from messing with the old_inode? Any suggestions? Thanks in advance, -- Alexandre Oliva, freedom fighter http://FSFLA.org/~lxoliva/ You must be the change you wish to see in the world. -- Gandhi Be Free! -- http://FSFLA.org/ FSF Latin America board member Free Software Evangelist Red Hat Brazil Compiler Engineer -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html