import mars-27.tgz

This commit is contained in:
Thomas Schoebel-Theuer 2010-08-06 17:14:32 +01:00
parent d850486584
commit 1288ea4b2a
2 changed files with 12 additions and 9 deletions

View File

@ -20,14 +20,15 @@
///////////////////////// own helper functions //////////////////////// ///////////////////////// own helper functions ////////////////////////
static inline int buf_hash(struct buf_brick *brick, loff_t pos) static inline int buf_hash(struct buf_brick *brick, unsigned int base_index)
{ {
return (pos >> brick->backing_order) % MARS_BUF_HASH_MAX; return base_index % MARS_BUF_HASH_MAX;
} }
static struct buf_head *hash_find(struct buf_brick *brick, loff_t pos) static struct buf_head *hash_find(struct buf_brick *brick, unsigned int base_index)
{ {
int hash = buf_hash(brick, pos);
int hash = buf_hash(brick, base_index);
struct list_head *start = &brick->cache_anchors[hash]; struct list_head *start = &brick->cache_anchors[hash];
struct list_head *tmp; struct list_head *tmp;
struct buf_head *res; struct buf_head *res;
@ -35,7 +36,7 @@ static struct buf_head *hash_find(struct buf_brick *brick, loff_t pos)
if (tmp == start) if (tmp == start)
return NULL; return NULL;
res = container_of(tmp, struct buf_head, bf_hash_head); res = container_of(tmp, struct buf_head, bf_hash_head);
if (res->bf_pos == pos) if (res->bf_base_index == base_index)
break; break;
} }
return res; return res;
@ -43,7 +44,7 @@ static struct buf_head *hash_find(struct buf_brick *brick, loff_t pos)
static inline void hash_insert(struct buf_brick *brick, struct buf_head *elem) static inline void hash_insert(struct buf_brick *brick, struct buf_head *elem)
{ {
int hash = buf_hash(brick, elem->bf_pos); int hash = buf_hash(brick, elem->bf_base_index);
struct list_head *start = &brick->cache_anchors[hash]; struct list_head *start = &brick->cache_anchors[hash];
list_add(&elem->bf_hash_head, start); list_add(&elem->bf_hash_head, start);
} }
@ -296,7 +297,7 @@ static int buf_ref_get(struct buf_output *output, struct mars_ref_object *mref)
traced_lock(&brick->buf_lock, flags); traced_lock(&brick->buf_lock, flags);
again: again:
bf = hash_find(brick, base_pos); bf = hash_find(brick, ((unsigned int)base_pos) >> brick->backing_order);
if (bf) { if (bf) {
atomic_inc(&brick->hit_count); atomic_inc(&brick->hit_count);
} else { } else {
@ -348,6 +349,7 @@ again:
INIT_LIST_HEAD(&bf->bf_again_write_pending_anchor); INIT_LIST_HEAD(&bf->bf_again_write_pending_anchor);
bf->bf_pos = base_pos; bf->bf_pos = base_pos;
bf->bf_base_index = ((unsigned int)base_pos) >> brick->backing_order;
bf->bf_flags = 0; bf->bf_flags = 0;
atomic_set(&bf->bf_count, 0); atomic_set(&bf->bf_count, 0);
@ -808,8 +810,8 @@ static void buf_ref_io(struct buf_output *output, struct mars_ref_object *mref,
if (jiffies - brick->last_jiffies >= 30 * HZ) { if (jiffies - brick->last_jiffies >= 30 * HZ) {
int hit = atomic_read(&brick->hit_count); int hit = atomic_read(&brick->hit_count);
int miss = atomic_read(&brick->miss_count); int miss = atomic_read(&brick->miss_count);
long long perc = hit * 100ll * 100ll / (hit + miss); int perc = hit * 100 * 100 / (hit + miss);
MARS_INF("STATISTICS: current=%d alloc=%d io_pending=%d hit=%d (%lld.%02lld%%) miss=%d io=%d\n", brick->current_count, brick->alloc_count, atomic_read(&brick->nr_io_pending), hit, perc / 100, perc % 100, miss, atomic_read(&brick->io_count)); MARS_INF("STATISTICS: current=%d alloc=%d io_pending=%d hit=%d (%d.%02d%%) miss=%d io=%d\n", brick->current_count, brick->alloc_count, atomic_read(&brick->nr_io_pending), hit, perc / 100, perc % 100, miss, atomic_read(&brick->io_count));
brick->last_jiffies = jiffies; brick->last_jiffies = jiffies;
} }
#endif #endif

View File

@ -60,6 +60,7 @@ struct buf_head {
struct buf_brick *bf_brick; struct buf_brick *bf_brick;
void *bf_data; void *bf_data;
loff_t bf_pos; loff_t bf_pos;
unsigned int bf_base_index;
int bf_flags; int bf_flags;
atomic_t bf_count; atomic_t bf_count;
int bf_bio_status; int bf_bio_status;