# HG changeset patch # User galibern cyril # Date 1300504857 25200 # Node ID 5dc578fe734a5742661eb5836dfb6e49a1a80d48 # Parent c0863802718a81408e88cdefa7e7ffd13aaea702 785 implement MHIOCGRP_CLEAR Reviewed by: Garrett D'Amore Reviewed by: Gordon Ross Reviewed by: Rich Lowe Approved by: Garrett D'Amore diff -r c0863802718a -r 5dc578fe734a usr/src/uts/common/io/scsi/targets/sd.c --- 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: * -------------------- diff -r c0863802718a -r 5dc578fe734a usr/src/uts/common/sys/scsi/targets/sddef.h --- 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