dout(10) << " realm " << *realm << dendl;
const SnapContext *snapc = &realm->get_snap_context();
- uint64_t period = (uint64_t)in->inode.layout.fl_object_size *
- (uint64_t)in->inode.layout.fl_stripe_count;
uint64_t to = in->inode.get_max_size();
to = MAX(in->inode.size, to);
// when truncating a file, the filer does not delete stripe objects that are
// truncated to zero. so we need to purge stripe objects up to the max size
// the file has ever been.
to = MAX(in->inode.max_size_ever, to);
- if (period && to > period) {
- uint64_t num = (to - 1) / period;
+ if (to > 0) {
+ uint64_t num = Striper::get_num_objects(in->inode.layout, to);
dout(10) << "purge_stray 0~" << to << " objects 0~" << num
- << " snapc " << snapc << " on " << *in << dendl;
- mds->filer->purge_range(in->ino(), &in->inode.layout, *snapc,
- 1, num, ceph_clock_now(g_ceph_context),
- 0, gather.new_sub());
- }
+ << " snapc " << snapc << " on " << *in << dendl;
- // keep backtrace object
- if (period && to > 0) {
+ // keep backtrace object
+ if (num > 1) {
+ mds->filer->purge_range(in->ino(), &in->inode.layout, *snapc,
+ 1, num - 1, ceph_clock_now(g_ceph_context),
+ 0, gather.new_sub());
+ }
mds->filer->zero(in->ino(), &in->inode.layout, *snapc,
- 0, period, ceph_clock_now(g_ceph_context),
+ 0, (uint64_t)in->inode.layout.fl_object_size,
+ ceph_clock_now(g_ceph_context),
0, true, NULL, gather.new_sub());
}
}
if (in->is_file()) {
- uint64_t period = (uint64_t)in->inode.layout.fl_object_size *
- (uint64_t)in->inode.layout.fl_stripe_count;
uint64_t to = in->inode.get_max_size();
to = MAX(in->inode.size, to);
// when truncating a file, the filer does not delete stripe objects that are
// truncated to zero. so we need to purge stripe objects up to the max size
// the file has ever been.
to = MAX(in->inode.max_size_ever, to);
- if (to && period) {
- uint64_t num = (to + period - 1) / period;
+ if (to > 0) {
+ uint64_t num = Striper::get_num_objects(in->inode.layout, to);
dout(10) << "purge_stray 0~" << to << " objects 0~" << num
<< " snapc " << snapc << " on " << *in << dendl;
mds->filer->purge_range(in->inode.ino, &in->inode.layout, *snapc,