[PATCH V2] mkfs: Round down log device size if aligned value is larger than device size

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxx>
---
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




[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux