file-exit-unreg.c 999 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include "../config-host.h"
  2. /* SPDX-License-Identifier: MIT */
  3. /*
  4. * Description: test that a defer task_work file with tags unregistration
  5. * doesn't trigger a lockdep violation
  6. *
  7. */
  8. #include <stdio.h>
  9. #include <inttypes.h>
  10. #include <stdlib.h>
  11. #include <unistd.h>
  12. #include "liburing.h"
  13. #include "helpers.h"
  14. int main(int argc, char *argv[])
  15. {
  16. __u64 tags[2] = { 1, 2 };
  17. struct io_uring ring;
  18. int fds[2], ret;
  19. if (argc > 1)
  20. return T_EXIT_SKIP;
  21. if (pipe(fds) < 0) {
  22. perror("pipe");
  23. return 1;
  24. }
  25. ret = io_uring_queue_init(4, &ring, IORING_SETUP_SINGLE_ISSUER|IORING_SETUP_DEFER_TASKRUN);
  26. if (ret == -EINVAL) {
  27. return T_EXIT_SKIP;
  28. } else if (ret < 0) {
  29. fprintf(stderr, "queue_init: %d\n", ret);
  30. return T_EXIT_FAIL;
  31. }
  32. ret = io_uring_register_files_tags(&ring, fds, tags, 2);
  33. if (ret == -EINVAL) {
  34. return T_EXIT_SKIP;
  35. } else if (ret < 0) {
  36. fprintf(stderr, "file_register_init: %d\n", ret);
  37. return T_EXIT_FAIL;
  38. }
  39. io_uring_queue_exit(&ring);
  40. sleep(1);
  41. return 0;
  42. }