From 378de9bfe35999105392b2ff152e0bb2eaef4de2 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 17 Oct 2008 14:12:35 -0700 Subject: [PATCH] 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. --- src/kernel/snap.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/kernel/snap.c b/src/kernel/snap.c index 03f9766c6e754..4d02987d08814 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 */ } -- 2.39.5