|
@@ -399,9 +399,26 @@ xfs_growfs_data_private(
|
|
|
|
|
|
/* update secondary superblocks. */
|
|
|
for (agno = 1; agno < nagcount; agno++) {
|
|
|
- error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp,
|
|
|
+ error = 0;
|
|
|
+ /*
|
|
|
+ * new secondary superblocks need to be zeroed, not read from
|
|
|
+ * disk as the contents of the new area we are growing into is
|
|
|
+ * completely unknown.
|
|
|
+ */
|
|
|
+ if (agno < oagcount) {
|
|
|
+ error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp,
|
|
|
XFS_AGB_TO_DADDR(mp, agno, XFS_SB_BLOCK(mp)),
|
|
|
XFS_FSS_TO_BB(mp, 1), 0, &bp);
|
|
|
+ } else {
|
|
|
+ bp = xfs_trans_get_buf(NULL, mp->m_ddev_targp,
|
|
|
+ XFS_AGB_TO_DADDR(mp, agno, XFS_SB_BLOCK(mp)),
|
|
|
+ XFS_FSS_TO_BB(mp, 1), 0);
|
|
|
+ if (bp)
|
|
|
+ xfs_buf_zero(bp, 0, BBTOB(bp->b_length));
|
|
|
+ else
|
|
|
+ error = ENOMEM;
|
|
|
+ }
|
|
|
+
|
|
|
if (error) {
|
|
|
xfs_warn(mp,
|
|
|
"error %d reading secondary superblock for ag %d",
|
|
@@ -423,7 +440,7 @@ xfs_growfs_data_private(
|
|
|
break; /* no point in continuing */
|
|
|
}
|
|
|
}
|
|
|
- return 0;
|
|
|
+ return error;
|
|
|
|
|
|
error0:
|
|
|
xfs_trans_cancel(tp, XFS_TRANS_ABORT);
|