[<prev] [next>] [day] [month] [year] [list]
Message-ID: <202201260028.1emkcjHZ-lkp@intel.com>
Date: Wed, 26 Jan 2022 03:16:58 +0800
From: kernel test robot <lkp@...el.com>
To: Christoph Hellwig <hch@....de>
Cc: kbuild-all@...ts.01.org, linux-kernel@...r.kernel.org,
Jens Axboe <axboe@...nel.dk>,
Johannes Thumshirn <johannes.thumshirn@....com>
Subject: block/blk-mq.c:1071:36: sparse: sparse: cast from restricted
blk_status_t
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: a08b41ab9e2e468647f78eb17c28e29b93006394
commit: 4054cff92c357813b6861b622122b344990f7e31 block: remove blk-exec.c
date: 8 weeks ago
config: csky-randconfig-s032-20220120 (https://download.01.org/0day-ci/archive/20220126/202201260028.1emkcjHZ-lkp@intel.com/config)
compiler: csky-linux-gcc (GCC) 11.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.4-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4054cff92c357813b6861b622122b344990f7e31
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 4054cff92c357813b6861b622122b344990f7e31
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=csky SHELL=/bin/bash
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@...el.com>
sparse warnings: (new ones prefixed by >>)
>> block/blk-mq.c:1071:36: sparse: sparse: cast from restricted blk_status_t
>> block/blk-mq.c:1164:17: sparse: sparse: cast to restricted blk_status_t
vim +1071 block/blk-mq.c
1061
1062 /**
1063 * blk_end_sync_rq - executes a completion event on a request
1064 * @rq: request to complete
1065 * @error: end I/O status of the request
1066 */
1067 static void blk_end_sync_rq(struct request *rq, blk_status_t error)
1068 {
1069 struct completion *waiting = rq->end_io_data;
1070
> 1071 rq->end_io_data = (void *)(uintptr_t)error;
1072
1073 /*
1074 * complete last, if this is a stack request the process (and thus
1075 * the rq pointer) could be invalid right after this complete()
1076 */
1077 complete(waiting);
1078 }
1079
1080 /**
1081 * blk_execute_rq_nowait - insert a request to I/O scheduler for execution
1082 * @bd_disk: matching gendisk
1083 * @rq: request to insert
1084 * @at_head: insert request at head or tail of queue
1085 * @done: I/O completion handler
1086 *
1087 * Description:
1088 * Insert a fully prepared request at the back of the I/O scheduler queue
1089 * for execution. Don't wait for completion.
1090 *
1091 * Note:
1092 * This function will invoke @done directly if the queue is dead.
1093 */
1094 void blk_execute_rq_nowait(struct gendisk *bd_disk, struct request *rq,
1095 int at_head, rq_end_io_fn *done)
1096 {
1097 WARN_ON(irqs_disabled());
1098 WARN_ON(!blk_rq_is_passthrough(rq));
1099
1100 rq->rq_disk = bd_disk;
1101 rq->end_io = done;
1102
1103 blk_account_io_start(rq);
1104
1105 /*
1106 * don't check dying flag for MQ because the request won't
1107 * be reused after dying flag is set
1108 */
1109 blk_mq_sched_insert_request(rq, at_head, true, false);
1110 }
1111 EXPORT_SYMBOL_GPL(blk_execute_rq_nowait);
1112
1113 static bool blk_rq_is_poll(struct request *rq)
1114 {
1115 if (!rq->mq_hctx)
1116 return false;
1117 if (rq->mq_hctx->type != HCTX_TYPE_POLL)
1118 return false;
1119 if (WARN_ON_ONCE(!rq->bio))
1120 return false;
1121 return true;
1122 }
1123
1124 static void blk_rq_poll_completion(struct request *rq, struct completion *wait)
1125 {
1126 do {
1127 bio_poll(rq->bio, NULL, 0);
1128 cond_resched();
1129 } while (!completion_done(wait));
1130 }
1131
1132 /**
1133 * blk_execute_rq - insert a request into queue for execution
1134 * @bd_disk: matching gendisk
1135 * @rq: request to insert
1136 * @at_head: insert request at head or tail of queue
1137 *
1138 * Description:
1139 * Insert a fully prepared request at the back of the I/O scheduler queue
1140 * for execution and wait for completion.
1141 * Return: The blk_status_t result provided to blk_mq_end_request().
1142 */
1143 blk_status_t blk_execute_rq(struct gendisk *bd_disk, struct request *rq,
1144 int at_head)
1145 {
1146 DECLARE_COMPLETION_ONSTACK(wait);
1147 unsigned long hang_check;
1148
1149 rq->end_io_data = &wait;
1150 blk_execute_rq_nowait(bd_disk, rq, at_head, blk_end_sync_rq);
1151
1152 /* Prevent hang_check timer from firing at us during very long I/O */
1153 hang_check = sysctl_hung_task_timeout_secs;
1154
1155 if (blk_rq_is_poll(rq))
1156 blk_rq_poll_completion(rq, &wait);
1157 else if (hang_check)
1158 while (!wait_for_completion_io_timeout(&wait,
1159 hang_check * (HZ/2)))
1160 ;
1161 else
1162 wait_for_completion_io(&wait);
1163
> 1164 return (blk_status_t)(uintptr_t)rq->end_io_data;
1165 }
1166 EXPORT_SYMBOL(blk_execute_rq);
1167
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Powered by blists - more mailing lists