Merge tag 'xfs-5.5-merge-16' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
Pull XFS updates from Darrick Wong:
"For this release, we changed quite a few things.
Highlights:
- Fixed some long tail latency problems in the block allocator
- Removed some long deprecated (and for the past several years no-op)
mount options and ioctls
- Strengthened the extended attribute and directory verifiers
- Audited and fixed all the places where we could return EFSCORRUPTED
without logging anything
- Refactored the old SGI space allocation ioctls to make the
equivalent fallocate calls
- Fixed a race between fallocate and directio
- Fixed an integer overflow when files have more than a few
billion(!) extents
- Fixed a longstanding bug where quota accounting could be incorrect
when performing unwritten extent conversion on a freshly mounted fs
- Fixed various complaints in scrub about soft lockups and
unresponsiveness to signals
- De-vtable'd the directory handling code, which should make it
faster
- Converted to the new mount api, for better or for worse
- Cleaned up some memory leaks
and quite a lot of other smaller fixes and cleanups.
A more detailed summary:
- Fill out the build string
- Prevent inode fork extent count overflows
- Refactor the allocator to reduce long tail latency
- Rework incore log locking a little to reduce spinning
- Break up the xfs_iomap_begin functions into smaller more cohesive
parts
- Fix allocation alignment being dropped too early when the
allocation request is for more blocks than an AG is large
- Other small cleanups
- Clean up file buftarg retrieval helpers
- Hoist the resvsp and unresvsp ioctls to the vfs
- Remove the undocumented biosize mount option, since it has never
been mentioned as existing or supported on linux
- Clean up some of the mount option printing and parsing
- Enhance attr leaf verifier to check block structure
- Check dirent and attr names for invalid characters before passing
them to the vfs
- Refactor open-coded bmbt walking
- Fix a few places where we return EIO instead of EFSCORRUPTED after
failing metadata sanity checks
- Fix a synchronization problem between fallocate and aio dio
corrupting the file length
- Clean up various loose ends in the iomap and bmap code
- Convert to the new mount api
- Make sure we always log something when returning EFSCORRUPTED
- Fix some problems where long running scrub loops could trigger soft
lockup warnings and/or fail to exit due to fatal signals pending
- Fix various Coverity complaints
- Remove most of the function pointers from the directory code to
reduce indirection penalties
- Ensure that dquots are attached to the inode when performing
unwritten extent conversion after io
- Deuglify incore projid and crtime types
- Fix another AGI/AGF locking order deadlock when renaming
- Clean up some quota typedefs
- Remove the FSSETDM ioctls which haven't done anything in 20 years
- Fix some memory leaks when mounting the log fails
- Fix an underflow when updating an xattr leaf freemap
- Remove some trivial wrappers
- Report metadata corruption as an error, not a (potentially) fatal
assertion
- Clean up the dir/attr buffer mapping code
- Allow fatal signals to kill scrub during parent pointer checks"
* tag 'xfs-5.5-merge-16' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux: (198 commits)
xfs: allow parent directory scans to be interrupted with fatal signals
xfs: remove the mappedbno argument to xfs_da_get_buf
xfs: remove the mappedbno argument to xfs_da_read_buf
xfs: split xfs_da3_node_read
xfs: remove the mappedbno argument to xfs_dir3_leafn_read
xfs: remove the mappedbno argument to xfs_dir3_leaf_read
xfs: remove the mappedbno argument to xfs_attr3_leaf_read
xfs: remove the mappedbno argument to xfs_da_reada_buf
xfs: improve the xfs_dabuf_map calling conventions
xfs: refactor xfs_dabuf_map
xfs: simplify mappedbno handling in xfs_da_{get,read}_buf
xfs: report corruption only as a regular error
xfs: Remove kmem_zone_free() wrapper
xfs: Remove kmem_zone_destroy() wrapper
xfs: Remove slab init wrappers
xfs: fix attr leaf header freemap.size underflow
xfs: fix some memory leaks in log recovery
xfs: fix another missing include
xfs: remove XFS_IOC_FSSETDM and XFS_IOC_FSSETDM_BY_HANDLE
xfs: remove duplicated include from xfs_dir2_data.c
...
This commit is contained in:
16
fs/ioctl.c
16
fs/ioctl.c
@@ -467,7 +467,7 @@ EXPORT_SYMBOL(generic_block_fiemap);
|
||||
* Only the l_start, l_len and l_whence fields of the 'struct space_resv'
|
||||
* are used here, rest are ignored.
|
||||
*/
|
||||
int ioctl_preallocate(struct file *filp, void __user *argp)
|
||||
int ioctl_preallocate(struct file *filp, int mode, void __user *argp)
|
||||
{
|
||||
struct inode *inode = file_inode(filp);
|
||||
struct space_resv sr;
|
||||
@@ -488,13 +488,14 @@ int ioctl_preallocate(struct file *filp, void __user *argp)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return vfs_fallocate(filp, FALLOC_FL_KEEP_SIZE, sr.l_start, sr.l_len);
|
||||
return vfs_fallocate(filp, mode | FALLOC_FL_KEEP_SIZE, sr.l_start,
|
||||
sr.l_len);
|
||||
}
|
||||
|
||||
/* on ia32 l_start is on a 32-bit boundary */
|
||||
#if defined CONFIG_COMPAT && defined(CONFIG_X86_64)
|
||||
/* just account for different alignment */
|
||||
int compat_ioctl_preallocate(struct file *file,
|
||||
int compat_ioctl_preallocate(struct file *file, int mode,
|
||||
struct space_resv_32 __user *argp)
|
||||
{
|
||||
struct inode *inode = file_inode(file);
|
||||
@@ -516,7 +517,7 @@ int compat_ioctl_preallocate(struct file *file,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return vfs_fallocate(file, FALLOC_FL_KEEP_SIZE, sr.l_start, sr.l_len);
|
||||
return vfs_fallocate(file, mode | FALLOC_FL_KEEP_SIZE, sr.l_start, sr.l_len);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -533,7 +534,12 @@ static int file_ioctl(struct file *filp, unsigned int cmd,
|
||||
return put_user(i_size_read(inode) - filp->f_pos, p);
|
||||
case FS_IOC_RESVSP:
|
||||
case FS_IOC_RESVSP64:
|
||||
return ioctl_preallocate(filp, p);
|
||||
return ioctl_preallocate(filp, 0, p);
|
||||
case FS_IOC_UNRESVSP:
|
||||
case FS_IOC_UNRESVSP64:
|
||||
return ioctl_preallocate(filp, FALLOC_FL_PUNCH_HOLE, p);
|
||||
case FS_IOC_ZERO_RANGE:
|
||||
return ioctl_preallocate(filp, FALLOC_FL_ZERO_RANGE, p);
|
||||
}
|
||||
|
||||
return vfs_ioctl(filp, cmd, arg);
|
||||
|
||||
Reference in New Issue
Block a user