Hi folks,
I''ve been reading through the delayed references code, and have
stumbled
across a couple of numeric values about which I have no idea whatsoever.
I was hoping someone could enlighten me on what they are for, and why
they are used in spite of any other particular value.
For instance, in delayed-ref.c one can read
int btrfs_find_ref_cluster(struct btrfs_trans_handle *trans,
struct list_head *cluster, u64 start)
{
[...]
again:
while (node && count < 32) {
ref = rb_entry(node, struct btrfs_delayed_ref_node, rb_node);
[...]
}
and in transaction.c one can read
static int __btrfs_end_transaction(struct btrfs_trans_handle *trans,
struct btrfs_root *root, int throttle, int lock)
{
[...]
while (count < 4) {
unsigned long cur = trans->delayed_ref_updates;
trans->delayed_ref_updates = 0;
if (cur &&
trans->transaction->delayed_refs.num_heads_ready > 64) {
trans->delayed_ref_updates = 0;
[...]
}
I''ve been wondering about what the 32 and the 64 mean. These values
seem
far too round to be random, and I''m sure there is a purpose behind
them, but if
it is obvious I''m certainly missing the point.
The ''count < 4'' also throws me off, but I''m
assuming it is someway to guarantee
everything gets flushed.
Any help would be appreciated.
Cheers,
Joao
---
João Eduardo Luís
gpg key: 477C26E5 from pool.keyserver.eu