上面一篇文章说到: 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中的多个不同的线程去执行了]
后面的代码我们就比较熟悉了