Avoid double evaluation via macros...
// merge replica map
for (map<int,int>::iterator p = dir->replica_map.begin();
p != dir->replica_map.end();
- ++p)
- replica_map[p->first] = MAX(replica_map[p->first], p->second);
+ ++p) {
+ int cur = replica_map[p->first];
+ if (p->second > cur)
+ replica_map[p->first] = p->second;
+ }
// merge state
state_set(dir->get_state() & MASK_STATE_FRAGMENT_KEPT);
m->head.time_warp_seq = i->time_warp_seq;
// max_size is min of projected, actual.
- m->head.max_size = MIN(oi->client_ranges.count(client) ? oi->client_ranges[client].last : 0,
- pi->client_ranges.count(client) ? pi->client_ranges[client].last : 0);
+ __u64 oldms = oi->client_ranges.count(client) ? oi->client_ranges[client].last : 0;
+ __u64 newms = pi->client_ranges.count(client) ? pi->client_ranges[client].last : 0;
+ m->head.max_size = MIN(oldms, newms);
i = pauth ? pi:oi;
m->head.mode = i->mode;
void Locker::calc_new_client_ranges(CInode *in, __u64 size, map<client_t,byte_range_t>& new_ranges)
{
inode_t *latest = in->get_projected_inode();
+ __u64 ms = ROUND_UP_TO((size+1)<<1, latest->get_layout_size_increment());
// increase ranges as appropriate.
// shrink to 0 if no WR|BUFFER caps issued.
p++) {
if ((p->second->issued() | p->second->wanted()) & (CEPH_CAP_FILE_WR|CEPH_CAP_FILE_BUFFER)) {
new_ranges[p->first].first = 0;
- if (latest->client_ranges.count(p->first))
- new_ranges[p->first].last = MAX(ROUND_UP_TO((size+1)<<1, latest->get_layout_size_increment()),
- latest->client_ranges[p->first].last);
- else
- new_ranges[p->first].last = ROUND_UP_TO((size+1)<<1, latest->get_layout_size_increment());
+ if (latest->client_ranges.count(p->first)) {
+ __u64 last = latest->client_ranges[p->first].last;
+ new_ranges[p->first].last = MAX(ms, last);
+ } else
+ new_ranges[p->first].last = ms;
}
}
}
__u64 period = in->inode.layout.fl_object_size * in->inode.layout.fl_stripe_count;
- __u64 to = MAX(in->inode.size, in->inode.get_max_size());
+ __u64 cur_max_size = in->inode.get_max_size();
+ __u64 to = MAX(in->inode.size, cur_max_size);
__u64 num = (to + period - 1) / period;
dout(10) << "purge_stray 0~" << to << " objects 0~" << num << " snapc " << snapc << " on " << *in << dendl;
if (to)