Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: [filecopy]When copying large files, the swap partition is heavily used and the UI interface lags severely #2336

Open
wants to merge 1 commit into
base: release/eagle
Choose a base branch
from

Conversation

liyigang1
Copy link
Contributor

Modify the copying method to remove mmap and use copy_file_range

Log: When copying large files, the swap partition is heavily used and the UI interface lags severely
Bug: https://pms.uniontech.com/bug-view-273191.html

@deepin-ci-robot
Copy link

deepin pr auto review

代码审查意见:

  1. doCopyFileByRange函数中,offset_inoffset_outcopy_file_range调用后没有更新,可能会导致无限循环。建议在copy_file_range调用后更新这两个偏移量。

  2. doCopyFileByRange函数中,offset_in = qMin(offset_in, offset_out);这行代码可能会将offset_in设置为负值,这可能会导致后续的文件操作出现问题。建议检查offset_inoffset_out的初始值,确保它们不会在copy_file_range调用后变为负值。

  3. doCopyFileByRange函数中,syncfs(targetFd);调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再进行同步。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致不必要的同步操作。建议在syncfs(targetFd);调用之前添加额外的检查,确保offset_out的值是有效的。

  4. doCopyFileByRange函数中,setTargetPermissions函数调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再设置权限。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致权限设置操作过早。建议在setTargetPermissions函数调用之前添加额外的检查,确保offset_out的值是有效的。

  5. doCopyFileByRange函数中,FileUtils::notifyFileChangeManual函数调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再发送通知。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致通知发送过早。建议在FileUtils::notifyFileChangeManual函数调用之前添加额外的检查,确保offset_out的值是有效的。

  6. doCopyFileByRange函数中,close(sourcFd);close(targetFd);调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再关闭文件描述符。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致文件描述符过早关闭。建议在close(sourcFd);close(targetFd);调用之前添加额外的检查,确保offset_out的值是有效的。

  7. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  8. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  9. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  10. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  11. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  12. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  13. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  14. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  15. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  16. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  17. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  18. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  19. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  20. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  21. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  22. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  23. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  24. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  25. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  26. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  27. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  28. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  29. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  30. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  31. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  32. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用之前添加额外的检查,确保offset_out的值是有效的。

  33. doCopyFileByRange函数中,return NextDo::kDoCopyErrorAddCancel;return NextDo::kDoCopyNext;调用应该在offset_out != fromSize的条件下执行,以确保文件完全写入后再返回结果。但是,如果offset_outcopy_file_range调用后变为负值,那么这个条件可能会被满足,导致返回结果过早。建议在

max-lvs
max-lvs previously approved these changes Oct 19, 2024
@deepin-ci-robot
Copy link

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: liyigang1

The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

1 similar comment
@deepin-ci-robot
Copy link

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: liyigang1

The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

…y used and the UI interface lags severely

Modify the copying method to remove mmap and use copy_file_range

Log: When copying large files, the swap partition is heavily used and the UI interface lags severely
Bug: https://pms.uniontech.com/bug-view-273191.html
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants