staging: lustre: discard cfs_block_sigsinv()
cfs_block_sigsinv() and cfs_restore_sigs() are simple wrappers which save a couple of line of code and hurt readability for people not familiar with them. They aren't used often enough to be worthwhile, so discard them and open-code the functionality. The sigorsets() call isn't needed as or-ing with current->blocked is exactly what sigprocmask(SIG_BLOCK) does. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
44a3c2637c
commit
6afe572bc7
@ -93,22 +93,6 @@
|
||||
#define LNET_ACCEPTOR_MIN_RESERVED_PORT 512
|
||||
#define LNET_ACCEPTOR_MAX_RESERVED_PORT 1023
|
||||
|
||||
/* Block all signals except for the @sigs */
|
||||
static inline void cfs_block_sigsinv(unsigned long sigs, sigset_t *old)
|
||||
{
|
||||
sigset_t new;
|
||||
|
||||
siginitsetinv(&new, sigs);
|
||||
sigorsets(&new, ¤t->blocked, &new);
|
||||
sigprocmask(SIG_BLOCK, &new, old);
|
||||
}
|
||||
|
||||
static inline void
|
||||
cfs_restore_sigs(sigset_t *old)
|
||||
{
|
||||
sigprocmask(SIG_SETMASK, old, NULL);
|
||||
}
|
||||
|
||||
struct libcfs_ioctl_handler {
|
||||
struct list_head item;
|
||||
int (*handle_ioctl)(unsigned int cmd, struct libcfs_ioctl_hdr *hdr);
|
||||
|
@ -94,31 +94,34 @@ static inline int l_fatal_signal_pending(struct task_struct *p)
|
||||
*/
|
||||
#define l_wait_event_abortable(wq, condition) \
|
||||
({ \
|
||||
sigset_t __old_blocked; \
|
||||
sigset_t __new_blocked, __old_blocked; \
|
||||
int __ret = 0; \
|
||||
cfs_block_sigsinv(LUSTRE_FATAL_SIGS, &__old_blocked); \
|
||||
siginitset(&__new_blocked, LUSTRE_FATAL_SIGS); \
|
||||
sigprocmask(SIG_BLOCK, &__new_blocked, &__old_blocked); \
|
||||
__ret = wait_event_interruptible(wq, condition); \
|
||||
cfs_restore_sigs(&__old_blocked); \
|
||||
sigprocmask(SIG_SETMASK, &__old_blocked, NULL); \
|
||||
__ret; \
|
||||
})
|
||||
|
||||
#define l_wait_event_abortable_timeout(wq, condition, timeout) \
|
||||
({ \
|
||||
sigset_t __old_blocked; \
|
||||
sigset_t __new_blocked, __old_blocked; \
|
||||
int __ret = 0; \
|
||||
cfs_block_sigsinv(LUSTRE_FATAL_SIGS, &__old_blocked); \
|
||||
siginitset(&__new_blocked, LUSTRE_FATAL_SIGS); \
|
||||
sigprocmask(SIG_BLOCK, &__new_blocked, &__old_blocked); \
|
||||
__ret = wait_event_interruptible_timeout(wq, condition, timeout);\
|
||||
cfs_restore_sigs(&__old_blocked); \
|
||||
sigprocmask(SIG_SETMASK, &__old_blocked, NULL); \
|
||||
__ret; \
|
||||
})
|
||||
|
||||
#define l_wait_event_abortable_exclusive(wq, condition) \
|
||||
({ \
|
||||
sigset_t __old_blocked; \
|
||||
sigset_t __new_blocked, __old_blocked; \
|
||||
int __ret = 0; \
|
||||
cfs_block_sigsinv(LUSTRE_FATAL_SIGS, &__old_blocked); \
|
||||
siginitset(&__new_blocked, LUSTRE_FATAL_SIGS); \
|
||||
sigprocmask(SIG_BLOCK, &__new_blocked, &__old_blocked); \
|
||||
__ret = wait_event_interruptible_exclusive(wq, condition); \
|
||||
cfs_restore_sigs(&__old_blocked); \
|
||||
sigprocmask(SIG_SETMASK, &__old_blocked, NULL); \
|
||||
__ret; \
|
||||
})
|
||||
#endif /* _LUSTRE_LIB_H */
|
||||
|
@ -152,7 +152,7 @@ static int ll_page_mkwrite0(struct vm_area_struct *vma, struct page *vmpage,
|
||||
struct vvp_io *vio;
|
||||
int result;
|
||||
u16 refcheck;
|
||||
sigset_t set;
|
||||
sigset_t old, new;
|
||||
struct inode *inode;
|
||||
struct ll_inode_info *lli;
|
||||
|
||||
@ -177,14 +177,15 @@ static int ll_page_mkwrite0(struct vm_area_struct *vma, struct page *vmpage,
|
||||
vio->u.fault.ft_vma = vma;
|
||||
vio->u.fault.ft_vmpage = vmpage;
|
||||
|
||||
cfs_block_sigsinv(sigmask(SIGKILL) | sigmask(SIGTERM), &set);
|
||||
siginitsetinv(&new, sigmask(SIGKILL) | sigmask(SIGTERM));
|
||||
sigprocmask(SIG_BLOCK, &new, &old);
|
||||
|
||||
inode = vvp_object_inode(io->ci_obj);
|
||||
lli = ll_i2info(inode);
|
||||
|
||||
result = cl_io_loop(env, io);
|
||||
|
||||
cfs_restore_sigs(&set);
|
||||
sigprocmask(SIG_SETMASK, &old, NULL);
|
||||
|
||||
if (result == 0) {
|
||||
struct inode *inode = file_inode(vma->vm_file);
|
||||
@ -328,13 +329,14 @@ static int ll_fault(struct vm_fault *vmf)
|
||||
int count = 0;
|
||||
bool printed = false;
|
||||
int result;
|
||||
sigset_t set;
|
||||
sigset_t old, new;
|
||||
|
||||
/* Only SIGKILL and SIGTERM are allowed for fault/nopage/mkwrite
|
||||
* so that it can be killed by admin but not cause segfault by
|
||||
* other signals.
|
||||
*/
|
||||
cfs_block_sigsinv(sigmask(SIGKILL) | sigmask(SIGTERM), &set);
|
||||
siginitsetinv(&new, sigmask(SIGKILL) | sigmask(SIGTERM));
|
||||
sigprocmask(SIG_BLOCK, &new, &old);
|
||||
|
||||
restart:
|
||||
result = ll_fault0(vmf->vma, vmf);
|
||||
@ -360,7 +362,7 @@ restart:
|
||||
|
||||
result = VM_FAULT_LOCKED;
|
||||
}
|
||||
cfs_restore_sigs(&set);
|
||||
sigprocmask(SIG_SETMASK, &old, NULL);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user