From: Sage Weil Date: Fri, 17 Oct 2008 21:12:35 +0000 (-0700) Subject: kclient: fix cap_snap flush to reference correct snap X-Git-Tag: v0.5~268 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=378de9bfe35999105392b2ff152e0bb2eaef4de2;p=ceph.git kclient: fix cap_snap flush to reference correct snap The client was passing the snapid the data was to fall into instead of the snap it _follows_ (which is now the mds tends to look at things). Use snapid-1 instead. This fixes the problem of files being written while the snapshot was taken appearing as 0 bytes in the snapshot. --- diff --git a/src/kernel/snap.c b/src/kernel/snap.c index 03f9766c6e75..4d02987d0881 100644 --- a/src/kernel/snap.c +++ b/src/kernel/snap.c @@ -319,7 +319,7 @@ void ceph_queue_cap_snap(struct ceph_inode_info *ci, kfree(capsnap); } else { igrab(inode); - capsnap->follows = snapc->seq; + capsnap->follows = snapc->seq - 1; capsnap->context = ceph_get_snap_context(snapc); capsnap->issued = __ceph_caps_issued(ci, NULL); /* dirty page count moved from _head to this cap_snap; @@ -364,11 +364,15 @@ int __ceph_finish_cap_snap(struct ceph_inode_info *ci, capsnap->ctime = inode->i_ctime; capsnap->time_warp_seq = ci->i_time_warp_seq; if (capsnap->dirty) { - dout(10, "finish_cap_snap %p cap_snap %p snapc %p %llu " + dout(10, "finish_cap_snap %p cap_snap %p snapc %p %llu s=%llu" "still has %d dirty pages\n", inode, capsnap, - capsnap->context, capsnap->context->seq, capsnap->dirty); + capsnap->context, capsnap->context->seq, + capsnap->size, capsnap->dirty); return 0; } + dout(10, "finish_cap_snap %p cap_snap %p snapc %p %llu s=%llu clean\n", + inode, capsnap, capsnap->context, + capsnap->context->seq, capsnap->size); return 1; /* caller should ceph_flush_snaps */ }