mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-01-14 17:22:05 +03:00
linux/kmem: remove PF_FSTRANS and PF_MEMALLOC_NOIO compat
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Alexander Motin <mav@FreeBSD.org> Signed-off-by: Rob Norris <robn@despairlabs.com> Sponsored-by: https://despairlabs.com/sponsor/ Closes #17551
This commit is contained in:
parent
cecff09faa
commit
96d20d7d59
@ -61,7 +61,7 @@ void *spl_kvmalloc(size_t size, gfp_t flags);
|
||||
/*
|
||||
* Convert a KM_* flags mask to its Linux GFP_* counterpart. The conversion
|
||||
* function is context aware which means that KM_SLEEP allocations can be
|
||||
* safely used in syncing contexts which have set PF_FSTRANS.
|
||||
* safely used in syncing contexts which have set SPL_FSTRANS.
|
||||
*/
|
||||
static inline gfp_t
|
||||
kmem_flags_convert(int flags)
|
||||
@ -91,25 +91,11 @@ typedef struct {
|
||||
} fstrans_cookie_t;
|
||||
|
||||
/*
|
||||
* Introduced in Linux 3.9, however this cannot be solely relied on before
|
||||
* Linux 3.18 as it doesn't turn off __GFP_FS as it should.
|
||||
* SPL_FSTRANS is the set of flags that indicate that the task is in a
|
||||
* filesystem or IO codepath, and so any allocation must not call back into
|
||||
* those codepaths (eg to swap).
|
||||
*/
|
||||
#ifdef PF_MEMALLOC_NOIO
|
||||
#define __SPL_PF_MEMALLOC_NOIO (PF_MEMALLOC_NOIO)
|
||||
#else
|
||||
#define __SPL_PF_MEMALLOC_NOIO (0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* PF_FSTRANS is removed from Linux 4.12
|
||||
*/
|
||||
#ifdef PF_FSTRANS
|
||||
#define __SPL_PF_FSTRANS (PF_FSTRANS)
|
||||
#else
|
||||
#define __SPL_PF_FSTRANS (0)
|
||||
#endif
|
||||
|
||||
#define SPL_FSTRANS (__SPL_PF_FSTRANS|__SPL_PF_MEMALLOC_NOIO)
|
||||
#define SPL_FSTRANS (PF_MEMALLOC_NOIO)
|
||||
|
||||
static inline fstrans_cookie_t
|
||||
spl_fstrans_mark(void)
|
||||
@ -141,16 +127,6 @@ spl_fstrans_check(void)
|
||||
return (current->flags & SPL_FSTRANS);
|
||||
}
|
||||
|
||||
/*
|
||||
* specifically used to check PF_FSTRANS flag, cannot be relied on for
|
||||
* checking spl_fstrans_mark().
|
||||
*/
|
||||
static inline int
|
||||
__spl_pf_fstrans_check(void)
|
||||
{
|
||||
return (current->flags & __SPL_PF_FSTRANS);
|
||||
}
|
||||
|
||||
/*
|
||||
* Kernel compatibility for GFP flags
|
||||
*/
|
||||
|
||||
@ -766,7 +766,6 @@ typedef int fstrans_cookie_t;
|
||||
|
||||
extern fstrans_cookie_t spl_fstrans_mark(void);
|
||||
extern void spl_fstrans_unmark(fstrans_cookie_t);
|
||||
extern int __spl_pf_fstrans_check(void);
|
||||
extern int kmem_cache_reap_active(void);
|
||||
|
||||
|
||||
|
||||
@ -1024,12 +1024,6 @@ spl_fstrans_unmark(fstrans_cookie_t cookie)
|
||||
(void) cookie;
|
||||
}
|
||||
|
||||
int
|
||||
__spl_pf_fstrans_check(void)
|
||||
{
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
kmem_cache_reap_active(void)
|
||||
{
|
||||
|
||||
@ -260,24 +260,12 @@ zfs_file_fsync(zfs_file_t *filp, int flags)
|
||||
{
|
||||
int datasync = 0;
|
||||
int error;
|
||||
int fstrans;
|
||||
|
||||
if (flags & O_DSYNC)
|
||||
datasync = 1;
|
||||
|
||||
/*
|
||||
* May enter XFS which generates a warning when PF_FSTRANS is set.
|
||||
* To avoid this the flag is cleared over vfs_sync() and then reset.
|
||||
*/
|
||||
fstrans = __spl_pf_fstrans_check();
|
||||
if (fstrans)
|
||||
current->flags &= ~(__SPL_PF_FSTRANS);
|
||||
|
||||
error = -vfs_fsync(filp, datasync);
|
||||
|
||||
if (fstrans)
|
||||
current->flags |= __SPL_PF_FSTRANS;
|
||||
|
||||
return (error);
|
||||
}
|
||||
|
||||
@ -291,14 +279,6 @@ zfs_file_fsync(zfs_file_t *filp, int flags)
|
||||
int
|
||||
zfs_file_deallocate(zfs_file_t *fp, loff_t offset, loff_t len)
|
||||
{
|
||||
/*
|
||||
* May enter XFS which generates a warning when PF_FSTRANS is set.
|
||||
* To avoid this the flag is cleared over vfs_sync() and then reset.
|
||||
*/
|
||||
int fstrans = __spl_pf_fstrans_check();
|
||||
if (fstrans)
|
||||
current->flags &= ~(__SPL_PF_FSTRANS);
|
||||
|
||||
/*
|
||||
* When supported by the underlying file system preferentially
|
||||
* use the fallocate() callback to preallocate the space.
|
||||
@ -308,9 +288,6 @@ zfs_file_deallocate(zfs_file_t *fp, loff_t offset, loff_t len)
|
||||
error = -fp->f_op->fallocate(fp,
|
||||
FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, offset, len);
|
||||
|
||||
if (fstrans)
|
||||
current->flags |= __SPL_PF_FSTRANS;
|
||||
|
||||
if (error)
|
||||
return (SET_ERROR(error));
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user