struct wb_domain

来源:互联网 发布:深圳咫尺网络 编辑:程序博客网 时间:2024/05/29 12:31


/*
 * A wb_domain represents a domain that wb's (bdi_writeback's) belong to
 * and are measured against each other in.  There always is one global
 * domain, global_wb_domain, that every wb in the system is a member of.
 * This allows measuring the relative bandwidth of each wb to distribute
 * dirtyable memory accordingly.
 */
struct wb_domain {
spinlock_t lock;
struct fprop_global completions;
struct timer_list period_timer;/* timer for aging of completions */
unsigned long period_time;
unsigned long dirty_limit_tstamp;
unsigned long dirty_limit;

};




static inline void wb_domain_size_changed(struct wb_domain *dom)
{
spin_lock(&dom->lock);
dom->dirty_limit_tstamp = jiffies;
dom->dirty_limit = 0;
spin_unlock(&dom->lock);
}


int wb_domain_init(struct wb_domain *dom, gfp_t gfp)
{
memset(dom, 0, sizeof(*dom));


spin_lock_init(&dom->lock);


init_timer_deferrable(&dom->period_timer);
dom->period_timer.function = writeout_period;
dom->period_timer.data = (unsigned long)dom;



dom->dirty_limit_tstamp = jiffies;


return fprop_global_init(&dom->completions, gfp);
}



int fprop_global_init(struct fprop_global *p, gfp_t gfp)
{
int err;


p->period = 0;
/* Use 1 to avoid dealing with periods with 0 events... */
err = percpu_counter_init(&p->events, 1, gfp);

if (err)
return err;
seqcount_init(&p->sequence);
return 0;
}

0 0
原创粉丝点击