All of lore.kernel.org
 help / color / mirror / Atom feed
From: kbuild test robot <lkp@intel.com>
To: adam.manzanares@wdc.com
Cc: kbuild-all@01.org, viro@zeniv.linux.org.uk, bcrl@kvack.org,
	linux-fsdevel@vger.kernel.org, linux-aio@kvack.org,
	linux-api@vger.kernel.org, linux-block@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Adam Manzanares <adam.manzanares@wdc.com>
Subject: Re: [PATCH v3 3/3] fs: Add aio iopriority support for block_dev
Date: Wed, 9 May 2018 16:54:40 +0800	[thread overview]
Message-ID: <201805091636.4nBtTJwM%fengguang.wu@intel.com> (raw)
In-Reply-To: <20180508174202.2537-4-adam.manzanares@wdc.com>

[-- Attachment #1: Type: text/plain, Size: 4828 bytes --]

Hi Adam,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v4.17-rc4 next-20180508]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/adam-manzanares-wdc-com/block-add-ioprio_check_cap-function/20180509-094058
config: x86_64-randconfig-s0-05091255 (attached as .config)
compiler: gcc-6 (Debian 6.4.0-9) 6.4.0 20171026
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

   fs/aio.c: In function 'io_submit_one':
>> fs/aio.c:1606:9: error: implicit declaration of function 'ioprio_check_cap' [-Werror=implicit-function-declaration]
      ret = ioprio_check_cap(iocb->aio_reqprio);
            ^~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/ioprio_check_cap +1606 fs/aio.c

  1545	
  1546	static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
  1547				 struct iocb *iocb, bool compat)
  1548	{
  1549		struct aio_kiocb *req;
  1550		struct file *file;
  1551		ssize_t ret;
  1552	
  1553		/* enforce forwards compatibility on users */
  1554		if (unlikely(iocb->aio_reserved2)) {
  1555			pr_debug("EINVAL: reserve field set\n");
  1556			return -EINVAL;
  1557		}
  1558	
  1559		/* prevent overflows */
  1560		if (unlikely(
  1561		    (iocb->aio_buf != (unsigned long)iocb->aio_buf) ||
  1562		    (iocb->aio_nbytes != (size_t)iocb->aio_nbytes) ||
  1563		    ((ssize_t)iocb->aio_nbytes < 0)
  1564		   )) {
  1565			pr_debug("EINVAL: overflow check\n");
  1566			return -EINVAL;
  1567		}
  1568	
  1569		req = aio_get_req(ctx);
  1570		if (unlikely(!req))
  1571			return -EAGAIN;
  1572	
  1573		req->common.ki_filp = file = fget(iocb->aio_fildes);
  1574		if (unlikely(!req->common.ki_filp)) {
  1575			ret = -EBADF;
  1576			goto out_put_req;
  1577		}
  1578		req->common.ki_pos = iocb->aio_offset;
  1579		req->common.ki_complete = aio_complete;
  1580		req->common.ki_flags = iocb_flags(req->common.ki_filp);
  1581		req->common.ki_hint = file_write_hint(file);
  1582	
  1583		if (iocb->aio_flags & IOCB_FLAG_RESFD) {
  1584			/*
  1585			 * If the IOCB_FLAG_RESFD flag of aio_flags is set, get an
  1586			 * instance of the file* now. The file descriptor must be
  1587			 * an eventfd() fd, and will be signaled for each completed
  1588			 * event using the eventfd_signal() function.
  1589			 */
  1590			req->ki_eventfd = eventfd_ctx_fdget((int) iocb->aio_resfd);
  1591			if (IS_ERR(req->ki_eventfd)) {
  1592				ret = PTR_ERR(req->ki_eventfd);
  1593				req->ki_eventfd = NULL;
  1594				goto out_put_req;
  1595			}
  1596	
  1597			req->common.ki_flags |= IOCB_EVENTFD;
  1598		}
  1599	
  1600		if (iocb->aio_flags & IOCB_FLAG_IOPRIO) {
  1601			/*
  1602			 * If the IOCB_FLAG_IOPRIO flag of aio_flags is set, then
  1603			 * aio_reqprio is interpreted as an I/O scheduling
  1604			 * class and priority.
  1605			 */
> 1606			ret = ioprio_check_cap(iocb->aio_reqprio);
  1607			if (ret) {
  1608				pr_debug("aio ioprio check cap error\n");
  1609				goto out_put_req;
  1610			}
  1611	
  1612			req->common.ki_ioprio = iocb->aio_reqprio;
  1613			req->common.ki_flags |= IOCB_IOPRIO;
  1614		}
  1615	
  1616		ret = kiocb_set_rw_flags(&req->common, iocb->aio_rw_flags);
  1617		if (unlikely(ret)) {
  1618			pr_debug("EINVAL: aio_rw_flags\n");
  1619			goto out_put_req;
  1620		}
  1621	
  1622		ret = put_user(KIOCB_KEY, &user_iocb->aio_key);
  1623		if (unlikely(ret)) {
  1624			pr_debug("EFAULT: aio_key\n");
  1625			goto out_put_req;
  1626		}
  1627	
  1628		req->ki_user_iocb = user_iocb;
  1629		req->ki_user_data = iocb->aio_data;
  1630	
  1631		get_file(file);
  1632		switch (iocb->aio_lio_opcode) {
  1633		case IOCB_CMD_PREAD:
  1634			ret = aio_read(&req->common, iocb, false, compat);
  1635			break;
  1636		case IOCB_CMD_PWRITE:
  1637			ret = aio_write(&req->common, iocb, false, compat);
  1638			break;
  1639		case IOCB_CMD_PREADV:
  1640			ret = aio_read(&req->common, iocb, true, compat);
  1641			break;
  1642		case IOCB_CMD_PWRITEV:
  1643			ret = aio_write(&req->common, iocb, true, compat);
  1644			break;
  1645		default:
  1646			pr_debug("invalid aio operation %d\n", iocb->aio_lio_opcode);
  1647			ret = -EINVAL;
  1648			break;
  1649		}
  1650		fput(file);
  1651	
  1652		if (ret && ret != -EIOCBQUEUED)
  1653			goto out_put_req;
  1654		return 0;
  1655	out_put_req:
  1656		put_reqs_available(ctx, 1);
  1657		percpu_ref_put(&ctx->reqs);
  1658		kiocb_free(req);
  1659		return ret;
  1660	}
  1661	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 30767 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: kbuild test robot <lkp@intel.com>
Cc: kbuild-all@01.org, viro@zeniv.linux.org.uk, bcrl@kvack.org,
	linux-fsdevel@vger.kernel.org, linux-aio@kvack.org,
	linux-api@vger.kernel.org, linux-block@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Adam Manzanares <adam.manzanares@wdc.com>
Subject: Re: [PATCH v3 3/3] fs: Add aio iopriority support for block_dev
Date: Wed, 9 May 2018 16:54:40 +0800	[thread overview]
Message-ID: <201805091636.4nBtTJwM%fengguang.wu@intel.com> (raw)
In-Reply-To: <20180508174202.2537-4-adam.manzanares@wdc.com>

[-- Attachment #1: Type: text/plain, Size: 4828 bytes --]

Hi Adam,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v4.17-rc4 next-20180508]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/adam-manzanares-wdc-com/block-add-ioprio_check_cap-function/20180509-094058
config: x86_64-randconfig-s0-05091255 (attached as .config)
compiler: gcc-6 (Debian 6.4.0-9) 6.4.0 20171026
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

   fs/aio.c: In function 'io_submit_one':
>> fs/aio.c:1606:9: error: implicit declaration of function 'ioprio_check_cap' [-Werror=implicit-function-declaration]
      ret = ioprio_check_cap(iocb->aio_reqprio);
            ^~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/ioprio_check_cap +1606 fs/aio.c

  1545	
  1546	static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
  1547				 struct iocb *iocb, bool compat)
  1548	{
  1549		struct aio_kiocb *req;
  1550		struct file *file;
  1551		ssize_t ret;
  1552	
  1553		/* enforce forwards compatibility on users */
  1554		if (unlikely(iocb->aio_reserved2)) {
  1555			pr_debug("EINVAL: reserve field set\n");
  1556			return -EINVAL;
  1557		}
  1558	
  1559		/* prevent overflows */
  1560		if (unlikely(
  1561		    (iocb->aio_buf != (unsigned long)iocb->aio_buf) ||
  1562		    (iocb->aio_nbytes != (size_t)iocb->aio_nbytes) ||
  1563		    ((ssize_t)iocb->aio_nbytes < 0)
  1564		   )) {
  1565			pr_debug("EINVAL: overflow check\n");
  1566			return -EINVAL;
  1567		}
  1568	
  1569		req = aio_get_req(ctx);
  1570		if (unlikely(!req))
  1571			return -EAGAIN;
  1572	
  1573		req->common.ki_filp = file = fget(iocb->aio_fildes);
  1574		if (unlikely(!req->common.ki_filp)) {
  1575			ret = -EBADF;
  1576			goto out_put_req;
  1577		}
  1578		req->common.ki_pos = iocb->aio_offset;
  1579		req->common.ki_complete = aio_complete;
  1580		req->common.ki_flags = iocb_flags(req->common.ki_filp);
  1581		req->common.ki_hint = file_write_hint(file);
  1582	
  1583		if (iocb->aio_flags & IOCB_FLAG_RESFD) {
  1584			/*
  1585			 * If the IOCB_FLAG_RESFD flag of aio_flags is set, get an
  1586			 * instance of the file* now. The file descriptor must be
  1587			 * an eventfd() fd, and will be signaled for each completed
  1588			 * event using the eventfd_signal() function.
  1589			 */
  1590			req->ki_eventfd = eventfd_ctx_fdget((int) iocb->aio_resfd);
  1591			if (IS_ERR(req->ki_eventfd)) {
  1592				ret = PTR_ERR(req->ki_eventfd);
  1593				req->ki_eventfd = NULL;
  1594				goto out_put_req;
  1595			}
  1596	
  1597			req->common.ki_flags |= IOCB_EVENTFD;
  1598		}
  1599	
  1600		if (iocb->aio_flags & IOCB_FLAG_IOPRIO) {
  1601			/*
  1602			 * If the IOCB_FLAG_IOPRIO flag of aio_flags is set, then
  1603			 * aio_reqprio is interpreted as an I/O scheduling
  1604			 * class and priority.
  1605			 */
> 1606			ret = ioprio_check_cap(iocb->aio_reqprio);
  1607			if (ret) {
  1608				pr_debug("aio ioprio check cap error\n");
  1609				goto out_put_req;
  1610			}
  1611	
  1612			req->common.ki_ioprio = iocb->aio_reqprio;
  1613			req->common.ki_flags |= IOCB_IOPRIO;
  1614		}
  1615	
  1616		ret = kiocb_set_rw_flags(&req->common, iocb->aio_rw_flags);
  1617		if (unlikely(ret)) {
  1618			pr_debug("EINVAL: aio_rw_flags\n");
  1619			goto out_put_req;
  1620		}
  1621	
  1622		ret = put_user(KIOCB_KEY, &user_iocb->aio_key);
  1623		if (unlikely(ret)) {
  1624			pr_debug("EFAULT: aio_key\n");
  1625			goto out_put_req;
  1626		}
  1627	
  1628		req->ki_user_iocb = user_iocb;
  1629		req->ki_user_data = iocb->aio_data;
  1630	
  1631		get_file(file);
  1632		switch (iocb->aio_lio_opcode) {
  1633		case IOCB_CMD_PREAD:
  1634			ret = aio_read(&req->common, iocb, false, compat);
  1635			break;
  1636		case IOCB_CMD_PWRITE:
  1637			ret = aio_write(&req->common, iocb, false, compat);
  1638			break;
  1639		case IOCB_CMD_PREADV:
  1640			ret = aio_read(&req->common, iocb, true, compat);
  1641			break;
  1642		case IOCB_CMD_PWRITEV:
  1643			ret = aio_write(&req->common, iocb, true, compat);
  1644			break;
  1645		default:
  1646			pr_debug("invalid aio operation %d\n", iocb->aio_lio_opcode);
  1647			ret = -EINVAL;
  1648			break;
  1649		}
  1650		fput(file);
  1651	
  1652		if (ret && ret != -EIOCBQUEUED)
  1653			goto out_put_req;
  1654		return 0;
  1655	out_put_req:
  1656		put_reqs_available(ctx, 1);
  1657		percpu_ref_put(&ctx->reqs);
  1658		kiocb_free(req);
  1659		return ret;
  1660	}
  1661	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 30767 bytes --]

  reply	other threads:[~2018-05-09  8:54 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-08 17:41 [PATCH v3 0/3] AIO add per-command iopriority adam.manzanares
2018-05-08 17:41 ` adam.manzanares
2018-05-08 17:42 ` [PATCH v3 1/3] block: add ioprio_check_cap function adam.manzanares
2018-05-08 17:42   ` adam.manzanares
2018-05-08 17:42 ` [PATCH v3 2/3] fs: Convert kiocb rw_hint from enum to u16 adam.manzanares
2018-05-08 17:42   ` adam.manzanares
2018-05-09 13:34   ` Theodore Y. Ts'o
2018-05-09 13:34     ` Theodore Y. Ts'o
2018-05-09 14:23     ` Jens Axboe
2018-05-09 14:23       ` Jens Axboe
2018-05-09 15:21       ` Theodore Y. Ts'o
2018-05-09 15:21         ` Theodore Y. Ts'o
2018-05-09 15:29         ` Adam Manzanares
2018-05-09 15:29           ` Adam Manzanares
2018-05-08 17:42 ` [PATCH v3 3/3] fs: Add aio iopriority support for block_dev adam.manzanares
2018-05-08 17:42   ` adam.manzanares
2018-05-09  8:54   ` kbuild test robot [this message]
2018-05-09  8:54     ` kbuild test robot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201805091636.4nBtTJwM%fengguang.wu@intel.com \
    --to=lkp@intel.com \
    --cc=adam.manzanares@wdc.com \
    --cc=bcrl@kvack.org \
    --cc=kbuild-all@01.org \
    --cc=linux-aio@kvack.org \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.