New code for 6.5:
* Fix a problem where shrink would blow out the space reserve by declining to shrink the filesystem. * Drop the EXPERIMENTAL tag for the large extent counts feature. * Set FMODE_CAN_ODIRECT and get rid of an address space op. * Fix an AG count overflow bug in growfs if the new device size is redonkulously large. Signed-off-by: Darrick J. Wong <djwong@kernel.org> -----BEGIN PGP SIGNATURE----- iHQEABYKAB0WIQQ2qTKExjcn+O1o2YRKO3ySh0YRpgUCZIs45AAKCRBKO3ySh0YR ps5NAP92oOaMlXeaxTTGLnbCe/sQhQiVfjE45sQL2BziHN/s2gD2OX01yn2w+Mpg CdQ6HChUzL2fU3eleh1yMNR7McuaCA== =hQX7 -----END PGP SIGNATURE----- Merge tag 'xfs-6.5-merge-2' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux Pull xfs updates from Darrick Wong: "There's not much going on this cycle -- the large extent counts feature graduated, so now users can create more extremely fragmented files! :P The rest are bug fixes; and I'll be sending more next week. - Fix a problem where shrink would blow out the space reserve by declining to shrink the filesystem - Drop the EXPERIMENTAL tag for the large extent counts feature - Set FMODE_CAN_ODIRECT and get rid of an address space op - Fix an AG count overflow bug in growfs if the new device size is redonkulously large" * tag 'xfs-6.5-merge-2' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux: xfs: fix ag count overflow during growfs xfs: set FMODE_CAN_ODIRECT instead of a dummy direct_IO method xfs: drop EXPERIMENTAL tag for large extent counts xfs: don't deplete the reserve pool when trying to shrink the fs
This commit is contained in:
commit
9e06150d3c
@ -257,6 +257,8 @@ typedef struct xfs_fsop_resblks {
|
||||
#define XFS_MAX_AG_BLOCKS (XFS_MAX_AG_BYTES / XFS_MIN_BLOCKSIZE)
|
||||
#define XFS_MAX_CRC_AG_BLOCKS (XFS_MAX_AG_BYTES / XFS_MIN_CRC_BLOCKSIZE)
|
||||
|
||||
#define XFS_MAX_AGNUMBER ((xfs_agnumber_t)(NULLAGNUMBER - 1))
|
||||
|
||||
/* keep the maximum size under 2^31 by a small amount */
|
||||
#define XFS_MAX_LOG_BYTES \
|
||||
((2 * 1024 * 1024 * 1024ULL) - XFS_MIN_LOG_BYTES)
|
||||
|
@ -582,7 +582,6 @@ const struct address_space_operations xfs_address_space_operations = {
|
||||
.release_folio = iomap_release_folio,
|
||||
.invalidate_folio = iomap_invalidate_folio,
|
||||
.bmap = xfs_vm_bmap,
|
||||
.direct_IO = noop_direct_IO,
|
||||
.migrate_folio = filemap_migrate_folio,
|
||||
.is_partially_uptodate = iomap_is_partially_uptodate,
|
||||
.error_remove_page = generic_error_remove_page,
|
||||
@ -591,7 +590,6 @@ const struct address_space_operations xfs_address_space_operations = {
|
||||
|
||||
const struct address_space_operations xfs_dax_aops = {
|
||||
.writepages = xfs_dax_writepages,
|
||||
.direct_IO = noop_direct_IO,
|
||||
.dirty_folio = noop_dirty_folio,
|
||||
.swap_activate = xfs_iomap_swapfile_activate,
|
||||
};
|
||||
|
@ -1194,7 +1194,7 @@ xfs_file_open(
|
||||
if (xfs_is_shutdown(XFS_M(inode->i_sb)))
|
||||
return -EIO;
|
||||
file->f_mode |= FMODE_NOWAIT | FMODE_BUF_RASYNC | FMODE_BUF_WASYNC |
|
||||
FMODE_DIO_PARALLEL_WRITE;
|
||||
FMODE_DIO_PARALLEL_WRITE | FMODE_CAN_ODIRECT;
|
||||
return generic_file_open(inode, file);
|
||||
}
|
||||
|
||||
|
@ -115,11 +115,16 @@ xfs_growfs_data_private(
|
||||
|
||||
nb_div = nb;
|
||||
nb_mod = do_div(nb_div, mp->m_sb.sb_agblocks);
|
||||
nagcount = nb_div + (nb_mod != 0);
|
||||
if (nb_mod && nb_mod < XFS_MIN_AG_BLOCKS) {
|
||||
nagcount--;
|
||||
nb = (xfs_rfsblock_t)nagcount * mp->m_sb.sb_agblocks;
|
||||
if (nb_mod && nb_mod >= XFS_MIN_AG_BLOCKS)
|
||||
nb_div++;
|
||||
else if (nb_mod)
|
||||
nb = nb_div * mp->m_sb.sb_agblocks;
|
||||
|
||||
if (nb_div > XFS_MAX_AGNUMBER + 1) {
|
||||
nb_div = XFS_MAX_AGNUMBER + 1;
|
||||
nb = nb_div * mp->m_sb.sb_agblocks;
|
||||
}
|
||||
nagcount = nb_div;
|
||||
delta = nb - mp->m_sb.sb_dblocks;
|
||||
/*
|
||||
* Reject filesystems with a single AG because they are not
|
||||
@ -140,9 +145,13 @@ xfs_growfs_data_private(
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (delta > 0)
|
||||
error = xfs_trans_alloc(mp, &M_RES(mp)->tr_growdata,
|
||||
(delta > 0 ? XFS_GROWFS_SPACE_RES(mp) : -delta), 0,
|
||||
XFS_TRANS_RESERVE, &tp);
|
||||
XFS_GROWFS_SPACE_RES(mp), 0, XFS_TRANS_RESERVE,
|
||||
&tp);
|
||||
else
|
||||
error = xfs_trans_alloc(mp, &M_RES(mp)->tr_growdata, -delta, 0,
|
||||
0, &tp);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
|
@ -1707,10 +1707,6 @@ xfs_fs_fill_super(
|
||||
goto out_filestream_unmount;
|
||||
}
|
||||
|
||||
if (xfs_has_large_extent_counts(mp))
|
||||
xfs_warn(mp,
|
||||
"EXPERIMENTAL Large extent counts feature in use. Use at your own risk!");
|
||||
|
||||
error = xfs_mountfs(mp);
|
||||
if (error)
|
||||
goto out_filestream_unmount;
|
||||
|
Loading…
Reference in New Issue
Block a user