原问题代码中,会下 xfs 预留块相关的 ioctl,入参是一个较大的数,xfs_reserve_blocks 函数的执行逻辑是,如果当前传入的预留块大小比整个文件系统的可用块还要大,也将传入的预留块赋值给 mp->m_resblks,是因为后续的 xfs_mod_fdblocks 函数会去适配。
但是 当前 xfs_mod_fdblocks 会去计算 mp->m_resblks - mp->m_resblks_avail,并强转为 long long,而前两者都是 unsigned long long类型,如果二者之差非常大,最高符号位为1,会使得计算出的结果是一个较大的负值,后续修改 mp->m_fdblocks 会将其变为一个非常大的值,使得 xfs 每次前台写时判断 fdblocks 都是有空间的,但是后台回写会没有空间,导致了告警。
需要修改 xfs_mod_fdblocks 函数,修改有关数据类型。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
登录 后才可以发表评论