- Add support for SG_GET_SG_TABLESIZE IOCTL to report that we don't support

scatter/gather lists.
- Return error for still unsupported SG 3.x API read/write calls.

MFC after:	1 month
This commit is contained in:
Alexander Motin 2014-06-04 12:05:47 +00:00
parent a31f80290e
commit 94fe9f959c
2 changed files with 16 additions and 1 deletions

View File

@ -627,6 +627,13 @@ sgioctl(struct cdev *dev, u_long cmd, caddr_t arg, int flag, struct thread *td)
break; break;
} }
case SG_GET_SG_TABLESIZE:
{
int *size = (int *)arg;
*size = 0;
break;
}
case SG_EMULATED_HOST: case SG_EMULATED_HOST:
case SG_SET_TRANSFORM: case SG_SET_TRANSFORM:
case SG_GET_TRANSFORM: case SG_GET_TRANSFORM:
@ -638,7 +645,6 @@ sgioctl(struct cdev *dev, u_long cmd, caddr_t arg, int flag, struct thread *td)
case SG_GET_ACCESS_COUNT: case SG_GET_ACCESS_COUNT:
case SG_SET_FORCE_LOW_DMA: case SG_SET_FORCE_LOW_DMA:
case SG_GET_LOW_DMA: case SG_GET_LOW_DMA:
case SG_GET_SG_TABLESIZE:
case SG_SET_FORCE_PACK_ID: case SG_SET_FORCE_PACK_ID:
case SG_GET_PACK_ID: case SG_GET_PACK_ID:
case SG_SET_RESERVED_SIZE: case SG_SET_RESERVED_SIZE:
@ -684,6 +690,12 @@ sgwrite(struct cdev *dev, struct uio *uio, int ioflag)
if (error) if (error)
goto out_hdr; goto out_hdr;
/* XXX: We don't support SG 3.x read/write API. */
if (hdr->reply_len < 0) {
error = ENODEV;
goto out_hdr;
}
ccb = xpt_alloc_ccb(); ccb = xpt_alloc_ccb();
if (ccb == NULL) { if (ccb == NULL) {
error = ENOMEM; error = ENOMEM;

View File

@ -2751,6 +2751,9 @@ linux_ioctl_sg(struct thread *td, struct linux_ioctl_args *args)
case LINUX_SG_GET_SCSI_ID: case LINUX_SG_GET_SCSI_ID:
args->cmd = SG_GET_SCSI_ID; args->cmd = SG_GET_SCSI_ID;
break; break;
case LINUX_SG_GET_SG_TABLESIZE:
args->cmd = SG_GET_SG_TABLESIZE;
break;
default: default:
return (ENODEV); return (ENODEV);
} }