@@ -607,9 +607,8 @@ static vm_fault_t nfs_vm_page_mkwrite(struct vm_fault *vmf)
goto out;
}
- wait_on_bit_action(&NFS_I(inode)->flags, NFS_INO_INVALIDATING,
- nfs_wait_bit_killable,
- TASK_KILLABLE|TASK_FREEZABLE_UNSAFE);
+ wait_on_bit(&NFS_I(inode)->flags, NFS_INO_INVALIDATING,
+ TASK_KILLABLE|TASK_FREEZABLE_UNSAFE);
folio_lock(folio);
mapping = folio->mapping;
@@ -72,15 +72,6 @@ nfs_fattr_to_ino_t(struct nfs_fattr *fattr)
return nfs_fileid_to_ino_t(fattr->fileid);
}
-int nfs_wait_bit_killable(struct wait_bit_key *key, int mode)
-{
- schedule();
- if (signal_pending_state(mode, current))
- return -ERESTARTSYS;
- return 0;
-}
-EXPORT_SYMBOL_GPL(nfs_wait_bit_killable);
-
/**
* nfs_compat_user_ino64 - returns the user-visible inode number
* @fileid: 64-bit fileid
@@ -1419,9 +1410,8 @@ int nfs_clear_invalid_mapping(struct address_space *mapping)
* the bit lock here if it looks like we're going to be doing that.
*/
for (;;) {
- ret = wait_on_bit_action(bitlock, NFS_INO_INVALIDATING,
- nfs_wait_bit_killable,
- TASK_KILLABLE|TASK_FREEZABLE_UNSAFE);
+ ret = wait_on_bit(bitlock, NFS_INO_INVALIDATING,
+ TASK_KILLABLE|TASK_FREEZABLE_UNSAFE);
if (ret)
goto out;
smp_rmb(); /* pairs with smp_wmb() below */
@@ -451,7 +451,6 @@ extern void nfs_evict_inode(struct inode *);
extern void nfs_zap_acl_cache(struct inode *inode);
extern void nfs_set_cache_invalid(struct inode *inode, unsigned long flags);
extern bool nfs_check_cache_invalid(struct inode *, unsigned long);
-extern int nfs_wait_bit_killable(struct wait_bit_key *key, int mode);
#if IS_ENABLED(CONFIG_NFS_LOCALIO)
/* localio.c */
@@ -1313,9 +1313,8 @@ int nfs4_wait_clnt_recover(struct nfs_client *clp)
might_sleep();
refcount_inc(&clp->cl_count);
- res = wait_on_bit_action(&clp->cl_state, NFS4CLNT_MANAGER_RUNNING,
- nfs_wait_bit_killable,
- TASK_KILLABLE|TASK_FREEZABLE_UNSAFE);
+ res = wait_on_bit(&clp->cl_state, NFS4CLNT_MANAGER_RUNNING,
+ TASK_KILLABLE|TASK_FREEZABLE_UNSAFE);
if (res)
goto out;
if (clp->cl_cons_state < 0)
@@ -2022,9 +2022,8 @@ static int pnfs_prepare_to_retry_layoutget(struct pnfs_layout_hdr *lo)
* reference
*/
pnfs_layoutcommit_inode(lo->plh_inode, false);
- return wait_on_bit_action(&lo->plh_flags, NFS_LAYOUT_RETURN,
- nfs_wait_bit_killable,
- TASK_KILLABLE|TASK_FREEZABLE_UNSAFE);
+ return wait_on_bit(&lo->plh_flags, NFS_LAYOUT_RETURN,
+ TASK_KILLABLE|TASK_FREEZABLE_UNSAFE);
}
static void nfs_layoutget_begin(struct pnfs_layout_hdr *lo)
@@ -3319,9 +3318,8 @@ pnfs_layoutcommit_inode(struct inode *inode, bool sync)
if (test_and_set_bit(NFS_INO_LAYOUTCOMMITTING, &nfsi->flags)) {
if (!sync)
goto out;
- status = wait_on_bit_lock_action(&nfsi->flags,
+ status = wait_on_bit_lock(&nfsi->flags,
NFS_INO_LAYOUTCOMMITTING,
- nfs_wait_bit_killable,
TASK_KILLABLE|TASK_FREEZABLE_UNSAFE);
if (status)
goto out;
@@ -3369,7 +3367,6 @@ pnfs_layoutcommit_inode(struct inode *inode, bool sync)
}
}
-
status = nfs4_proc_layoutcommit(data, sync);
out:
if (status)
This patch changes NFS to use wait_on_bit() instead of wait_on_bit_action() nfs_wait_bit_killable() is identical to bit_wait() except that it returns -ERESTARTSYS instead of -EINTR. NFS doesn't care about this distinction. The status will often get back to user-space but it will only be sent when the process is being killed in which case there is no user-space to care. Signed-off-by: NeilBrown <neilb@suse.de> --- fs/nfs/file.c | 5 ++--- fs/nfs/inode.c | 14 ++------------ fs/nfs/internal.h | 1 - fs/nfs/nfs4state.c | 5 ++--- fs/nfs/pnfs.c | 9 +++------ 5 files changed, 9 insertions(+), 25 deletions(-)