* [amir73il:sb_write_barrier 21/28] io_uring/rw.c:975 io_write() error: uninitialized symbol 'idx'.
@ 2022-11-26 19:00 Dan Carpenter
0 siblings, 0 replies; only message in thread
From: Dan Carpenter @ 2022-11-26 19:00 UTC (permalink / raw)
To: oe-kbuild, Amir Goldstein; +Cc: lkp, oe-kbuild-all
tree: https://github.com/amir73il/linux sb_write_barrier
head: 8d20f02c9b77b14aa0a4221c38a9d9e1ee282612
commit: 4e3fa2e567acf8f672bc009cb106a529073a0903 [21/28] vfs: prepare for pre-modify permission events on aio write
config: x86_64-randconfig-m001
compiler: gcc-11 (Debian 11.3.0-8) 11.3.0
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
smatch warnings:
io_uring/rw.c:975 io_write() error: uninitialized symbol 'idx'.
vim +/idx +975 io_uring/rw.c
f3b44f92e59a80 Jens Axboe 2022-06-13 844 int io_write(struct io_kiocb *req, unsigned int issue_flags)
f3b44f92e59a80 Jens Axboe 2022-06-13 845 {
f2ccb5aed7bce1 Stefan Metzmacher 2022-08-11 846 struct io_rw *rw = io_kiocb_to_cmd(req, struct io_rw);
f3b44f92e59a80 Jens Axboe 2022-06-13 847 struct io_rw_state __s, *s = &__s;
f3b44f92e59a80 Jens Axboe 2022-06-13 848 struct iovec *iovec;
f3b44f92e59a80 Jens Axboe 2022-06-13 849 struct kiocb *kiocb = &rw->kiocb;
f3b44f92e59a80 Jens Axboe 2022-06-13 850 bool force_nonblock = issue_flags & IO_URING_F_NONBLOCK;
f3b44f92e59a80 Jens Axboe 2022-06-13 851 ssize_t ret, ret2;
f3b44f92e59a80 Jens Axboe 2022-06-13 852 loff_t *ppos;
4e3fa2e567acf8 Amir Goldstein 2022-11-22 853 int idx;
f3b44f92e59a80 Jens Axboe 2022-06-13 854
f3b44f92e59a80 Jens Axboe 2022-06-13 855 if (!req_has_async_data(req)) {
f3b44f92e59a80 Jens Axboe 2022-06-13 856 ret = io_import_iovec(WRITE, req, &iovec, s, issue_flags);
f3b44f92e59a80 Jens Axboe 2022-06-13 857 if (unlikely(ret < 0))
f3b44f92e59a80 Jens Axboe 2022-06-13 858 return ret;
f3b44f92e59a80 Jens Axboe 2022-06-13 859 } else {
f3b44f92e59a80 Jens Axboe 2022-06-13 860 struct io_async_rw *io = req->async_data;
f3b44f92e59a80 Jens Axboe 2022-06-13 861
f3b44f92e59a80 Jens Axboe 2022-06-13 862 s = &io->s;
f3b44f92e59a80 Jens Axboe 2022-06-13 863 iov_iter_restore(&s->iter, &s->iter_state);
f3b44f92e59a80 Jens Axboe 2022-06-13 864 iovec = NULL;
f3b44f92e59a80 Jens Axboe 2022-06-13 865 }
f3b44f92e59a80 Jens Axboe 2022-06-13 866 ret = io_rw_init_file(req, FMODE_WRITE);
f3b44f92e59a80 Jens Axboe 2022-06-13 867 if (unlikely(ret)) {
f3b44f92e59a80 Jens Axboe 2022-06-13 868 kfree(iovec);
f3b44f92e59a80 Jens Axboe 2022-06-13 869 return ret;
f3b44f92e59a80 Jens Axboe 2022-06-13 870 }
f3b44f92e59a80 Jens Axboe 2022-06-13 871 req->cqe.res = iov_iter_count(&s->iter);
f3b44f92e59a80 Jens Axboe 2022-06-13 872
f3b44f92e59a80 Jens Axboe 2022-06-13 873 if (force_nonblock) {
f3b44f92e59a80 Jens Axboe 2022-06-13 874 /* If the file doesn't support async, just async punt */
f3b44f92e59a80 Jens Axboe 2022-06-13 875 if (unlikely(!io_file_supports_nowait(req)))
f3b44f92e59a80 Jens Axboe 2022-06-13 876 goto copy_iov;
^^^^^^^^^^^^^
f3b44f92e59a80 Jens Axboe 2022-06-13 877
4e17aaab54359f Stefan Roesch 2022-06-16 878 /* File path supports NOWAIT for non-direct_IO only for block devices. */
4e17aaab54359f Stefan Roesch 2022-06-16 879 if (!(kiocb->ki_flags & IOCB_DIRECT) &&
4e17aaab54359f Stefan Roesch 2022-06-16 880 !(kiocb->ki_filp->f_mode & FMODE_BUF_WASYNC) &&
f3b44f92e59a80 Jens Axboe 2022-06-13 881 (req->flags & REQ_F_ISREG))
f3b44f92e59a80 Jens Axboe 2022-06-13 882 goto copy_iov;
"idx" not initialized on these gotos.
f3b44f92e59a80 Jens Axboe 2022-06-13 883
f3b44f92e59a80 Jens Axboe 2022-06-13 884 kiocb->ki_flags |= IOCB_NOWAIT;
f3b44f92e59a80 Jens Axboe 2022-06-13 885 } else {
f3b44f92e59a80 Jens Axboe 2022-06-13 886 /* Ensure we clear previously set non-block flag */
f3b44f92e59a80 Jens Axboe 2022-06-13 887 kiocb->ki_flags &= ~IOCB_NOWAIT;
f3b44f92e59a80 Jens Axboe 2022-06-13 888 }
f3b44f92e59a80 Jens Axboe 2022-06-13 889
f3b44f92e59a80 Jens Axboe 2022-06-13 890 ppos = io_kiocb_update_pos(req);
f3b44f92e59a80 Jens Axboe 2022-06-13 891
f3b44f92e59a80 Jens Axboe 2022-06-13 892 ret = rw_verify_area(WRITE, req->file, ppos, req->cqe.res);
df9830d883b914 Pavel Begunkov 2022-06-16 893 if (unlikely(ret)) {
df9830d883b914 Pavel Begunkov 2022-06-16 894 kfree(iovec);
df9830d883b914 Pavel Begunkov 2022-06-16 895 return ret;
df9830d883b914 Pavel Begunkov 2022-06-16 896 }
f3b44f92e59a80 Jens Axboe 2022-06-13 897
f3b44f92e59a80 Jens Axboe 2022-06-13 898 /*
4e3fa2e567acf8 Amir Goldstein 2022-11-22 899 * Open-code file_start_write_area() to grab freeze protection,
f3b44f92e59a80 Jens Axboe 2022-06-13 900 * which will be released by another thread in
f3b44f92e59a80 Jens Axboe 2022-06-13 901 * io_complete_rw(). Fool lockdep by telling it the lock got
f3b44f92e59a80 Jens Axboe 2022-06-13 902 * released so that it doesn't complain about the held lock when
f3b44f92e59a80 Jens Axboe 2022-06-13 903 * we return to userspace.
f3b44f92e59a80 Jens Axboe 2022-06-13 904 */
4e3fa2e567acf8 Amir Goldstein 2022-11-22 905 idx = __file_start_aio_write_srcu(req->file);
4e3fa2e567acf8 Amir Goldstein 2022-11-22 906 ret = fsnotify_file_perm(req->file, MAY_WRITE, ppos, req->cqe.res);
4e3fa2e567acf8 Amir Goldstein 2022-11-22 907 if (ret) {
4e3fa2e567acf8 Amir Goldstein 2022-11-22 908 __file_end_aio_write_srcu(req->file, idx);
4e3fa2e567acf8 Amir Goldstein 2022-11-22 909 return ret;
4e3fa2e567acf8 Amir Goldstein 2022-11-22 910 }
f3b44f92e59a80 Jens Axboe 2022-06-13 911 if (req->flags & REQ_F_ISREG) {
f3b44f92e59a80 Jens Axboe 2022-06-13 912 sb_start_write(file_inode(req->file)->i_sb);
f3b44f92e59a80 Jens Axboe 2022-06-13 913 __sb_writers_release(file_inode(req->file)->i_sb,
f3b44f92e59a80 Jens Axboe 2022-06-13 914 SB_FREEZE_WRITE);
f3b44f92e59a80 Jens Axboe 2022-06-13 915 }
f3b44f92e59a80 Jens Axboe 2022-06-13 916 kiocb->ki_flags |= IOCB_WRITE;
4e3fa2e567acf8 Amir Goldstein 2022-11-22 917 kiocb->ki_idx = idx;
f3b44f92e59a80 Jens Axboe 2022-06-13 918
f3b44f92e59a80 Jens Axboe 2022-06-13 919 if (likely(req->file->f_op->write_iter))
f3b44f92e59a80 Jens Axboe 2022-06-13 920 ret2 = call_write_iter(req->file, kiocb, &s->iter);
f3b44f92e59a80 Jens Axboe 2022-06-13 921 else if (req->file->f_op->write)
f3b44f92e59a80 Jens Axboe 2022-06-13 922 ret2 = loop_rw_iter(WRITE, rw, &s->iter);
f3b44f92e59a80 Jens Axboe 2022-06-13 923 else
f3b44f92e59a80 Jens Axboe 2022-06-13 924 ret2 = -EINVAL;
f3b44f92e59a80 Jens Axboe 2022-06-13 925
f3b44f92e59a80 Jens Axboe 2022-06-13 926 if (req->flags & REQ_F_REISSUE) {
f3b44f92e59a80 Jens Axboe 2022-06-13 927 req->flags &= ~REQ_F_REISSUE;
f3b44f92e59a80 Jens Axboe 2022-06-13 928 ret2 = -EAGAIN;
f3b44f92e59a80 Jens Axboe 2022-06-13 929 }
f3b44f92e59a80 Jens Axboe 2022-06-13 930
f3b44f92e59a80 Jens Axboe 2022-06-13 931 /*
f3b44f92e59a80 Jens Axboe 2022-06-13 932 * Raw bdev writes will return -EOPNOTSUPP for IOCB_NOWAIT. Just
f3b44f92e59a80 Jens Axboe 2022-06-13 933 * retry them without IOCB_NOWAIT.
f3b44f92e59a80 Jens Axboe 2022-06-13 934 */
f3b44f92e59a80 Jens Axboe 2022-06-13 935 if (ret2 == -EOPNOTSUPP && (kiocb->ki_flags & IOCB_NOWAIT))
f3b44f92e59a80 Jens Axboe 2022-06-13 936 ret2 = -EAGAIN;
f3b44f92e59a80 Jens Axboe 2022-06-13 937 /* no retry on NONBLOCK nor RWF_NOWAIT */
f3b44f92e59a80 Jens Axboe 2022-06-13 938 if (ret2 == -EAGAIN && (req->flags & REQ_F_NOWAIT))
f3b44f92e59a80 Jens Axboe 2022-06-13 939 goto done;
f3b44f92e59a80 Jens Axboe 2022-06-13 940 if (!force_nonblock || ret2 != -EAGAIN) {
f3b44f92e59a80 Jens Axboe 2022-06-13 941 /* IOPOLL retry should happen for io-wq threads */
f3b44f92e59a80 Jens Axboe 2022-06-13 942 if (ret2 == -EAGAIN && (req->ctx->flags & IORING_SETUP_IOPOLL))
f3b44f92e59a80 Jens Axboe 2022-06-13 943 goto copy_iov;
4e17aaab54359f Stefan Roesch 2022-06-16 944
4e17aaab54359f Stefan Roesch 2022-06-16 945 if (ret2 != req->cqe.res && ret2 >= 0 && need_complete_io(req)) {
c86416c6ff5ba7 Stefan Roesch 2022-10-10 946 struct io_async_rw *io;
4e17aaab54359f Stefan Roesch 2022-06-16 947
1c849b481b3e4f Stefan Roesch 2022-06-16 948 trace_io_uring_short_write(req->ctx, kiocb->ki_pos - ret2,
1c849b481b3e4f Stefan Roesch 2022-06-16 949 req->cqe.res, ret2);
1c849b481b3e4f Stefan Roesch 2022-06-16 950
4e17aaab54359f Stefan Roesch 2022-06-16 951 /* This is a partial write. The file pos has already been
4e17aaab54359f Stefan Roesch 2022-06-16 952 * updated, setup the async struct to complete the request
4e17aaab54359f Stefan Roesch 2022-06-16 953 * in the worker. Also update bytes_done to account for
4e17aaab54359f Stefan Roesch 2022-06-16 954 * the bytes already written.
4e17aaab54359f Stefan Roesch 2022-06-16 955 */
4e17aaab54359f Stefan Roesch 2022-06-16 956 iov_iter_save_state(&s->iter, &s->iter_state);
4e17aaab54359f Stefan Roesch 2022-06-16 957 ret = io_setup_async_rw(req, iovec, s, true);
4e17aaab54359f Stefan Roesch 2022-06-16 958
c86416c6ff5ba7 Stefan Roesch 2022-10-10 959 io = req->async_data;
c86416c6ff5ba7 Stefan Roesch 2022-10-10 960 if (io)
c86416c6ff5ba7 Stefan Roesch 2022-10-10 961 io->bytes_done += ret2;
4e17aaab54359f Stefan Roesch 2022-06-16 962
e053aaf4da56cb Jens Axboe 2022-06-24 963 if (kiocb->ki_flags & IOCB_WRITE)
4e3fa2e567acf8 Amir Goldstein 2022-11-22 964 kiocb_end_write(req, idx);
4e17aaab54359f Stefan Roesch 2022-06-16 965 return ret ? ret : -EAGAIN;
4e17aaab54359f Stefan Roesch 2022-06-16 966 }
f3b44f92e59a80 Jens Axboe 2022-06-13 967 done:
df9830d883b914 Pavel Begunkov 2022-06-16 968 ret = kiocb_done(req, ret2, issue_flags);
f3b44f92e59a80 Jens Axboe 2022-06-13 969 } else {
f3b44f92e59a80 Jens Axboe 2022-06-13 970 copy_iov:
f3b44f92e59a80 Jens Axboe 2022-06-13 971 iov_iter_restore(&s->iter, &s->iter_state);
f3b44f92e59a80 Jens Axboe 2022-06-13 972 ret = io_setup_async_rw(req, iovec, s, false);
e053aaf4da56cb Jens Axboe 2022-06-24 973 if (!ret) {
e053aaf4da56cb Jens Axboe 2022-06-24 974 if (kiocb->ki_flags & IOCB_WRITE)
4e3fa2e567acf8 Amir Goldstein 2022-11-22 @975 kiocb_end_write(req, idx);
^^^
e053aaf4da56cb Jens Axboe 2022-06-24 976 return -EAGAIN;
e053aaf4da56cb Jens Axboe 2022-06-24 977 }
e053aaf4da56cb Jens Axboe 2022-06-24 978 return ret;
f3b44f92e59a80 Jens Axboe 2022-06-13 979 }
f3b44f92e59a80 Jens Axboe 2022-06-13 980 /* it's reportedly faster than delegating the null check to kfree() */
f3b44f92e59a80 Jens Axboe 2022-06-13 981 if (iovec)
f3b44f92e59a80 Jens Axboe 2022-06-13 982 kfree(iovec);
f3b44f92e59a80 Jens Axboe 2022-06-13 983 return ret;
f3b44f92e59a80 Jens Axboe 2022-06-13 984 }
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-11-26 19:00 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-26 19:00 [amir73il:sb_write_barrier 21/28] io_uring/rw.c:975 io_write() error: uninitialized symbol 'idx' Dan Carpenter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).