Commit 9a6b09c0 authored by James Smart's avatar James Smart Committed by James Bottomley

[SCSI] lpfc 8.3.30: Enhancements for T10 DIF debugfs error injection

Signed-off-by: default avatarAlex Iannicelli <alex.iannicelli@emulex.com>
Signed-off-by: default avatarJames Smart <james.smart@emulex.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent cf971240
...@@ -1010,25 +1010,28 @@ lpfc_debugfs_dif_err_read(struct file *file, char __user *buf, ...@@ -1010,25 +1010,28 @@ lpfc_debugfs_dif_err_read(struct file *file, char __user *buf,
{ {
struct dentry *dent = file->f_dentry; struct dentry *dent = file->f_dentry;
struct lpfc_hba *phba = file->private_data; struct lpfc_hba *phba = file->private_data;
char cbuf[16]; char cbuf[32];
int cnt = 0; int cnt = 0;
if (dent == phba->debug_writeGuard) if (dent == phba->debug_writeGuard)
cnt = snprintf(cbuf, 16, "%u\n", phba->lpfc_injerr_wgrd_cnt); cnt = snprintf(cbuf, 32, "%u\n", phba->lpfc_injerr_wgrd_cnt);
else if (dent == phba->debug_writeApp) else if (dent == phba->debug_writeApp)
cnt = snprintf(cbuf, 16, "%u\n", phba->lpfc_injerr_wapp_cnt); cnt = snprintf(cbuf, 32, "%u\n", phba->lpfc_injerr_wapp_cnt);
else if (dent == phba->debug_writeRef) else if (dent == phba->debug_writeRef)
cnt = snprintf(cbuf, 16, "%u\n", phba->lpfc_injerr_wref_cnt); cnt = snprintf(cbuf, 32, "%u\n", phba->lpfc_injerr_wref_cnt);
else if (dent == phba->debug_readGuard) else if (dent == phba->debug_readGuard)
cnt = snprintf(cbuf, 16, "%u\n", phba->lpfc_injerr_rgrd_cnt); cnt = snprintf(cbuf, 32, "%u\n", phba->lpfc_injerr_rgrd_cnt);
else if (dent == phba->debug_readApp) else if (dent == phba->debug_readApp)
cnt = snprintf(cbuf, 16, "%u\n", phba->lpfc_injerr_rapp_cnt); cnt = snprintf(cbuf, 32, "%u\n", phba->lpfc_injerr_rapp_cnt);
else if (dent == phba->debug_readRef) else if (dent == phba->debug_readRef)
cnt = snprintf(cbuf, 16, "%u\n", phba->lpfc_injerr_rref_cnt); cnt = snprintf(cbuf, 32, "%u\n", phba->lpfc_injerr_rref_cnt);
else if (dent == phba->debug_InjErrLBA) else if (dent == phba->debug_InjErrLBA) {
cnt = snprintf(cbuf, 16, "0x%lx\n", if (phba->lpfc_injerr_lba == (unsigned long)(-1))
cnt = snprintf(cbuf, 32, "off\n");
else
cnt = snprintf(cbuf, 32, "0x%lx\n",
(unsigned long) phba->lpfc_injerr_lba); (unsigned long) phba->lpfc_injerr_lba);
else } else
lpfc_printf_log(phba, KERN_ERR, LOG_INIT, lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
"0547 Unknown debugfs error injection entry\n"); "0547 Unknown debugfs error injection entry\n");
...@@ -1042,7 +1045,7 @@ lpfc_debugfs_dif_err_write(struct file *file, const char __user *buf, ...@@ -1042,7 +1045,7 @@ lpfc_debugfs_dif_err_write(struct file *file, const char __user *buf,
struct dentry *dent = file->f_dentry; struct dentry *dent = file->f_dentry;
struct lpfc_hba *phba = file->private_data; struct lpfc_hba *phba = file->private_data;
char dstbuf[32]; char dstbuf[32];
unsigned long tmp; unsigned long tmp = 0;
int size; int size;
memset(dstbuf, 0, 32); memset(dstbuf, 0, 32);
...@@ -1050,7 +1053,12 @@ lpfc_debugfs_dif_err_write(struct file *file, const char __user *buf, ...@@ -1050,7 +1053,12 @@ lpfc_debugfs_dif_err_write(struct file *file, const char __user *buf,
if (copy_from_user(dstbuf, buf, size)) if (copy_from_user(dstbuf, buf, size))
return 0; return 0;
if (strict_strtoul(dstbuf, 0, &tmp)) if (dent == phba->debug_InjErrLBA) {
if ((buf[0] == 'o') && (buf[1] == 'f') && (buf[2] == 'f'))
tmp = (unsigned long)(-1);
}
if ((tmp == 0) && (kstrtoul(dstbuf, 0, &tmp)))
return 0; return 0;
if (dent == phba->debug_writeGuard) if (dent == phba->debug_writeGuard)
......
This diff is collapsed.
...@@ -150,6 +150,16 @@ struct lpfc_scsi_buf { ...@@ -150,6 +150,16 @@ struct lpfc_scsi_buf {
struct lpfc_iocbq cur_iocbq; struct lpfc_iocbq cur_iocbq;
wait_queue_head_t *waitq; wait_queue_head_t *waitq;
unsigned long start_time; unsigned long start_time;
#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
/* Used to restore any changes to protection data for error injection */
void *prot_data_segment;
uint32_t prot_data;
uint32_t prot_data_type;
#define LPFC_INJERR_REFTAG 1
#define LPFC_INJERR_APPTAG 2
#define LPFC_INJERR_GUARD 3
#endif
}; };
#define LPFC_SCSI_DMA_EXT_SIZE 264 #define LPFC_SCSI_DMA_EXT_SIZE 264
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment