diff mbox

[v2] rbd: Remove VLA usage

Message ID 1521174763-13282-1-git-send-email-kyle@spiers.me (mailing list archive)
State New, archived
Headers show

Commit Message

Kyle Spiers March 16, 2018, 4:32 a.m. UTC
As part of the effort to remove VLAs from the kernel[1], this moves
the literal values into the stack array calculation instead of using a
variable for the sizing. The resulting size can be found from
sizeof(buf).

[1] https://lkml.org/lkml/2018/3/7/621

Signed-off-by: Kyle Spiers <kyle@spiers.me>
---
 drivers/block/rbd.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

Comments

Ilya Dryomov March 16, 2018, 8:49 a.m. UTC | #1
On Fri, Mar 16, 2018 at 5:32 AM, Kyle Spiers <kyle@spiers.me> wrote:
> As part of the effort to remove VLAs from the kernel[1], this moves
> the literal values into the stack array calculation instead of using a
> variable for the sizing. The resulting size can be found from
> sizeof(buf).
>
> [1] https://lkml.org/lkml/2018/3/7/621
>
> Signed-off-by: Kyle Spiers <kyle@spiers.me>
> ---
>  drivers/block/rbd.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
> index 8e40da0..0e94e1f 100644
> --- a/drivers/block/rbd.c
> +++ b/drivers/block/rbd.c
> @@ -3100,8 +3100,8 @@ static int __rbd_notify_op_lock(struct rbd_device *rbd_dev,
>  {
>         struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc;
>         struct rbd_client_id cid = rbd_get_cid(rbd_dev);
> -       int buf_size = 4 + 8 + 8 + CEPH_ENCODING_START_BLK_LEN;
> -       char buf[buf_size];
> +       char buf[4 + 4 + 8 + 8 + CEPH_ENCODING_START_BLK_LEN];

Where is this extra 4 came from?

> +       int buf_size = sizeof(buf)

A semicolon is missing here.  Did you compile this patch?

Thanks,

                Ilya
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
kernel test robot March 17, 2018, 5:55 a.m. UTC | #2
Hi Kyle,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v4.16-rc5 next-20180316]
[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/Kyle-Spiers/rbd-Remove-VLA-usage/20180317-131424
config: i386-randconfig-x017-201810 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

   drivers/block/rbd.c: In function '__rbd_notify_op_lock':
>> drivers/block/rbd.c:3105:2: error: expected ',' or ';' before 'void'
     void *p = buf;
     ^~~~
>> drivers/block/rbd.c:3110:23: error: 'p' undeclared (first use in this function); did you mean 'up'?
     ceph_start_encoding(&p, 2, 1, buf_size - CEPH_ENCODING_START_BLK_LEN);
                          ^
                          up
   drivers/block/rbd.c:3110:23: note: each undeclared identifier is reported only once for each function it appears in

vim +3105 drivers/block/rbd.c

b30a01f2a Ilya Dryomov 2014-05-22  3095  
ed95b21a4 Ilya Dryomov 2016-08-12  3096  static int __rbd_notify_op_lock(struct rbd_device *rbd_dev,
ed95b21a4 Ilya Dryomov 2016-08-12  3097  				enum rbd_notify_op notify_op,
ed95b21a4 Ilya Dryomov 2016-08-12  3098  				struct page ***preply_pages,
ed95b21a4 Ilya Dryomov 2016-08-12  3099  				size_t *preply_len)
b30a01f2a Ilya Dryomov 2014-05-22  3100  {
922dab613 Ilya Dryomov 2016-05-26  3101  	struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc;
ed95b21a4 Ilya Dryomov 2016-08-12  3102  	struct rbd_client_id cid = rbd_get_cid(rbd_dev);
1910cf8b5 Kyle Spiers  2018-03-15  3103  	char buf[4 + 4 + 8 + 8 + CEPH_ENCODING_START_BLK_LEN];
1910cf8b5 Kyle Spiers  2018-03-15  3104  	int buf_size = sizeof(buf)
ed95b21a4 Ilya Dryomov 2016-08-12 @3105  	void *p = buf;
b30a01f2a Ilya Dryomov 2014-05-22  3106  
ed95b21a4 Ilya Dryomov 2016-08-12  3107  	dout("%s rbd_dev %p notify_op %d\n", __func__, rbd_dev, notify_op);
b30a01f2a Ilya Dryomov 2014-05-22  3108  
ed95b21a4 Ilya Dryomov 2016-08-12  3109  	/* encode *LockPayload NotifyMessage (op + ClientId) */
ed95b21a4 Ilya Dryomov 2016-08-12 @3110  	ceph_start_encoding(&p, 2, 1, buf_size - CEPH_ENCODING_START_BLK_LEN);
ed95b21a4 Ilya Dryomov 2016-08-12  3111  	ceph_encode_32(&p, notify_op);
ed95b21a4 Ilya Dryomov 2016-08-12  3112  	ceph_encode_64(&p, cid.gid);
ed95b21a4 Ilya Dryomov 2016-08-12  3113  	ceph_encode_64(&p, cid.handle);
76756a51e Ilya Dryomov 2014-06-20  3114  
ed95b21a4 Ilya Dryomov 2016-08-12  3115  	return ceph_osdc_notify(osdc, &rbd_dev->header_oid,
ed95b21a4 Ilya Dryomov 2016-08-12  3116  				&rbd_dev->header_oloc, buf, buf_size,
ed95b21a4 Ilya Dryomov 2016-08-12  3117  				RBD_NOTIFY_TIMEOUT, preply_pages, preply_len);
c525f0360 Ilya Dryomov 2016-04-28  3118  }
c525f0360 Ilya Dryomov 2016-04-28  3119  

:::::: The code at line 3105 was first introduced by commit
:::::: ed95b21a4b0a71ef89306cdeb427d53cc9cb343f rbd: support for exclusive-lock feature

:::::: TO: Ilya Dryomov <idryomov@gmail.com>
:::::: CC: Ilya Dryomov <idryomov@gmail.com>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
kernel test robot March 17, 2018, 7:27 a.m. UTC | #3
Hi Kyle,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v4.16-rc5 next-20180316]
[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/Kyle-Spiers/rbd-Remove-VLA-usage/20180317-131424
config: x86_64-randconfig-s0-03171325 (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 >>):

   drivers//block/rbd.c: In function '__rbd_notify_op_lock':
   drivers//block/rbd.c:3105:2: error: expected ',' or ';' before 'void'
     void *p = buf;
     ^~~~
>> drivers//block/rbd.c:3110:23: error: 'p' undeclared (first use in this function)
     ceph_start_encoding(&p, 2, 1, buf_size - CEPH_ENCODING_START_BLK_LEN);
                          ^
   drivers//block/rbd.c:3110:23: note: each undeclared identifier is reported only once for each function it appears in

vim +/p +3110 drivers//block/rbd.c

b30a01f2a Ilya Dryomov 2014-05-22  3095  
ed95b21a4 Ilya Dryomov 2016-08-12  3096  static int __rbd_notify_op_lock(struct rbd_device *rbd_dev,
ed95b21a4 Ilya Dryomov 2016-08-12  3097  				enum rbd_notify_op notify_op,
ed95b21a4 Ilya Dryomov 2016-08-12  3098  				struct page ***preply_pages,
ed95b21a4 Ilya Dryomov 2016-08-12  3099  				size_t *preply_len)
b30a01f2a Ilya Dryomov 2014-05-22  3100  {
922dab613 Ilya Dryomov 2016-05-26  3101  	struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc;
ed95b21a4 Ilya Dryomov 2016-08-12  3102  	struct rbd_client_id cid = rbd_get_cid(rbd_dev);
1910cf8b5 Kyle Spiers  2018-03-15  3103  	char buf[4 + 4 + 8 + 8 + CEPH_ENCODING_START_BLK_LEN];
1910cf8b5 Kyle Spiers  2018-03-15  3104  	int buf_size = sizeof(buf)
ed95b21a4 Ilya Dryomov 2016-08-12 @3105  	void *p = buf;
b30a01f2a Ilya Dryomov 2014-05-22  3106  
ed95b21a4 Ilya Dryomov 2016-08-12  3107  	dout("%s rbd_dev %p notify_op %d\n", __func__, rbd_dev, notify_op);
b30a01f2a Ilya Dryomov 2014-05-22  3108  
ed95b21a4 Ilya Dryomov 2016-08-12  3109  	/* encode *LockPayload NotifyMessage (op + ClientId) */
ed95b21a4 Ilya Dryomov 2016-08-12 @3110  	ceph_start_encoding(&p, 2, 1, buf_size - CEPH_ENCODING_START_BLK_LEN);
ed95b21a4 Ilya Dryomov 2016-08-12  3111  	ceph_encode_32(&p, notify_op);
ed95b21a4 Ilya Dryomov 2016-08-12  3112  	ceph_encode_64(&p, cid.gid);
ed95b21a4 Ilya Dryomov 2016-08-12  3113  	ceph_encode_64(&p, cid.handle);
76756a51e Ilya Dryomov 2014-06-20  3114  
ed95b21a4 Ilya Dryomov 2016-08-12  3115  	return ceph_osdc_notify(osdc, &rbd_dev->header_oid,
ed95b21a4 Ilya Dryomov 2016-08-12  3116  				&rbd_dev->header_oloc, buf, buf_size,
ed95b21a4 Ilya Dryomov 2016-08-12  3117  				RBD_NOTIFY_TIMEOUT, preply_pages, preply_len);
c525f0360 Ilya Dryomov 2016-04-28  3118  }
c525f0360 Ilya Dryomov 2016-04-28  3119  

:::::: The code at line 3110 was first introduced by commit
:::::: ed95b21a4b0a71ef89306cdeb427d53cc9cb343f rbd: support for exclusive-lock feature

:::::: TO: Ilya Dryomov <idryomov@gmail.com>
:::::: CC: Ilya Dryomov <idryomov@gmail.com>

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

Patch

diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 8e40da0..0e94e1f 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -3100,8 +3100,8 @@  static int __rbd_notify_op_lock(struct rbd_device *rbd_dev,
 {
 	struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc;
 	struct rbd_client_id cid = rbd_get_cid(rbd_dev);
-	int buf_size = 4 + 8 + 8 + CEPH_ENCODING_START_BLK_LEN;
-	char buf[buf_size];
+	char buf[4 + 4 + 8 + 8 + CEPH_ENCODING_START_BLK_LEN];
+	int buf_size = sizeof(buf)
 	void *p = buf;
 
 	dout("%s rbd_dev %p notify_op %d\n", __func__, rbd_dev, notify_op);
@@ -3619,8 +3619,8 @@  static void __rbd_acknowledge_notify(struct rbd_device *rbd_dev,
 				     u64 notify_id, u64 cookie, s32 *result)
 {
 	struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc;
-	int buf_size = 4 + CEPH_ENCODING_START_BLK_LEN;
-	char buf[buf_size];
+	char buf[4 + CEPH_ENCODING_START_BLK_LEN];
+	int buf_size = sizeof(buf);
 	int ret;
 
 	if (result) {