* [PATCH] mkfs: Round down log device size if aligned value is larger than device size
@ 2019-03-17 9:19 Chandan Rajendra
2019-03-18 15:57 ` Darrick J. Wong
0 siblings, 1 reply; 4+ messages in thread
From: Chandan Rajendra @ 2019-03-17 9:19 UTC (permalink / raw)
To: linux-xfs; +Cc: Chandan Rajendra, darrick.wong, sandeen
When using a disk of size 798903808 bytes as the log device and when
having a log stripe unit size of 32768, align_log_size() rounds up log
device size to 195048 4k blocks i.e. 798916608. This value is larger
than the device size. Hence the last call to write(2) inside
libxfs_device_zero() would end up returning an error.
To fix this bug, we now round down the log device size if the newly
computed size is larger than the actual log device size.
Signed-off-by: Chandan Rajendra <chandan@linux.ibm.com>
---
mkfs/xfs_mkfs.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
index d1387ddf..bd05d071 100644
--- a/mkfs/xfs_mkfs.c
+++ b/mkfs/xfs_mkfs.c
@@ -2938,7 +2938,8 @@ _("log size %lld is not a multiple of the log stripe unit %d\n"),
/* If the log is too large, round down instead of round up */
if ((tmp_logblocks > XFS_MAX_LOG_BLOCKS) ||
- ((tmp_logblocks << cfg->blocklog) > XFS_MAX_LOG_BYTES)) {
+ ((tmp_logblocks << cfg->blocklog) > XFS_MAX_LOG_BYTES) ||
+ (tmp_logblocks > cfg->logblocks)) {
tmp_logblocks = (cfg->logblocks / sunit) * sunit;
}
cfg->logblocks = tmp_logblocks;
--
2.19.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] mkfs: Round down log device size if aligned value is larger than device size
2019-03-17 9:19 [PATCH] mkfs: Round down log device size if aligned value is larger than device size Chandan Rajendra
@ 2019-03-18 15:57 ` Darrick J. Wong
2019-03-19 5:10 ` [PATCH V2] " Chandan Rajendra
0 siblings, 1 reply; 4+ messages in thread
From: Darrick J. Wong @ 2019-03-18 15:57 UTC (permalink / raw)
To: Chandan Rajendra; +Cc: linux-xfs, sandeen
On Sun, Mar 17, 2019 at 02:49:43PM +0530, Chandan Rajendra wrote:
> When using a disk of size 798903808 bytes as the log device and when
> having a log stripe unit size of 32768, align_log_size() rounds up log
> device size to 195048 4k blocks i.e. 798916608. This value is larger
> than the device size. Hence the last call to write(2) inside
> libxfs_device_zero() would end up returning an error.
>
> To fix this bug, we now round down the log device size if the newly
> computed size is larger than the actual log device size.
>
> Signed-off-by: Chandan Rajendra <chandan@linux.ibm.com>
> ---
> mkfs/xfs_mkfs.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
> index d1387ddf..bd05d071 100644
> --- a/mkfs/xfs_mkfs.c
> +++ b/mkfs/xfs_mkfs.c
> @@ -2938,7 +2938,8 @@ _("log size %lld is not a multiple of the log stripe unit %d\n"),
>
> /* If the log is too large, round down instead of round up */
> if ((tmp_logblocks > XFS_MAX_LOG_BLOCKS) ||
> - ((tmp_logblocks << cfg->blocklog) > XFS_MAX_LOG_BYTES)) {
> + ((tmp_logblocks << cfg->blocklog) > XFS_MAX_LOG_BYTES) ||
> + (tmp_logblocks > cfg->logblocks)) {
I kinda wish you had turned all that into:
if (tmp_logblocks > XFS_MAX_LOG_BLOCKS ||
tmp_logblocks > cfg->logblocks ||
(tmp_logblocks << cfg->blocklog) > XFS_MAX_LOG_BYTES) {
/* foo bar baz */
}
But otherwise the idea seems ok to me...
--D
> tmp_logblocks = (cfg->logblocks / sunit) * sunit;
> }
> cfg->logblocks = tmp_logblocks;
> --
> 2.19.1
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH V2] mkfs: Round down log device size if aligned value is larger than device size
2019-03-18 15:57 ` Darrick J. Wong
@ 2019-03-19 5:10 ` Chandan Rajendra
2019-03-19 15:17 ` Darrick J. Wong
0 siblings, 1 reply; 4+ messages in thread
From: Chandan Rajendra @ 2019-03-19 5:10 UTC (permalink / raw)
To: linux-xfs; +Cc: Chandan Rajendra, darrick.wong, sandeen
When using a disk of size 798903808 bytes as the log device and when
having a log stripe unit size of 32768, align_log_size() rounds up log
device size to 195048 4k blocks i.e. 798916608. This value is larger
than the device size. Hence the last call to write(2) inside
libxfs_device_zero() would end up returning an error.
To fix this bug, we now round down the log device size if the newly
computed size is larger than the actual log device size.
Signed-off-by: Chandan Rajendra <chandan@linux.ibm.com>
---
Changelog:
v1 -> v2:
1. Remove extraneous parenthesis around conditions.
mkfs/xfs_mkfs.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
index d1387ddf..c9e22560 100644
--- a/mkfs/xfs_mkfs.c
+++ b/mkfs/xfs_mkfs.c
@@ -2937,8 +2937,9 @@ _("log size %lld is not a multiple of the log stripe unit %d\n"),
tmp_logblocks = ((cfg->logblocks + (sunit - 1)) / sunit) * sunit;
/* If the log is too large, round down instead of round up */
- if ((tmp_logblocks > XFS_MAX_LOG_BLOCKS) ||
- ((tmp_logblocks << cfg->blocklog) > XFS_MAX_LOG_BYTES)) {
+ if (tmp_logblocks > XFS_MAX_LOG_BLOCKS ||
+ tmp_logblocks > cfg->logblocks ||
+ (tmp_logblocks << cfg->blocklog) > XFS_MAX_LOG_BYTES) {
tmp_logblocks = (cfg->logblocks / sunit) * sunit;
}
cfg->logblocks = tmp_logblocks;
--
2.19.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH V2] mkfs: Round down log device size if aligned value is larger than device size
2019-03-19 5:10 ` [PATCH V2] " Chandan Rajendra
@ 2019-03-19 15:17 ` Darrick J. Wong
0 siblings, 0 replies; 4+ messages in thread
From: Darrick J. Wong @ 2019-03-19 15:17 UTC (permalink / raw)
To: Chandan Rajendra; +Cc: linux-xfs, sandeen
On Tue, Mar 19, 2019 at 10:40:27AM +0530, Chandan Rajendra wrote:
> When using a disk of size 798903808 bytes as the log device and when
> having a log stripe unit size of 32768, align_log_size() rounds up log
> device size to 195048 4k blocks i.e. 798916608. This value is larger
> than the device size. Hence the last call to write(2) inside
> libxfs_device_zero() would end up returning an error.
>
> To fix this bug, we now round down the log device size if the newly
> computed size is larger than the actual log device size.
>
> Signed-off-by: Chandan Rajendra <chandan@linux.ibm.com>
> ---
> Changelog:
> v1 -> v2:
> 1. Remove extraneous parenthesis around conditions.
>
> mkfs/xfs_mkfs.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
> index d1387ddf..c9e22560 100644
> --- a/mkfs/xfs_mkfs.c
> +++ b/mkfs/xfs_mkfs.c
> @@ -2937,8 +2937,9 @@ _("log size %lld is not a multiple of the log stripe unit %d\n"),
> tmp_logblocks = ((cfg->logblocks + (sunit - 1)) / sunit) * sunit;
>
> /* If the log is too large, round down instead of round up */
> - if ((tmp_logblocks > XFS_MAX_LOG_BLOCKS) ||
> - ((tmp_logblocks << cfg->blocklog) > XFS_MAX_LOG_BYTES)) {
> + if (tmp_logblocks > XFS_MAX_LOG_BLOCKS ||
> + tmp_logblocks > cfg->logblocks ||
> + (tmp_logblocks << cfg->blocklog) > XFS_MAX_LOG_BYTES) {
> tmp_logblocks = (cfg->logblocks / sunit) * sunit;
Looks better,
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
--D
> }
> cfg->logblocks = tmp_logblocks;
> --
> 2.19.1
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-03-19 15:17 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-03-17 9:19 [PATCH] mkfs: Round down log device size if aligned value is larger than device size Chandan Rajendra
2019-03-18 15:57 ` Darrick J. Wong
2019-03-19 5:10 ` [PATCH V2] " Chandan Rajendra
2019-03-19 15:17 ` Darrick J. Wong
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox