#include #include "notifier-error-inject.h" static int debugfs_errno_set(void *data, u64 val) { *(int *)data = clamp_t(int, val, -MAX_ERRNO, 0); return 0; } static int debugfs_errno_get(void *data, u64 *val) { *val = *(int *)data; return 0; } DEFINE_SIMPLE_ATTRIBUTE(fops_errno, debugfs_errno_get, debugfs_errno_set, "%lld\n"); static struct dentry *debugfs_create_errno(const char *name, umode_t mode, struct dentry *parent, int *value) { return debugfs_create_file(name, mode, parent, value, &fops_errno); } static int notifier_err_inject_callback(struct notifier_block *nb, unsigned long val, void *p) { int err = 0; struct notifier_err_inject *err_inject = container_of(nb, struct notifier_err_inject, nb); struct notifier_err_inject_action *action; for (action = err_inject->actions; action->name; action++) { if (action->val == val) { err = action->error; break; } } if (err) pr_info("Injecting error (%d) to %s\n", err, action->name); return notifier_from_errno(err); } struct dentry *notifier_err_inject_dir; EXPORT_SYMBOL_GPL(notifier_err_inject_dir); struct dentry *notifier_err_inject_init(const char *name, struct dentry *parent, struct notifier_err_inject *err_inject, int priority) { struct notifier_err_inject_action *action; umode_t mode = S_IFREG | S_IRUSR | S_IWUSR; struct dentry *dir; struct dentry *actions_dir; err_inject->nb.notifier_call = notifier_err_inject_callback; err_inject->nb.priority = priority; dir = debugfs_create_dir(name, parent); if (!dir) return ERR_PTR(-ENOMEM); actions_dir = debugfs_create_dir("actions", dir); if (!actions_dir) goto fail; for (action = err_inject->actions; action->name; action++) { struct dentry *action_dir; action_dir = debugfs_create_dir(action->name, actions_dir); if (!action_dir) goto fail; /* * Create debugfs r/w file containing action->error. If * notifier call chain is called with action->val, it will * fail with the error code */ if (!debugfs_create_errno("error", mode, action_dir, &action->error)) goto fail; } return dir; fail: debugfs_remove_recursive(dir); return ERR_PTR(-ENOMEM); } EXPORT_SYMBOL_GPL(notifier_err_inject_init); static int __init err_inject_init(void) { notifier_err_inject_dir = debugfs_create_dir("notifier-error-inject", NULL); if (!notifier_err_inject_dir) return -ENOMEM; return 0; } static void __exit err_inject_exit(void) { debugfs_remove_recursive(notifier_err_inject_dir); } module_init(err_inject_init); module_exit(err_inject_exit); MODULE_DESCRIPTION("Notifier error injection module"); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Akinobu Mita "); ='/cgit.cgi/linux/net-next.git/diff/net?id=1a0bee6c1e788218fd1d141db320db970aace7f0'>net/batman-adv/Kconfig
diff options
context:
space:
mode:
Diffstat (limited to 'net/batman-adv/Kconfig')
e_node_acl->acl_kref reaches zero. (Drop unnecessary list_del_init usage - HCH) Reported-by: Rob Millner <rlm@daterainc.com> Tested-by: Rob Millner <rlm@daterainc.com> Cc: Rob Millner <rlm@daterainc.com> Cc: stable@vger.kernel.org # 4.1+ Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
2017-02-08target: Fix early transport_generic_handle_tmr abort scenarioNicholas Bellinger1-2/+15
This patch fixes a bug where incoming task management requests can be explicitly aborted during an active LUN_RESET, but who's struct work_struct are canceled in-flight before execution. This occurs when core_tmr_drain_tmr_list() invokes cancel_work_sync() for the incoming se_tmr_req->task_cmd->work, resulting in cmd->work for target_tmr_work() never getting invoked and the aborted TMR waiting indefinately within transport_wait_for_tasks(). To address this case, perform a CMD_T_ABORTED check early in transport_generic_handle_tmr(), and invoke the normal path via transport_cmd_check_stop_to_fabric() to complete any TMR kthreads blocked waiting for CMD_T_STOP in transport_wait_for_tasks(). Also, move the TRANSPORT_ISTATE_PROCESSING assignment earlier into transport_generic_handle_tmr() so the existing check in core_tmr_drain_tmr_list() avoids attempting abort the incoming se_tmr_req->task_cmd->work if it has already been queued into se_device->tmr_wq. Reported-by: Rob Millner <rlm@daterainc.com> Tested-by: Rob Millner <rlm@daterainc.com> Cc: Rob Millner <rlm@daterainc.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Cc: stable@vger.kernel.org # 3.14+ Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
2017-02-08target: Use correct SCSI status during EXTENDED_COPY exceptionNicholas Bellinger1-1/+1
This patch adds the missing target_complete_cmd() SCSI status parameter change in target_xcopy_do_work(), that was originally missing in commit 926317de33. It correctly propigates up the correct SCSI status during EXTENDED_COPY exception cases, instead of always using the hardcoded SAM_STAT_CHECK_CONDITION from original code. This is required for ESX host environments that expect to hit SAM_STAT_RESERVATION_CONFLICT for certain scenarios, and SAM_STAT_CHECK_CONDITION results in non-retriable status for these cases. Reported-by: Nixon Vincent <nixon.vincent@calsoftinc.com> Tested-by: Nixon Vincent <nixon.vincent@calsoftinc.com> Cc: Nixon Vincent <nixon.vincent@calsoftinc.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Cc: stable@vger.kernel.org # 3.14+ Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
2017-02-08target: Don't BUG_ON during NodeACL dynamic -> explicit conversionNicholas Bellinger1-1/+9
After the v4.2+ RCU conversion to se_node_acl->lun_entry_hlist, a BUG_ON() was added in core_enable_device_list_for_node() to detect when the located orig->se_lun_acl contains an existing se_lun_acl pointer reference. However, this scenario can happen when a dynamically generated NodeACL is being converted to an explicit NodeACL, when the explicit NodeACL contains a different LUN mapping than the default provided by the WWN endpoint. So instead of triggering BUG_ON(), go ahead and fail instead following the original pre RCU conversion logic. Reported-by: Benjamin ESTRABAUD <ben.estrabaud@mpstor.com> Cc: Benjamin ESTRABAUD <ben.estrabaud@mpstor.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Cc: stable@vger.kernel.org # 4.2+ Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
2017-02-05Linux 4.10-rc7Linus Torvalds