Loading fs/orangefs/pvfs2-kernel.h +2 −2 Original line number Diff line number Diff line Loading @@ -649,9 +649,9 @@ void pvfs2_op_initialize(struct pvfs2_kernel_op_s *op); void pvfs2_make_bad_inode(struct inode *inode); void mask_blocked_signals(sigset_t *orig_sigset); void block_signals(sigset_t *); void unmask_blocked_signals(sigset_t *orig_sigset); void set_signals(sigset_t *); int pvfs2_unmount_sb(struct super_block *sb); Loading fs/orangefs/pvfs2-utils.c +15 −26 Original line number Diff line number Diff line Loading @@ -632,36 +632,25 @@ void pvfs2_make_bad_inode(struct inode *inode) } } /* this code is based on linux/net/sunrpc/clnt.c:rpc_clnt_sigmask */ void mask_blocked_signals(sigset_t *orig_sigset) /* Block all blockable signals... */ void block_signals(sigset_t *orig_sigset) { unsigned long sigallow = sigmask(SIGKILL); unsigned long irqflags = 0; struct k_sigaction *action = pvfs2_current_sigaction; sigallow |= ((action[SIGINT - 1].sa.sa_handler == SIG_DFL) ? sigmask(SIGINT) : 0); sigallow |= ((action[SIGQUIT - 1].sa.sa_handler == SIG_DFL) ? sigmask(SIGQUIT) : 0); spin_lock_irqsave(&pvfs2_current_signal_lock, irqflags); *orig_sigset = current->blocked; siginitsetinv(¤t->blocked, sigallow & ~orig_sigset->sig[0]); recalc_sigpending(); spin_unlock_irqrestore(&pvfs2_current_signal_lock, irqflags); } /* this code is based on linux/net/sunrpc/clnt.c:rpc_clnt_sigunmask */ void unmask_blocked_signals(sigset_t *orig_sigset) { unsigned long irqflags = 0; sigset_t mask; /* * Initialize all entries in the signal set to the * inverse of the given mask. */ siginitsetinv(&mask, sigmask(SIGKILL)); spin_lock_irqsave(&pvfs2_current_signal_lock, irqflags); current->blocked = *orig_sigset; recalc_sigpending(); spin_unlock_irqrestore(&pvfs2_current_signal_lock, irqflags); /* Block 'em Danno... */ sigprocmask(SIG_BLOCK, &mask, orig_sigset); } /* set the signal mask to the given template... */ void set_signals(sigset_t *sigset) { sigprocmask(SIG_SETMASK, sigset, NULL); } __u64 pvfs2_convert_time_field(void *time_ptr) Loading fs/orangefs/waitqueue.c +3 −3 Original line number Diff line number Diff line Loading @@ -80,7 +80,7 @@ int service_operation(struct pvfs2_kernel_op_s *op, /* mask out signals if this operation is not to be interrupted */ if (!(flags & PVFS2_OP_INTERRUPTIBLE)) mask_blocked_signals(&orig_sigset); block_signals(&orig_sigset); if (!(flags & PVFS2_OP_NO_SEMAPHORE)) { ret = mutex_lock_interruptible(&request_mutex); Loading @@ -90,7 +90,7 @@ int service_operation(struct pvfs2_kernel_op_s *op, */ if (ret < 0) { if (!(flags & PVFS2_OP_INTERRUPTIBLE)) unmask_blocked_signals(&orig_sigset); set_signals(&orig_sigset); op->downcall.status = ret; gossip_debug(GOSSIP_WAIT_DEBUG, "pvfs2: service_operation interrupted.\n"); Loading Loading @@ -160,7 +160,7 @@ int service_operation(struct pvfs2_kernel_op_s *op, } if (!(flags & PVFS2_OP_INTERRUPTIBLE)) unmask_blocked_signals(&orig_sigset); set_signals(&orig_sigset); BUG_ON(ret != op->downcall.status); /* retry if operation has not been serviced and if requested */ Loading Loading
fs/orangefs/pvfs2-kernel.h +2 −2 Original line number Diff line number Diff line Loading @@ -649,9 +649,9 @@ void pvfs2_op_initialize(struct pvfs2_kernel_op_s *op); void pvfs2_make_bad_inode(struct inode *inode); void mask_blocked_signals(sigset_t *orig_sigset); void block_signals(sigset_t *); void unmask_blocked_signals(sigset_t *orig_sigset); void set_signals(sigset_t *); int pvfs2_unmount_sb(struct super_block *sb); Loading
fs/orangefs/pvfs2-utils.c +15 −26 Original line number Diff line number Diff line Loading @@ -632,36 +632,25 @@ void pvfs2_make_bad_inode(struct inode *inode) } } /* this code is based on linux/net/sunrpc/clnt.c:rpc_clnt_sigmask */ void mask_blocked_signals(sigset_t *orig_sigset) /* Block all blockable signals... */ void block_signals(sigset_t *orig_sigset) { unsigned long sigallow = sigmask(SIGKILL); unsigned long irqflags = 0; struct k_sigaction *action = pvfs2_current_sigaction; sigallow |= ((action[SIGINT - 1].sa.sa_handler == SIG_DFL) ? sigmask(SIGINT) : 0); sigallow |= ((action[SIGQUIT - 1].sa.sa_handler == SIG_DFL) ? sigmask(SIGQUIT) : 0); spin_lock_irqsave(&pvfs2_current_signal_lock, irqflags); *orig_sigset = current->blocked; siginitsetinv(¤t->blocked, sigallow & ~orig_sigset->sig[0]); recalc_sigpending(); spin_unlock_irqrestore(&pvfs2_current_signal_lock, irqflags); } /* this code is based on linux/net/sunrpc/clnt.c:rpc_clnt_sigunmask */ void unmask_blocked_signals(sigset_t *orig_sigset) { unsigned long irqflags = 0; sigset_t mask; /* * Initialize all entries in the signal set to the * inverse of the given mask. */ siginitsetinv(&mask, sigmask(SIGKILL)); spin_lock_irqsave(&pvfs2_current_signal_lock, irqflags); current->blocked = *orig_sigset; recalc_sigpending(); spin_unlock_irqrestore(&pvfs2_current_signal_lock, irqflags); /* Block 'em Danno... */ sigprocmask(SIG_BLOCK, &mask, orig_sigset); } /* set the signal mask to the given template... */ void set_signals(sigset_t *sigset) { sigprocmask(SIG_SETMASK, sigset, NULL); } __u64 pvfs2_convert_time_field(void *time_ptr) Loading
fs/orangefs/waitqueue.c +3 −3 Original line number Diff line number Diff line Loading @@ -80,7 +80,7 @@ int service_operation(struct pvfs2_kernel_op_s *op, /* mask out signals if this operation is not to be interrupted */ if (!(flags & PVFS2_OP_INTERRUPTIBLE)) mask_blocked_signals(&orig_sigset); block_signals(&orig_sigset); if (!(flags & PVFS2_OP_NO_SEMAPHORE)) { ret = mutex_lock_interruptible(&request_mutex); Loading @@ -90,7 +90,7 @@ int service_operation(struct pvfs2_kernel_op_s *op, */ if (ret < 0) { if (!(flags & PVFS2_OP_INTERRUPTIBLE)) unmask_blocked_signals(&orig_sigset); set_signals(&orig_sigset); op->downcall.status = ret; gossip_debug(GOSSIP_WAIT_DEBUG, "pvfs2: service_operation interrupted.\n"); Loading Loading @@ -160,7 +160,7 @@ int service_operation(struct pvfs2_kernel_op_s *op, } if (!(flags & PVFS2_OP_INTERRUPTIBLE)) unmask_blocked_signals(&orig_sigset); set_signals(&orig_sigset); BUG_ON(ret != op->downcall.status); /* retry if operation has not been serviced and if requested */ Loading