On 2025-09-09 09:20, Jakub Kicinski wrote:
Is it just a GCC warning or rather a combination of GCC and some misguided glibc decorator to force check the return of read/write? Naming the compiler versions and the warning flag which enables this would be useful. We don't see it building with normal warning level today.
Thanks for the review!
I found that the warnings occur under specific build conditions that explain why it's not consistently seen:
The warning appears when manually cleaning and rebuilding net/lib/: cd tools/testing/selftests/net/lib/ make clean && make
The warning messages are:
ksft.h: In function ‘ksft_ready’: ksft.h:27:9: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
ksft.h: In function ‘ksft_wait’: ksft.h:51:9: warning: ignoring return value of ‘read’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
This is triggered by: - GCC version: 14.2.0 - -Wall flag (which includes -Wunused-result)
During investigation of this unused result warning and following up on the patch by Minh-Quang Bui [1], I also discovered an issue with the selftests build system: running 'make clean' from tools/testing/selftests/ doesn't clean objects in net/lib/ because the clean target doesn't include $(INSTALL_DEPS_TARGET). This explains why net/lib compiled objects persist after cleaning and why the warning only appears with manual cleaning of that specific directory.
Can you not cast the read() to void directly?
Sure. Direct casting is much cleaner. I haven't noticed it... Thanks for the advice.
Would it be acceptable to: 1. Send a v2 of this patch with the direct void casting approach and more precise commit message? 2. Send a separate patch to fix the selftests Makefile clean target to include $(INSTALL_DEPS_TARGET)?
[1] https://lore.kernel.org/all/20250601142914.13379-1-minhquangbui99@gmail.com/
Thanks, Nai-Chen Cheng