From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============4077892008876445353==" MIME-Version: 1.0 From: kernel test robot To: kbuild-all@lists.01.org Subject: Re: [PATCH 2/4] kernfs: add initial failure injection support Date: Fri, 02 Jul 2021 15:00:25 +0800 Message-ID: <202107021450.qSvbj06A-lkp@intel.com> In-Reply-To: <20210702050543.2693141-3-mcgrof@kernel.org> List-Id: --===============4077892008876445353== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi Luis, I love your patch! Yet something to improve: [auto build test ERROR on kselftest/next] [also build test ERROR on driver-core/driver-core-testing char-misc/char-mi= sc-testing linus/master v5.13 next-20210701] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Luis-Chamberlain/selftests= -add-a-new-test-driver-for-sysfs/20210702-130705 base: https://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselfte= st.git next config: um-x86_64_defconfig (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 reproduce (this is a W=3D1 build): # https://github.com/0day-ci/linux/commit/fcddd9018e5563327904b3626= 42d8f5156b73298 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Luis-Chamberlain/selftests-add-a-n= ew-test-driver-for-sysfs/20210702-130705 git checkout fcddd9018e5563327904b362642d8f5156b73298 # save the attached .config to linux build tree mkdir build_dir make W=3D1 O=3Dbuild_dir ARCH=3Dum SUBARCH=3Dx86_64 SHELL=3D/bin/ba= sh If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All errors (new ones prefixed by >>): fs/kernfs/file.c: In function 'kernfs_fop_write_iter': >> fs/kernfs/file.c:262:62: error: macro "kernfs_debug_should_wait" passed = 2 arguments, but takes just 1 262 | if (kernfs_debug_should_wait(kernfs_fop_write_iter, at_start)) | ^ In file included from fs/kernfs/file.c:19: fs/kernfs/kernfs-internal.h:199: note: macro "kernfs_debug_should_wait" = defined here 199 | #define kernfs_debug_should_wait(when) (false) | = >> fs/kernfs/file.c:262:6: error: 'kernfs_debug_should_wait' undeclared (fi= rst use in this function); did you mean 'kernfs_debug_wait'? 262 | if (kernfs_debug_should_wait(kernfs_fop_write_iter, at_start)) | ^~~~~~~~~~~~~~~~~~~~~~~~ | kernfs_debug_wait fs/kernfs/file.c:262:6: note: each undeclared identifier is reported onl= y once for each function it appears in fs/kernfs/file.c:286:66: error: macro "kernfs_debug_should_wait" passed = 2 arguments, but takes just 1 286 | if (kernfs_debug_should_wait(kernfs_fop_write_iter, before_mute= x)) | = ^ In file included from fs/kernfs/file.c:19: fs/kernfs/kernfs-internal.h:199: note: macro "kernfs_debug_should_wait" = defined here 199 | #define kernfs_debug_should_wait(when) (false) | = fs/kernfs/file.c:295:65: error: macro "kernfs_debug_should_wait" passed = 2 arguments, but takes just 1 295 | if (kernfs_debug_should_wait(kernfs_fop_write_iter, after_mutex= )) | ^ In file included from fs/kernfs/file.c:19: fs/kernfs/kernfs-internal.h:199: note: macro "kernfs_debug_should_wait" = defined here 199 | #define kernfs_debug_should_wait(when) (false) | = fs/kernfs/file.c:304:66: error: macro "kernfs_debug_should_wait" passed = 2 arguments, but takes just 1 304 | if (kernfs_debug_should_wait(kernfs_fop_write_iter, after_activ= e)) | = ^ In file included from fs/kernfs/file.c:19: fs/kernfs/kernfs-internal.h:199: note: macro "kernfs_debug_should_wait" = defined here 199 | #define kernfs_debug_should_wait(when) (false) | = vim +/kernfs_debug_should_wait +262 fs/kernfs/file.c 244 = 245 /* 246 * Copy data in from userland and pass it to the matching kernfs wri= te 247 * operation. 248 * 249 * There is no easy way for us to know if userspace is only doing a = partial 250 * write, so we don't support them. We expect the entire buffer to c= ome on 251 * the first write. Hint: if you're writing a value, first read the= file, 252 * modify only the the value you're changing, then write entire buff= er 253 * back. 254 */ 255 static ssize_t kernfs_fop_write_iter(struct kiocb *iocb, struct iov_= iter *iter) 256 { 257 struct kernfs_open_file *of =3D kernfs_of(iocb->ki_filp); 258 ssize_t len =3D iov_iter_count(iter); 259 const struct kernfs_ops *ops; 260 char *buf; 261 = > 262 if (kernfs_debug_should_wait(kernfs_fop_write_iter, at_start)) 263 kernfs_debug_wait(); 264 = 265 if (of->atomic_write_len) { 266 if (len > of->atomic_write_len) 267 return -E2BIG; 268 } else { 269 len =3D min_t(size_t, len, PAGE_SIZE); 270 } 271 = 272 buf =3D of->prealloc_buf; 273 if (buf) 274 mutex_lock(&of->prealloc_mutex); 275 else 276 buf =3D kmalloc(len + 1, GFP_KERNEL); 277 if (!buf) 278 return -ENOMEM; 279 = 280 if (copy_from_iter(buf, len, iter) !=3D len) { 281 len =3D -EFAULT; 282 goto out_free; 283 } 284 buf[len] =3D '\0'; /* guarantee string termination */ 285 = 286 if (kernfs_debug_should_wait(kernfs_fop_write_iter, before_mutex)) 287 kernfs_debug_wait(); 288 = 289 /* 290 * @of->mutex nests outside active ref and is used both to ensure t= hat 291 * the ops aren't called concurrently for the same open file. 292 */ 293 mutex_lock(&of->mutex); 294 = 295 if (kernfs_debug_should_wait(kernfs_fop_write_iter, after_mutex)) 296 kernfs_debug_wait(); 297 = 298 if (!kernfs_get_active(of->kn)) { 299 mutex_unlock(&of->mutex); 300 len =3D -ENODEV; 301 goto out_free; 302 } 303 = 304 if (kernfs_debug_should_wait(kernfs_fop_write_iter, after_active)) 305 kernfs_debug_wait(); 306 = 307 ops =3D kernfs_ops(of->kn); 308 if (ops->write) 309 len =3D ops->write(of, buf, len, iocb->ki_pos); 310 else 311 len =3D -EINVAL; 312 = 313 kernfs_put_active(of->kn); 314 mutex_unlock(&of->mutex); 315 = 316 if (len > 0) 317 iocb->ki_pos +=3D len; 318 = 319 out_free: 320 if (buf =3D=3D of->prealloc_buf) 321 mutex_unlock(&of->prealloc_mutex); 322 else 323 kfree(buf); 324 return len; 325 } 326 = --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org --===============4077892008876445353== Content-Type: application/gzip MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="config.gz" 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 --===============4077892008876445353==--