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-minhquangbu...@gmail.com/

Thanks,
Nai-Chen Cheng

Reply via email to