All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] md: fix compiler warning: large integer implicitly truncated to unsigned type
@ 2013-12-02 19:12 ` Helge Deller
  0 siblings, 0 replies; 4+ messages in thread
From: Helge Deller @ 2013-12-02 19:12 UTC (permalink / raw)
  To: dm-devel, linux-parisc

Compiling a 32bit kernel with CONFIG_LBDAF=n gives this compiler warning:
/drivers/md/md.c: In function ‘super_90_load’:
/drivers/md/md.c:1068:3: warning: large integer implicitly truncated to unsigned type [-Woverflow]

Fix it by casting the calculated value to a sector_t type.

Signed-off-by: Helge Deller <deller@gmx.de>

diff --git a/drivers/md/md.c b/drivers/md/md.c
index e60cebf..b56f1c7 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -1065,7 +1065,7 @@ static int super_90_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor
 	 * record this size)
 	 */
 	if (rdev->sectors >= (2ULL << 32) && sb->level >= 1)
-		rdev->sectors = (2ULL << 32) - 2;
+		rdev->sectors = (sector_t) ((2ULL << 32) - 2);
 
 	if (rdev->sectors < ((sector_t)sb->size) * 2 && sb->level >= 1)
 		/* "this cannot possibly happen" ... */
@@ -1356,7 +1356,7 @@ super_90_rdev_size_change(struct md_rdev *rdev, sector_t num_sectors)
 	 * 4TB == 2^32 KB, or 2*2^32 sectors.
 	 */
 	if (num_sectors >= (2ULL << 32) && rdev->mddev->level >= 1)
-		num_sectors = (2ULL << 32) - 2;
+		num_sectors = (sector_t) ((2ULL << 32) - 2);
 	md_super_write(rdev->mddev, rdev, rdev->sb_start, rdev->sb_size,
 		       rdev->sb_page);
 	md_super_wait(rdev->mddev);
--
To unsubscribe from this list: send the line "unsubscribe linux-parisc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH] md: fix compiler warning: large integer implicitly truncated to unsigned type
@ 2013-12-02 19:12 ` Helge Deller
  0 siblings, 0 replies; 4+ messages in thread
From: Helge Deller @ 2013-12-02 19:12 UTC (permalink / raw)
  To: dm-devel, linux-parisc

Compiling a 32bit kernel with CONFIG_LBDAF=3Dn gives this compiler warn=
ing:
/drivers/md/md.c: In function =E2=80=98super_90_load=E2=80=99:
/drivers/md/md.c:1068:3: warning: large integer implicitly truncated to=
 unsigned type [-Woverflow]

=46ix it by casting the calculated value to a sector_t type.

Signed-off-by: Helge Deller <deller@gmx.de>

diff --git a/drivers/md/md.c b/drivers/md/md.c
index e60cebf..b56f1c7 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -1065,7 +1065,7 @@ static int super_90_load(struct md_rdev *rdev, st=
ruct md_rdev *refdev, int minor
 	 * record this size)
 	 */
 	if (rdev->sectors >=3D (2ULL << 32) && sb->level >=3D 1)
-		rdev->sectors =3D (2ULL << 32) - 2;
+		rdev->sectors =3D (sector_t) ((2ULL << 32) - 2);
=20
 	if (rdev->sectors < ((sector_t)sb->size) * 2 && sb->level >=3D 1)
 		/* "this cannot possibly happen" ... */
@@ -1356,7 +1356,7 @@ super_90_rdev_size_change(struct md_rdev *rdev, s=
ector_t num_sectors)
 	 * 4TB =3D=3D 2^32 KB, or 2*2^32 sectors.
 	 */
 	if (num_sectors >=3D (2ULL << 32) && rdev->mddev->level >=3D 1)
-		num_sectors =3D (2ULL << 32) - 2;
+		num_sectors =3D (sector_t) ((2ULL << 32) - 2);
 	md_super_write(rdev->mddev, rdev, rdev->sb_start, rdev->sb_size,
 		       rdev->sb_page);
 	md_super_wait(rdev->mddev);
--
To unsubscribe from this list: send the line "unsubscribe linux-parisc"=
 in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [dm-devel] [PATCH] md: fix compiler warning: large integer implicitly truncated to unsigned type
  2013-12-02 19:12 ` Helge Deller
@ 2013-12-03 13:47   ` Thadeu Lima de Souza Cascardo
  -1 siblings, 0 replies; 4+ messages in thread
From: Thadeu Lima de Souza Cascardo @ 2013-12-03 13:47 UTC (permalink / raw)
  To: Helge Deller; +Cc: dm-devel, linux-parisc

