In s390 platform, it gives a building error:
Manage.c: In function 'Manage_subdevs':
Manage.c:1502:5: error: passing argument 3 of 'fstat_is_blkdev' from incompatible pointer type [-Werror]
fstat_is_blkdev(tfd, dv->devname, &rdev);
^
In file included from Manage.c:25:0:
mdadm.h:1446:12: note: expected 'dev_t *' but argument is of type 'long unsigned int *'
It was introduced by 0a6bff09 and add a temp variable to fix this.
Signed-off-by: Xiao Ni <redacted>
---
Manage.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
@@ -1497,13 +1497,14 @@ int Manage_subdevs(char *devname, int fd,*/rdev=makedev(mj,mn);}else{+dev_trdev_tmp;tfd=dev_open(dv->devname,O_RDONLY);if(tfd>=0){-fstat_is_blkdev(tfd,dv->devname,&rdev);+fstat_is_blkdev(tfd,dv->devname,&rdev_tmp);close(tfd);}else{intopen_err=errno;-if(!stat_is_blkdev(dv->devname,&rdev)){+if(!stat_is_blkdev(dv->devname,&rdev_tmp)){if(dv->disposition=='M')/* non-fatal. Also improbable */continue;
@@ -1523,6 +1524,7 @@ int Manage_subdevs(char *devname, int fd,gotoabort;}}+rdev=(unsignedlong)rdev_tmp;}switch(dv->disposition){default:
From: Paul Menzel <hidden> Date: 2017-09-19 10:24:52
Dear Xiao,
Please find some comments and nits below.
On 09/19/17 12:14, Xiao Ni wrote:
In s390 platform, it gives a building error:
s/building error/build error/
Maybe: On s390 platform the build fails with the error below.
Manage.c: In function 'Manage_subdevs':
Manage.c:1502:5: error: passing argument 3 of 'fstat_is_blkdev' from incompatible pointer type [-Werror]
fstat_is_blkdev(tfd, dv->devname, &rdev);
^
In file included from Manage.c:25:0:
mdadm.h:1446:12: note: expected 'dev_t *' but argument is of type 'long unsigned int *'
It was introduced by 0a6bff09 and add a temp variable to fix this.
Maybe: It is introduced by commit 0a6bff09 (mdadm/util: unify fstat
checking blkdev into function). So use a temp variable to fix this.
From: "Paul Menzel" <redacted>
To: "Xiao Ni" <redacted>
Cc: jsorensen@fb.com, zlliu@suse.com, linux-raid@vger.kernel.org
Sent: Tuesday, September 19, 2017 6:24:52 PM
Subject: Re: [mdadm PATCH 1/1] Fix a building error
Dear Xiao,
Please find some comments and nits below.
Hi Paul
Thanks for these suggestions.
On 09/19/17 12:14, Xiao Ni wrote:
quoted
In s390 platform, it gives a building error:
s/building error/build error/
Maybe: On s390 platform the build fails with the error below.
Ok.
quoted
Manage.c: In function 'Manage_subdevs':
Manage.c:1502:5: error: passing argument 3 of 'fstat_is_blkdev' from
incompatible pointer type [-Werror]
fstat_is_blkdev(tfd, dv->devname, &rdev);
^
In file included from Manage.c:25:0:
mdadm.h:1446:12: note: expected 'dev_t *' but argument is of type 'long
unsigned int *'
It was introduced by 0a6bff09 and add a temp variable to fix this.
Maybe: It is introduced by commit 0a6bff09 (mdadm/util: unify fstat
checking blkdev into function). So use a temp variable to fix this.
Yes, the word so is better. Sorry for my pool English.
@@ -1497,13 +1497,14 @@ int Manage_subdevs(char *devname, int fd,*/rdev=makedev(mj,mn);}else{+dev_trdev_tmp;
Can we get a better name?
Ok, is it better to use device_id?
quoted
tfd = dev_open(dv->devname, O_RDONLY);
if (tfd >= 0) {
- fstat_is_blkdev(tfd, dv->devname, &rdev);
+ fstat_is_blkdev(tfd, dv->devname, &rdev_tmp);
close(tfd);
} else {
int open_err = errno;
- if (!stat_is_blkdev(dv->devname, &rdev)) {
+ if (!stat_is_blkdev(dv->devname, &rdev_tmp)) {
if (dv->disposition == 'M')
/* non-fatal. Also improbable */
continue;
@@ -1523,6 +1524,7 @@ int Manage_subdevs(char *devname, int fd, goto abort; } }+ rdev = (unsigned long)rdev_tmp;
Are ou sure that this won’t cause problems on other platforms
(32-bit/64-bit)?
Could you explain this in detail? Function fstat_is_blkdev needs to pass a
dev_t variable to it. But rdev is unsinged long. So it needs to cast dev_t
to unsigned long.
Best Reards
Xiao
quoted
}
switch(dv->disposition){
default:
Kind regards,
Paul
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
From: "Paul Menzel" <redacted>
To: "Xiao Ni" <redacted>
Cc: jsorensen@fb.com, zlliu@suse.com, linux-raid@vger.kernel.org
Sent: Tuesday, September 19, 2017 6:24:52 PM
Subject: Re: [mdadm PATCH 1/1] Fix a building error
Dear Xiao,
Please find some comments and nits below.
Hi Paul
Thanks for these suggestions.
quoted
On 09/19/17 12:14, Xiao Ni wrote:
quoted
In s390 platform, it gives a building error:
s/building error/build error/
Maybe: On s390 platform the build fails with the error below.
Ok.
c/On s390/On the s390/
quoted
quoted
Manage.c: In function 'Manage_subdevs':
Manage.c:1502:5: error: passing argument 3 of 'fstat_is_blkdev' from
incompatible pointer type [-Werror]
fstat_is_blkdev(tfd, dv->devname, &rdev);
^
In file included from Manage.c:25:0:
mdadm.h:1446:12: note: expected 'dev_t *' but argument is of type 'long
unsigned int *'
It was introduced by 0a6bff09 and add a temp variable to fix this.
Maybe: It is introduced by commit 0a6bff09 (mdadm/util: unify fstat
checking blkdev into function). So use a temp variable to fix this.
Yes, the word so is better. Sorry for my pool English.
It's not bad ... :-)
revert with
c/is/was/
Personally I probably wouldn't abbreviate "temporary", but that's a
matter of taste.
From: Paul Menzel <hidden> Date: 2017-09-19 14:00:47
Dear Xiao,
On 09/19/17 15:16, Xiao Ni wrote:
----- Original Message -----
quoted
From: "Paul Menzel" <redacted>
To: "Xiao Ni" <redacted>
Cc: jsorensen@fb.com, zlliu@suse.com, linux-raid@vger.kernel.org
Sent: Tuesday, September 19, 2017 6:24:52 PM
[…]
quoted
On 09/19/17 12:14, Xiao Ni wrote:
quoted
In s390 platform, it gives a building error:
s/building error/build error/
Maybe: On s390 platform the build fails with the error below.
Ok.
quoted
quoted
Manage.c: In function 'Manage_subdevs':
Manage.c:1502:5: error: passing argument 3 of 'fstat_is_blkdev' from
incompatible pointer type [-Werror]
fstat_is_blkdev(tfd, dv->devname, &rdev);
^
In file included from Manage.c:25:0:
mdadm.h:1446:12: note: expected 'dev_t *' but argument is of type 'long
unsigned int *'
It was introduced by 0a6bff09 and add a temp variable to fix this.
Maybe: It is introduced by commit 0a6bff09 (mdadm/util: unify fstat
checking blkdev into function). So use a temp variable to fix this.
Yes, the word so is better. Sorry for my pool English.
Please don’t be sorry, everybody learns, and please note, I am no native
speaker.
@@ -1497,13 +1497,14 @@ int Manage_subdevs(char *devname, int fd,*/rdev=makedev(mj,mn);}else{+dev_trdev_tmp;
Can we get a better name?
Ok, is it better to use device_id?
Sounds good to me.
quoted
quoted
tfd = dev_open(dv->devname, O_RDONLY);
if (tfd >= 0) {
- fstat_is_blkdev(tfd, dv->devname, &rdev);
+ fstat_is_blkdev(tfd, dv->devname, &rdev_tmp);
close(tfd);
} else {
int open_err = errno;
- if (!stat_is_blkdev(dv->devname, &rdev)) {
+ if (!stat_is_blkdev(dv->devname, &rdev_tmp)) {
if (dv->disposition == 'M')
/* non-fatal. Also improbable */
continue;
@@ -1523,6 +1524,7 @@ int Manage_subdevs(char *devname, int fd, goto abort; } }+ rdev = (unsigned long)rdev_tmp;
Are ou sure that this won’t cause problems on other platforms
(32-bit/64-bit)?
Could you explain this in detail? Function fstat_is_blkdev needs to pass a
dev_t variable to it. But rdev is unsinged long. So it needs to cast dev_t
to unsigned long.
Sorry, I was probably wrong. I just remembered that long has different
sizes on 32-bit and 64-bit systems.
• /usr/include/sys/stat.h:typedef __dev_t dev_t;•
/usr/include/bits/types.h:__STD_TYPE __DEV_T_TYPE __dev_t; /* Type of
device numbers. */
• /usr/include/bits/typesizes.h:#define __DEV_T_TYPE __UQUAD_TYPE
So we depend on the assumption that `long unsigned int` is as long as
`__UQUAD_TYPE`. Unfortunately, I couldn’t find the definition for
`__UQUAD_TYPE`. So ignore my comment for now. Maybe somebody else can
shed some light.
Kind regards,
Paul