workqueue机制分析之wb_workfn函数

上面一篇文章说到: process_one_work中最重要的一件事情就是worker->current_func(work);

这里就具体到一项很具体的任务了,由于我要研究文件系统嘛,所以很自然就到具体的任务里:

void wb_workfn(struct work_struct *work)

首先,work变量只是个助推器,真正的主子在哪呢?

struct bdi_writeback *wb = container_of(to_delayed_work(work),

              struct bdi_writeback, dwok);

根据 bdi_writeback, 我们就能找到这一连串脏的inode了,然后写回里面的数据了[终于喘口气了,因为我们终于可以接触一些和文件系统相关的概念了]

[还有一个点是格外受启发的, 上面说到一个work_poll可以对应着多个kworker, 想想如果此时文件系统中脏页很多, 那么work就会很多, 这样的话,不同的work可能就由这个pool中的多个不同的线程去执行了]

后面的代码我们就比较熟悉了

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzgspp.html