Mercurial > illumos > illumos-gate
changeset 13306:5dc578fe734a
785 implement MHIOCGRP_CLEAR
Reviewed by: Garrett D'Amore <garrett@nexenta.com>
Reviewed by: Gordon Ross <gwr@nexenta.com>
Reviewed by: Rich Lowe <richlowe@richlowe.net>
Approved by: Garrett D'Amore <garrett@damore.org>
author | galibern cyril <cyril.galibern@gmail.com> |
---|---|
date | Fri, 18 Mar 2011 20:20:57 -0700 |
parents | c0863802718a |
children | b78ce5a9eedd |
files | usr/src/uts/common/io/scsi/targets/sd.c usr/src/uts/common/sys/scsi/targets/sddef.h |
diffstat | 2 files changed, 38 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/io/scsi/targets/sd.c Fri Mar 18 14:06:44 2011 -0400 +++ b/usr/src/uts/common/io/scsi/targets/sd.c Fri Mar 18 20:20:57 2011 -0700 @@ -25,6 +25,9 @@ /* * Copyright 2011 Nexenta Systems, Inc. All rights reserved. */ +/* + * Copyright 2011 cyril.galibern@opensvc.com + */ /* * SCSI disk target driver. @@ -20954,7 +20957,7 @@ * for the target. * usr_cmd SCSI-3 reservation facility command (one of * SD_SCSI3_REGISTER, SD_SCSI3_RESERVE, SD_SCSI3_RELEASE, - * SD_SCSI3_PREEMPTANDABORT) + * SD_SCSI3_PREEMPTANDABORT, SD_SCSI3_CLEAR) * usr_bufp - user provided pointer register, reserve descriptor or * preempt and abort structure (mhioc_register_t, * mhioc_resv_desc_t, mhioc_preemptandabort_t) @@ -21020,6 +21023,12 @@ prp->aptpl = ptr->aptpl; break; } + case SD_SCSI3_CLEAR: { + mhioc_resv_desc_t *ptr = (mhioc_resv_desc_t *)usr_bufp; + + bcopy(ptr->key.key, prp->res_key, MHIOC_RESV_KEY_SIZE); + break; + } case SD_SCSI3_RESERVE: case SD_SCSI3_RELEASE: { mhioc_resv_desc_t *ptr = (mhioc_resv_desc_t *)usr_bufp; @@ -22290,6 +22299,7 @@ case MHIOCGRP_INKEYS: case MHIOCGRP_INRESV: case MHIOCGRP_REGISTER: + case MHIOCGRP_CLEAR: case MHIOCGRP_RESERVE: case MHIOCGRP_PREEMPTANDABORT: case MHIOCGRP_REGISTERANDIGNOREKEY: @@ -22606,6 +22616,28 @@ } break; + case MHIOCGRP_CLEAR: + SD_TRACE(SD_LOG_IOCTL, un, "MHIOCGRP_CLEAR\n"); + if ((err = drv_priv(cred_p)) != EPERM) { + if (un->un_reservation_type == SD_SCSI2_RESERVATION) { + err = ENOTSUP; + } else if (arg != NULL) { + mhioc_register_t reg; + if (ddi_copyin((void *)arg, ®, + sizeof (mhioc_register_t), flag) != 0) { + err = EFAULT; + } else { + err = + sd_send_scsi_PERSISTENT_RESERVE_OUT( + ssc, SD_SCSI3_CLEAR, + (uchar_t *)®); + if (err != 0) + goto done_with_assess; + } + } + } + break; + case MHIOCGRP_RESERVE: SD_TRACE(SD_LOG_IOCTL, un, "MHIOCGRP_RESERVE\n"); if ((err = drv_priv(cred_p)) != EPERM) { @@ -24729,7 +24761,7 @@ * A direct semantic implementation of the SCSI-3 Persistent Reservation * facility is supported through the shared multihost disk ioctls * (MHIOCGRP_INKEYS, MHIOCGRP_INRESV, MHIOCGRP_REGISTER, MHIOCGRP_RESERVE, - * MHIOCGRP_PREEMPTANDABORT) + * MHIOCGRP_PREEMPTANDABORT, MHIOCGRP_CLEAR) * * Reservation Reclaim: * --------------------
--- a/usr/src/uts/common/sys/scsi/targets/sddef.h Fri Mar 18 14:06:44 2011 -0400 +++ b/usr/src/uts/common/sys/scsi/targets/sddef.h Fri Mar 18 20:20:57 2011 -0700 @@ -21,6 +21,9 @@ /* * Copyright (c) 1990, 2010, Oracle and/or its affiliates. All rights reserved. */ +/* + * Copyright 2011 cyril.galibern@opensvc.com + */ #ifndef _SYS_SCSI_TARGETS_SDDEF_H #define _SYS_SCSI_TARGETS_SDDEF_H @@ -884,6 +887,7 @@ #define SD_SCSI3_REGISTER 0x00 #define SD_SCSI3_RESERVE 0x01 #define SD_SCSI3_RELEASE 0x02 +#define SD_SCSI3_CLEAR 0x03 #define SD_SCSI3_PREEMPTANDABORT 0x05 #define SD_SCSI3_REGISTERANDIGNOREKEY 0x06