CC: [email protected] CC: [email protected] CC: [email protected] TO: Jens Axboe <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: d4439a1189f93d0ac1eaf0197db8e6b3e197d5c7 commit: f75d118349be055d47407b4ba4ceb98e6437e472 io_uring: harder fdinfo sq/cq ring iterating date: 7 days ago :::::: branch date: 7 hours ago :::::: commit date: 7 days ago config: arm-randconfig-c002-20211031 (attached as .config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 82ed106567063ea269c6d5669278b733e173a42f) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f75d118349be055d47407b4ba4ceb98e6437e472 git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout f75d118349be055d47407b4ba4ceb98e6437e472 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) include/linux/kernel.h:495:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:322:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:310:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:302:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ fs/io_uring.c:9551:8: note: Loop condition is false. Exiting loop de = list_first_entry(&list, struct io_defer_entry, list); ^ include/linux/list.h:522:2: note: expanded from macro 'list_first_entry' list_entry((ptr)->next, type, member) ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ include/linux/kernel.h:495:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:322:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:310:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:300:2: note: expanded from macro '__compiletime_assert' do { \ ^ fs/io_uring.c:9554:3: note: Memory is released kfree(de); ^~~~~~~~~ fs/io_uring.c:9550:2: note: Loop condition is true. Entering loop body while (!list_empty(&list)) { ^ fs/io_uring.c:9551:8: note: Left side of '&&' is false de = list_first_entry(&list, struct io_defer_entry, list); ^ include/linux/list.h:522:2: note: expanded from macro 'list_first_entry' list_entry((ptr)->next, type, member) ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ include/linux/kernel.h:495:61: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ fs/io_uring.c:9551:8: note: Taking false branch de = list_first_entry(&list, struct io_defer_entry, list); ^ include/linux/list.h:522:2: note: expanded from macro 'list_first_entry' list_entry((ptr)->next, type, member) ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ include/linux/kernel.h:495:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:322:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:310:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:302:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ fs/io_uring.c:9551:8: note: Loop condition is false. Exiting loop de = list_first_entry(&list, struct io_defer_entry, list); ^ include/linux/list.h:522:2: note: expanded from macro 'list_first_entry' list_entry((ptr)->next, type, member) ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ include/linux/kernel.h:495:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:322:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:310:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:300:2: note: expanded from macro '__compiletime_assert' do { \ ^ fs/io_uring.c:9553:26: note: Use of memory after it is freed io_req_complete_failed(de->req, -ECANCELED); ^~~~~~~ >> fs/io_uring.c:10086:24: warning: Value stored to 'sqe' during its >> initialization is never read [clang-analyzer-deadcode.DeadStores] struct io_uring_sqe *sqe = &ctx->sq_sqes[sq_idx]; ^~~ ~~~~~~~~~~~~~~~~~~~~~ fs/io_uring.c:10086:24: note: Value stored to 'sqe' during its initialization is never read struct io_uring_sqe *sqe = &ctx->sq_sqes[sq_idx]; ^~~ ~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:135:13: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc] __list_del(entry->prev, entry->next); ^ fs/io_uring.c:9379:28: note: Left side of '&&' is false struct io_ring_ctx *ctx = container_of(work, struct io_ring_ctx, exit_work); ^ include/linux/kernel.h:495:61: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ fs/io_uring.c:9379:28: note: Taking false branch struct io_ring_ctx *ctx = container_of(work, struct io_ring_ctx, exit_work); ^ include/linux/kernel.h:495:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^ include/linux/compiler_types.h:322:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:310:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:302:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ fs/io_uring.c:9379:28: note: Loop condition is false. Exiting loop struct io_ring_ctx *ctx = container_of(work, struct io_ring_ctx, exit_work); ^ include/linux/kernel.h:495:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^ include/linux/compiler_types.h:322:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:310:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:300:2: note: expanded from macro '__compiletime_assert' do { \ ^ fs/io_uring.c:9393:3: note: Calling 'io_uring_try_cancel_requests' io_uring_try_cancel_requests(ctx, NULL, true); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/io_uring.c:9588:31: note: 'task' is null struct io_uring_task *tctx = task ? task->io_uring : NULL; ^~~~ fs/io_uring.c:9588:31: note: '?' condition is false fs/io_uring.c:9590:2: note: Loop condition is true. Entering loop body while (1) { ^ fs/io_uring.c:9594:8: note: 'task' is null if (!task) { ^~~~ fs/io_uring.c:9594:3: note: Taking true branch if (!task) { ^ fs/io_uring.c:9607:8: note: Assuming the condition is false if ((!(ctx->flags & IORING_SETUP_SQPOLL) && cancel_all) || ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/io_uring.c:9607:44: note: Left side of '&&' is false if ((!(ctx->flags & IORING_SETUP_SQPOLL) && cancel_all) || ^ fs/io_uring.c:9608:8: note: Assuming field 'sq_data' is null (ctx->sq_data && ctx->sq_data->thread == current)) { ^~~~~~~~~~~~ fs/io_uring.c:9608:21: note: Left side of '&&' is false (ctx->sq_data && ctx->sq_data->thread == current)) { ^ fs/io_uring.c:9615:10: note: Calling 'io_cancel_defer_files' ret |= io_cancel_defer_files(ctx, task, cancel_all); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/io_uring.c:9540:2: note: Left side of '&&' is false list_for_each_entry_reverse(de, &ctx->defer_list, list) { ^ include/linux/list.h:639:13: note: expanded from macro 'list_for_each_entry_reverse' for (pos = list_last_entry(head, typeof(*pos), member); \ ^ include/linux/list.h:533:2: note: expanded from macro 'list_last_entry' list_entry((ptr)->prev, type, member) ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ include/linux/kernel.h:495:61: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ fs/io_uring.c:9540:2: note: Taking false branch list_for_each_entry_reverse(de, &ctx->defer_list, list) { ^ include/linux/list.h:639:13: note: expanded from macro 'list_for_each_entry_reverse' vim +/sqe +10086 fs/io_uring.c 87ce955b24c994 Jens Axboe 2020-01-30 10051 c072481ded14bc Pavel Begunkov 2021-10-04 10052 static __cold void __io_uring_show_fdinfo(struct io_ring_ctx *ctx, c072481ded14bc Pavel Begunkov 2021-10-04 10053 struct seq_file *m) 87ce955b24c994 Jens Axboe 2020-01-30 10054 { dbbe9c642411c3 Joseph Qi 2020-09-29 10055 struct io_sq_data *sq = NULL; 83f84356bc8f2d Hao Xu 2021-09-13 10056 struct io_overflow_cqe *ocqe; 83f84356bc8f2d Hao Xu 2021-09-13 10057 struct io_rings *r = ctx->rings; 83f84356bc8f2d Hao Xu 2021-09-13 10058 unsigned int sq_mask = ctx->sq_entries - 1, cq_mask = ctx->cq_entries - 1; 83f84356bc8f2d Hao Xu 2021-09-13 10059 unsigned int sq_head = READ_ONCE(r->sq.head); 83f84356bc8f2d Hao Xu 2021-09-13 10060 unsigned int sq_tail = READ_ONCE(r->sq.tail); 83f84356bc8f2d Hao Xu 2021-09-13 10061 unsigned int cq_head = READ_ONCE(r->cq.head); 83f84356bc8f2d Hao Xu 2021-09-13 10062 unsigned int cq_tail = READ_ONCE(r->cq.tail); f75d118349be05 Jens Axboe 2021-10-29 10063 unsigned int sq_entries, cq_entries; fad8e0de4426a7 Jens Axboe 2020-09-28 10064 bool has_lock; 83f84356bc8f2d Hao Xu 2021-09-13 10065 unsigned int i; 83f84356bc8f2d Hao Xu 2021-09-13 10066 83f84356bc8f2d Hao Xu 2021-09-13 10067 /* 83f84356bc8f2d Hao Xu 2021-09-13 10068 * we may get imprecise sqe and cqe info if uring is actively running 83f84356bc8f2d Hao Xu 2021-09-13 10069 * since we get cached_sq_head and cached_cq_tail without uring_lock 83f84356bc8f2d Hao Xu 2021-09-13 10070 * and sq_tail and cq_head are changed by userspace. But it's ok since 83f84356bc8f2d Hao Xu 2021-09-13 10071 * we usually use these info when it is stuck. 83f84356bc8f2d Hao Xu 2021-09-13 10072 */ f75d118349be05 Jens Axboe 2021-10-29 10073 seq_printf(m, "SqMask:\t\t0x%x\n", sq_mask); f75d118349be05 Jens Axboe 2021-10-29 10074 seq_printf(m, "SqHead:\t%u\n", sq_head); f75d118349be05 Jens Axboe 2021-10-29 10075 seq_printf(m, "SqTail:\t%u\n", sq_tail); f75d118349be05 Jens Axboe 2021-10-29 10076 seq_printf(m, "CachedSqHead:\t%u\n", ctx->cached_sq_head); f75d118349be05 Jens Axboe 2021-10-29 10077 seq_printf(m, "CqMask:\t0x%x\n", cq_mask); f75d118349be05 Jens Axboe 2021-10-29 10078 seq_printf(m, "CqHead:\t%u\n", cq_head); f75d118349be05 Jens Axboe 2021-10-29 10079 seq_printf(m, "CqTail:\t%u\n", cq_tail); f75d118349be05 Jens Axboe 2021-10-29 10080 seq_printf(m, "CachedCqTail:\t%u\n", ctx->cached_cq_tail); f75d118349be05 Jens Axboe 2021-10-29 10081 seq_printf(m, "SQEs:\t%u\n", sq_tail - ctx->cached_sq_head); f75d118349be05 Jens Axboe 2021-10-29 10082 sq_entries = min(sq_tail - sq_head, ctx->sq_entries); f75d118349be05 Jens Axboe 2021-10-29 10083 for (i = 0; i < sq_entries; i++) { f75d118349be05 Jens Axboe 2021-10-29 10084 unsigned int entry = i + sq_head; f75d118349be05 Jens Axboe 2021-10-29 10085 unsigned int sq_idx = READ_ONCE(ctx->sq_array[entry & sq_mask]); 83f84356bc8f2d Hao Xu 2021-09-13 @10086 struct io_uring_sqe *sqe = &ctx->sq_sqes[sq_idx]; 83f84356bc8f2d Hao Xu 2021-09-13 10087 f75d118349be05 Jens Axboe 2021-10-29 10088 if (sq_idx > sq_mask) f75d118349be05 Jens Axboe 2021-10-29 10089 continue; f75d118349be05 Jens Axboe 2021-10-29 10090 sqe = &ctx->sq_sqes[sq_idx]; 83f84356bc8f2d Hao Xu 2021-09-13 10091 seq_printf(m, "%5u: opcode:%d, fd:%d, flags:%x, user_data:%llu\n", f75d118349be05 Jens Axboe 2021-10-29 10092 sq_idx, sqe->opcode, sqe->fd, sqe->flags, f75d118349be05 Jens Axboe 2021-10-29 10093 sqe->user_data); 83f84356bc8f2d Hao Xu 2021-09-13 10094 } f75d118349be05 Jens Axboe 2021-10-29 10095 seq_printf(m, "CQEs:\t%u\n", cq_tail - cq_head); f75d118349be05 Jens Axboe 2021-10-29 10096 cq_entries = min(cq_tail - cq_head, ctx->cq_entries); f75d118349be05 Jens Axboe 2021-10-29 10097 for (i = 0; i < cq_entries; i++) { f75d118349be05 Jens Axboe 2021-10-29 10098 unsigned int entry = i + cq_head; f75d118349be05 Jens Axboe 2021-10-29 10099 struct io_uring_cqe *cqe = &r->cqes[entry & cq_mask]; 83f84356bc8f2d Hao Xu 2021-09-13 10100 83f84356bc8f2d Hao Xu 2021-09-13 10101 seq_printf(m, "%5u: user_data:%llu, res:%d, flag:%x\n", f75d118349be05 Jens Axboe 2021-10-29 10102 entry & cq_mask, cqe->user_data, cqe->res, f75d118349be05 Jens Axboe 2021-10-29 10103 cqe->flags); 83f84356bc8f2d Hao Xu 2021-09-13 10104 } 87ce955b24c994 Jens Axboe 2020-01-30 10105 fad8e0de4426a7 Jens Axboe 2020-09-28 10106 /* fad8e0de4426a7 Jens Axboe 2020-09-28 10107 * Avoid ABBA deadlock between the seq lock and the io_uring mutex, fad8e0de4426a7 Jens Axboe 2020-09-28 10108 * since fdinfo case grabs it in the opposite direction of normal use fad8e0de4426a7 Jens Axboe 2020-09-28 10109 * cases. If we fail to get the lock, we just don't iterate any fad8e0de4426a7 Jens Axboe 2020-09-28 10110 * structures that could be going away outside the io_uring mutex. fad8e0de4426a7 Jens Axboe 2020-09-28 10111 */ fad8e0de4426a7 Jens Axboe 2020-09-28 10112 has_lock = mutex_trylock(&ctx->uring_lock); fad8e0de4426a7 Jens Axboe 2020-09-28 10113 5f3f26f98ae484 Jens Axboe 2021-02-25 10114 if (has_lock && (ctx->flags & IORING_SETUP_SQPOLL)) { dbbe9c642411c3 Joseph Qi 2020-09-29 10115 sq = ctx->sq_data; 5f3f26f98ae484 Jens Axboe 2021-02-25 10116 if (!sq->thread) 5f3f26f98ae484 Jens Axboe 2021-02-25 10117 sq = NULL; 5f3f26f98ae484 Jens Axboe 2021-02-25 10118 } dbbe9c642411c3 Joseph Qi 2020-09-29 10119 dbbe9c642411c3 Joseph Qi 2020-09-29 10120 seq_printf(m, "SqThread:\t%d\n", sq ? task_pid_nr(sq->thread) : -1); dbbe9c642411c3 Joseph Qi 2020-09-29 10121 seq_printf(m, "SqThreadCpu:\t%d\n", sq ? task_cpu(sq->thread) : -1); 87ce955b24c994 Jens Axboe 2020-01-30 10122 seq_printf(m, "UserFiles:\t%u\n", ctx->nr_user_files); fad8e0de4426a7 Jens Axboe 2020-09-28 10123 for (i = 0; has_lock && i < ctx->nr_user_files; i++) { 7b29f92da377c3 Jens Axboe 2021-03-12 10124 struct file *f = io_file_from_index(ctx, i); 87ce955b24c994 Jens Axboe 2020-01-30 10125 87ce955b24c994 Jens Axboe 2020-01-30 10126 if (f) 87ce955b24c994 Jens Axboe 2020-01-30 10127 seq_printf(m, "%5u: %s\n", i, file_dentry(f)->d_iname); 87ce955b24c994 Jens Axboe 2020-01-30 10128 else 87ce955b24c994 Jens Axboe 2020-01-30 10129 seq_printf(m, "%5u: <none>\n", i); 87ce955b24c994 Jens Axboe 2020-01-30 10130 } 87ce955b24c994 Jens Axboe 2020-01-30 10131 seq_printf(m, "UserBufs:\t%u\n", ctx->nr_user_bufs); fad8e0de4426a7 Jens Axboe 2020-09-28 10132 for (i = 0; has_lock && i < ctx->nr_user_bufs; i++) { 41edf1a5ec967b Pavel Begunkov 2021-04-25 10133 struct io_mapped_ubuf *buf = ctx->user_bufs[i]; 4751f53d74a688 Pavel Begunkov 2021-04-01 10134 unsigned int len = buf->ubuf_end - buf->ubuf; 87ce955b24c994 Jens Axboe 2020-01-30 10135 4751f53d74a688 Pavel Begunkov 2021-04-01 10136 seq_printf(m, "%5u: 0x%llx/%u\n", i, buf->ubuf, len); 87ce955b24c994 Jens Axboe 2020-01-30 10137 } 61cf93700fe635 Matthew Wilcox (Oracle 2021-03-08 10138) if (has_lock && !xa_empty(&ctx->personalities)) { 61cf93700fe635 Matthew Wilcox (Oracle 2021-03-08 10139) unsigned long index; 61cf93700fe635 Matthew Wilcox (Oracle 2021-03-08 10140) const struct cred *cred; 61cf93700fe635 Matthew Wilcox (Oracle 2021-03-08 10141) 87ce955b24c994 Jens Axboe 2020-01-30 10142 seq_printf(m, "Personalities:\n"); 61cf93700fe635 Matthew Wilcox (Oracle 2021-03-08 10143) xa_for_each(&ctx->personalities, index, cred) 61cf93700fe635 Matthew Wilcox (Oracle 2021-03-08 10144) io_uring_show_cred(m, index, cred); 87ce955b24c994 Jens Axboe 2020-01-30 10145 } 83f84356bc8f2d Hao Xu 2021-09-13 10146 if (has_lock) 83f84356bc8f2d Hao Xu 2021-09-13 10147 mutex_unlock(&ctx->uring_lock); 83f84356bc8f2d Hao Xu 2021-09-13 10148 83f84356bc8f2d Hao Xu 2021-09-13 10149 seq_puts(m, "PollList:\n"); 79ebeaee8a21a0 Jens Axboe 2021-08-10 10150 spin_lock(&ctx->completion_lock); d7718a9d25a614 Jens Axboe 2020-02-14 10151 for (i = 0; i < (1U << ctx->cancel_hash_bits); i++) { d7718a9d25a614 Jens Axboe 2020-02-14 10152 struct hlist_head *list = &ctx->cancel_hash[i]; d7718a9d25a614 Jens Axboe 2020-02-14 10153 struct io_kiocb *req; d7718a9d25a614 Jens Axboe 2020-02-14 10154 d7718a9d25a614 Jens Axboe 2020-02-14 10155 hlist_for_each_entry(req, list, hash_node) d7718a9d25a614 Jens Axboe 2020-02-14 10156 seq_printf(m, " op=%d, task_works=%d\n", req->opcode, d7718a9d25a614 Jens Axboe 2020-02-14 10157 req->task->task_works != NULL); d7718a9d25a614 Jens Axboe 2020-02-14 10158 } 83f84356bc8f2d Hao Xu 2021-09-13 10159 83f84356bc8f2d Hao Xu 2021-09-13 10160 seq_puts(m, "CqOverflowList:\n"); 83f84356bc8f2d Hao Xu 2021-09-13 10161 list_for_each_entry(ocqe, &ctx->cq_overflow_list, list) { 83f84356bc8f2d Hao Xu 2021-09-13 10162 struct io_uring_cqe *cqe = &ocqe->cqe; 83f84356bc8f2d Hao Xu 2021-09-13 10163 83f84356bc8f2d Hao Xu 2021-09-13 10164 seq_printf(m, " user_data=%llu, res=%d, flags=%x\n", 83f84356bc8f2d Hao Xu 2021-09-13 10165 cqe->user_data, cqe->res, cqe->flags); 83f84356bc8f2d Hao Xu 2021-09-13 10166 83f84356bc8f2d Hao Xu 2021-09-13 10167 } 83f84356bc8f2d Hao Xu 2021-09-13 10168 79ebeaee8a21a0 Jens Axboe 2021-08-10 10169 spin_unlock(&ctx->completion_lock); 87ce955b24c994 Jens Axboe 2020-01-30 10170 } 87ce955b24c994 Jens Axboe 2020-01-30 10171 :::::: The code at line 10086 was first introduced by commit :::::: 83f84356bc8f2dda9d0c9c7edb94decf71a36d26 io_uring: add more uring info to fdinfo for debug :::::: TO: Hao Xu <[email protected]> :::::: CC: Jens Axboe <[email protected]> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