On Mon, Dec 02, 2013 at 08:12:20PM +0100, Helge Deller wrote:
> Compiling a 32bit kernel with CONFIG_LBDAF=n gives this compiler warning:
> /drivers/md/md.c: In function ‘super_90_load’:
> /drivers/md/md.c:1068:3: warning: large integer implicitly truncated to unsigned type [-Woverflow]
> 
> Fix it by casting the calculated value to a sector_t type.
> 
> Signed-off-by: Helge Deller <deller@gmx.de>
> 
> diff --git a/drivers/md/md.c b/drivers/md/md.c
> index e60cebf..b56f1c7 100644
> --- a/drivers/md/md.c
> +++ b/drivers/md/md.c
> @@ -1065,7 +1065,7 @@ static int super_90_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor
>  	 * record this size)
>  	 */
>  	if (rdev->sectors >= (2ULL << 32) && sb->level >= 1)
> -		rdev->sectors = (2ULL << 32) - 2;
> +		rdev->sectors = (sector_t) ((2ULL << 32) - 2);
>  
>  	if (rdev->sectors < ((sector_t)sb->size) * 2 && sb->level >= 1)
>  		/* "this cannot possibly happen" ... */
> @@ -1356,7 +1356,7 @@ super_90_rdev_size_change(struct md_rdev *rdev, sector_t num_sectors)
>  	 * 4TB == 2^32 KB, or 2*2^32 sectors.
>  	 */
>  	if (num_sectors >= (2ULL << 32) && rdev->mddev->level >= 1)
> -		num_sectors = (2ULL << 32) - 2;
> +		num_sectors = (sector_t) ((2ULL << 32) - 2);
>  	md_super_write(rdev->mddev, rdev, rdev->sb_start, rdev->sb_size,
>  		       rdev->sb_page);
>  	md_super_wait(rdev->mddev);
> 

It does overflow and get truncated on 32-bit systems without LABDF.
Casting is just hiding the problem! 32-bit systems without LABDF do not
support block devices larger than 2TB, and thus, should not worry about
larger than 4TB devices.

This code should either be ifdef'd to 64-bit or LABDF, or should test
for the size of sector_t. The second option would still need some change
in the code in order to avoid the warning, or we should don't care about
them, since testing for num_sectors >= (2ULL << 32) should always be
false.

Regards.
Cascardo.

--
To unsubscribe from this list: send the line "unsubscribe linux-parisc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [dm-devel] [PATCH] md: fix compiler warning: large integer implicitly truncated to unsigned type
@ 2013-12-03 13:47   ` Thadeu Lima de Souza Cascardo
  0 siblings, 0 replies; 4+ messages in thread
From: Thadeu Lima de Souza Cascardo @ 2013-12-03 13:47 UTC (permalink / raw)
  To: Helge Deller; +Cc: dm-devel, linux-parisc

On Mon, Dec 02, 2013 at 08:12:20PM +0100, Helge Deller wrote:
> Compiling a 32bit kernel with CONFIG_LBDAF=3Dn gives this compiler wa=
rning:
> /drivers/md/md.c: In function =E2=80=98super_90_load=E2=80=99:
> /drivers/md/md.c:1068:3: warning: large integer implicitly truncated =
to unsigned type [-Woverflow]
>=20
> Fix it by casting the calculated value to a sector_t type.
>=20
> Signed-off-by: Helge Deller <deller@gmx.de>
>=20
> diff --git a/drivers/md/md.c b/drivers/md/md.c
> index e60cebf..b56f1c7 100644
> --- a/drivers/md/md.c
> +++ b/drivers/md/md.c
> @@ -1065,7 +1065,7 @@ static int super_90_load(struct md_rdev *rdev, =
struct md_rdev *refdev, int minor
>  	 * record this size)
>  	 */
>  	if (rdev->sectors >=3D (2ULL << 32) && sb->level >=3D 1)
> -		rdev->sectors =3D (2ULL << 32) - 2;
> +		rdev->sectors =3D (sector_t) ((2ULL << 32) - 2);
> =20
>  	if (rdev->sectors < ((sector_t)sb->size) * 2 && sb->level >=3D 1)
>  		/* "this cannot possibly happen" ... */
> @@ -1356,7 +1356,7 @@ super_90_rdev_size_change(struct md_rdev *rdev,=
 sector_t num_sectors)
>  	 * 4TB =3D=3D 2^32 KB, or 2*2^32 sectors.
>  	 */
>  	if (num_sectors >=3D (2ULL << 32) && rdev->mddev->level >=3D 1)
> -		num_sectors =3D (2ULL << 32) - 2;
> +		num_sectors =3D (sector_t) ((2ULL << 32) - 2);
>  	md_super_write(rdev->mddev, rdev, rdev->sb_start, rdev->sb_size,
>  		       rdev->sb_page);
>  	md_super_wait(rdev->mddev);
>=20

It does overflow and get truncated on 32-bit systems without LABDF.
Casting is just hiding the problem! 32-bit systems without LABDF do not
support block devices larger than 2TB, and thus, should not worry about
larger than 4TB devices.

This code should either be ifdef'd to 64-bit or LABDF, or should test
for the size of sector_t. The second option would still need some chang=
e
in the code in order to avoid the warning, or we should don't care abou=
t
them, since testing for num_sectors >=3D (2ULL << 32) should always be
false.

Regards.
Cascardo.

--
To unsubscribe from this list: send the line "unsubscribe linux-parisc"=
 in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-12-03 13:47 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-02 19:12 [PATCH] md: fix compiler warning: large integer implicitly truncated to unsigned type Helge Deller
2013-12-02 19:12 ` Helge Deller
2013-12-03 13:47 ` [dm-devel] " Thadeu Lima de Souza Cascardo
2013-12-03 13:47   ` Thadeu Lima de Souza Cascardo

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.