这个函数处理处理writepage的返回值,writepage函数调用文件系统写入的函数,然后返回写入的状态。通过内核源码的查看:
res = mapping->a_ops->writepage(page, &wbc); if (res < 0) handle_write_error(mapping, page, res); if (res == WRITEPAGE_ACTIVATE) { ClearPageReclaim(page); return PAGE_ACTIVATE; } if (!PageWriteback(page)) { /* synchronous write or broken a_ops? */ ClearPageReclaim(page); }
如下是handle_write_error函数:
lock_page(page); if (page_mapping(page) == mapping) { if (error == -ENOSPC) set_bit(AS_ENOSPC, &mapping->flags); else set_bit(AS_EIO, &mapping->flags); } unlock_page(page);
从这里我们接收到一个错误:ENOSPC no space没有空间
AS_EIO 一个写入错误
假设写入错误有以下情况:磁盘离线,磁盘线路中断等等。但是我们回顾到上面,当我们发现IO写入异常,我们什么也没有做,只是简单做了PageWriteback是否是写入的检查,如果不写入,那这个页是否可以被释放,显然,没有。
如果页既不能够写入,也没有被释放,那就是永久不能够被系统回收利用,这就会导致物理内存耗尽,导致系统崩溃的异常。
时间: 2024-12-16 11:31:35