All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boaz Harrosh <bharrosh@panasas.com>
To: "James Bottomley" <James.Bottomley@HansenPartnership.com>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Jörn Engel" <joern@logfs.org>, "Sam Ravnborg" <sam@ravnborg.org>
Cc: open-osd development <osd-dev@open-osd.org>,
	Mike Christie <michaelc@cs.wisc.edu>,
	FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>,
	Jeff Garzik <jeff@garzik.org>,
	linux-scsi <linux-scsi@vger.kernel.org>,
	Sami.Iren@seagate.com,
	linux-kernel <linux-kernel@vger.kernel.org>
Subject: [PATCH 04/18 ver2] libosd: OSDv1 preliminary implementation
Date: Sun, 09 Nov 2008 16:50:19 +0200	[thread overview]
Message-ID: <4916F8AB.3080105@panasas.com> (raw)
In-Reply-To: <1225817069-5969-1-git-send-email-bharrosh@panasas.com>


Implementation of the most basic OSD functionality and
infrastructure. Mainly Format, Create/Remove Partition,
Create/Remove Object, and read/write.

- Add Makefile and Kbuild to compile libosd.ko
- osd_initiator.c Implementation file for osd_initiator.h
  and osd_sec.h APIs
- osd_debug.h - Some kprintf macro definitions

Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
Reviewed-by: Benny Halevy <bhalevy@panasas.com>
---
 drivers/scsi/osd/Kbuild          |   26 +++
 drivers/scsi/osd/Makefile        |   37 +++
 drivers/scsi/osd/osd_debug.h     |   27 +++
 drivers/scsi/osd/osd_initiator.c |  448 ++++++++++++++++++++++++++++++++++++++
 4 files changed, 538 insertions(+), 0 deletions(-)
 create mode 100644 drivers/scsi/osd/Kbuild
 create mode 100755 drivers/scsi/osd/Makefile
 create mode 100644 drivers/scsi/osd/osd_debug.h
 create mode 100644 drivers/scsi/osd/osd_initiator.c

diff --git a/drivers/scsi/osd/Kbuild b/drivers/scsi/osd/Kbuild
new file mode 100644
index 0000000..b6328e6
--- /dev/null
+++ b/drivers/scsi/osd/Kbuild
@@ -0,0 +1,26 @@
+#
+# Kbuild for the OSD modules
+#
+# Copyright (C) 2008 Panasas Inc.  All rights reserved.
+#
+# Authors:
+#   Boaz Harrosh <bharrosh@panasas.com>
+#   Benny Halevy <bhalevy@panasas.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2
+#
+
+ifneq ($(OSD_INC),)
+# we are built out-of-tree Kconfigure everything as on
+
+CONFIG_SCSI_OSD_INITIATOR=m
+ccflags-y += -DCONFIG_SCSI_OSD_INITIATOR -DCONFIG_SCSI_OSD_INITIATOR_MODULE
+
+ccflags-y += -I$(OSD_INC)
+# ccflags-y += -DCONFIG_SCSI_OSD_DEBUG
+endif
+
+# libosd.ko - osd-initiator library
+libosd-y := osd_initiator.o
+obj-$(CONFIG_SCSI_OSD_INITIATOR) += libosd.o
diff --git a/drivers/scsi/osd/Makefile b/drivers/scsi/osd/Makefile
new file mode 100755
index 0000000..d905344
--- /dev/null
+++ b/drivers/scsi/osd/Makefile
@@ -0,0 +1,37 @@
+#
+# Makefile for the OSD modules (out of tree)
+#
+# Copyright (C) 2008 Panasas Inc.  All rights reserved.
+#
+# Authors:
+#   Boaz Harrosh <bharrosh@panasas.com>
+#   Benny Halevy <bhalevy@panasas.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2
+#
+# This Makefile is used to call the kernel Makefile in case of an out-of-tree
+# build.
+# $KSRC should point to a Kernel source tree otherwise host's default is
+# used. (eg. /lib/modules/`uname -r`/build)
+
+# include path for out-of-tree Headers
+OSD_INC ?= `pwd`/../../../include
+
+# allow users to override these
+# e.g. to compile for a kernel that you aren't currently running
+KSRC ?= /lib/modules/$(shell uname -r)/build
+KBUILD_OUTPUT ?=
+ARCH ?=
+V ?= 0
+
+# this is the basic Kbuild out-of-tree invocation, with the M= option
+KBUILD_BASE = +$(MAKE) -C $(KSRC) M=`pwd` KBUILD_OUTPUT=$(KBUILD_OUTPUT) ARCH=$(ARCH) V=$(V)
+
+all: libosd
+
+libosd: ;
+	$(KBUILD_BASE) OSD_INC=$(OSD_INC) modules
+
+clean:
+	$(KBUILD_BASE) clean
diff --git a/drivers/scsi/osd/osd_debug.h b/drivers/scsi/osd/osd_debug.h
new file mode 100644
index 0000000..0bc65fa
--- /dev/null
+++ b/drivers/scsi/osd/osd_debug.h
@@ -0,0 +1,27 @@
+/*
+ * osd_debug.h - Some kprintf macros
+ *
+ * Copyright (C) 2008 Panasas Inc.  All rights reserved.
+ *
+ * Authors:
+ *   Boaz Harrosh <bharrosh@panasas.com>
+ *   Benny Halevy <bhalevy@panasas.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ *
+ */
+#ifndef __OSD_DEBUG_H__
+#define __OSD_DEBUG_H__
+
+#define OSD_ERR(fmt, a...) printk(KERN_ERR "osd: " fmt, ##a)
+#define OSD_INFO(fmt, a...) printk(KERN_NOTICE "osd: " fmt, ##a)
+
+#ifdef CONFIG_SCSI_OSD_DEBUG
+#define OSD_DEBUG(fmt, a...) \
+	printk(KERN_NOTICE "osd @%s:%d: " fmt, __func__, __LINE__, ##a)
+#else
+#define OSD_DEBUG(fmt, a...) do {} while (0)
+#endif
+
+#endif /* ndef __OSD_DEBUG_H__ */
diff --git a/drivers/scsi/osd/osd_initiator.c b/drivers/scsi/osd/osd_initiator.c
new file mode 100644
index 0000000..63b8a91
--- /dev/null
+++ b/drivers/scsi/osd/osd_initiator.c
@@ -0,0 +1,448 @@
+/*
+ * osd_initiator - Main body of the osd initiator library.
+ *
+ * Note: The file does not contain the advanced security functionality which
+ * is only needed by the security_manager's initiators.
+ *
+ * Copyright (C) 2008 Panasas Inc.  All rights reserved.
+ *
+ * Authors:
+ *   Boaz Harrosh <bharrosh@panasas.com>
+ *   Benny Halevy <bhalevy@panasas.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  1. Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *  2. Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *  3. Neither the name of the Panasas company nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <scsi/osd_initiator.h>
+#include <scsi/osd_sec.h>
+#include <scsi/scsi_device.h>
+
+#include "osd_debug.h"
+
+enum { OSD_REQ_RETRIES = 1 };
+
+MODULE_AUTHOR("Boaz Harrosh <bharrosh@panasas.com>");
+MODULE_DESCRIPTION("open-osd initiator library libosd.ko");
+MODULE_LICENSE("GPL");
+
+static inline void build_test(void)
+{
+	/* structures were not packed */
+	BUILD_BUG_ON(sizeof(struct osd_capability) != OSD_CAP_LEN);
+	BUILD_BUG_ON(sizeof(struct osdv1_cdb) != OSDv1_TOTAL_CDB_LEN);
+}
+
+static unsigned _osd_req_cdb_len(struct osd_request *or)
+{
+	return OSDv1_TOTAL_CDB_LEN;
+}
+
+void osd_dev_init(struct osd_dev *osdd, struct scsi_device *scsi_device)
+{
+	memset(osdd, 0, sizeof(*osdd));
+	osdd->scsi_device = scsi_device;
+	osdd->def_timeout = BLK_DEFAULT_SG_TIMEOUT;
+	/* TODO: Allocate pools for osd_request attributes ... */
+}
+EXPORT_SYMBOL(osd_dev_init);
+
+void osd_dev_fini(struct osd_dev *osdd)
+{
+	/* TODO: De-allocate pools */
+
+	osdd->scsi_device = NULL;
+}
+EXPORT_SYMBOL(osd_dev_fini);
+
+static struct osd_request *_osd_request_alloc(gfp_t gfp)
+{
+	struct osd_request *or;
+
+	/* TODO: Use mempool with one saved request */
+	or = kzalloc(sizeof(*or), gfp);
+	return or;
+}
+
+static void _osd_request_free(struct osd_request *or)
+{
+	kfree(or);
+}
+
+struct osd_request *osd_start_request(struct osd_dev *dev, gfp_t gfp)
+{
+	struct osd_request *or;
+
+	or = _osd_request_alloc(gfp);
+	if (!or)
+		return NULL;
+
+	or->osd_dev = dev;
+	or->alloc_flags = gfp;
+	or->timeout = dev->def_timeout;
+	or->retries = OSD_REQ_RETRIES;
+
+	return or;
+}
+EXPORT_SYMBOL(osd_start_request);
+
+/*
+ * If osd_finalize_request() was called but the request was not executed through
+ * the block layer, then we must release BIOs.
+ */
+static void _abort_unexecuted_bios(struct request *rq)
+{
+	struct bio *bio;
+
+	while ((bio = rq->bio) != NULL) {
+		rq->bio = bio->bi_next;
+		bio_endio(bio, 0);
+	}
+}
+
+void osd_end_request(struct osd_request *or)
+{
+	struct request *rq = or->request;
+
+	if (rq) {
+		if (rq->next_rq) {
+			_abort_unexecuted_bios(rq->next_rq);
+			blk_put_request(rq->next_rq);
+		}
+
+		_abort_unexecuted_bios(rq);
+		blk_put_request(rq);
+	}
+	_osd_request_free(or);
+}
+EXPORT_SYMBOL(osd_end_request);
+
+int osd_execute_request(struct osd_request *or)
+{
+	return blk_execute_rq(or->request->q, NULL, or->request, 0);
+}
+EXPORT_SYMBOL(osd_execute_request);
+
+static void osd_request_async_done(struct request *req, int error)
+{
+	struct osd_request *or = req->end_io_data;
+
+	or->async_error = error;
+
+	if (error)
+		OSD_DEBUG("osd_request_async_done error recieved %d\n", error);
+
+	if (or->async_done)
+		or->async_done(or, or->async_private);
+	else
+		osd_end_request(or);
+}
+
+int osd_execute_request_async(struct osd_request *or,
+	osd_req_done_fn *done, void *private)
+{
+	or->request->end_io_data = or;
+	or->async_private = private;
+	or->async_done = done;
+
+	blk_execute_rq_nowait(or->request->q, NULL, or->request, 0,
+			      osd_request_async_done);
+	return 0;
+}
+EXPORT_SYMBOL(osd_execute_request_async);
+
+/*
+ * Common to all OSD commands
+ */
+
+static void _osdv1_req_encode_common(struct osd_request *or,
+	__be16 act, const struct osd_obj_id *obj, u64 offset, u64 len)
+{
+	struct osdv1_cdb *ocdb = &or->cdb.v1;
+
+	/*
+	 * For speed, the commands
+	 *	OSD_ACT_PERFORM_SCSI_COMMAND	, V1 0x8F7E, V2 0x8F7C
+	 *	OSD_ACT_SCSI_TASK_MANAGEMENT	, V1 0x8F7F, V2 0x8F7D
+	 * are not supported here. Should pass zero and set after the call
+	 */
+	act &= __constant_cpu_to_be16(~0x0080); /* V1 action code */
+
+	OSD_DEBUG("OSDv1 execute opcode 0x%x\n", be16_to_cpu(act));
+
+	ocdb->h.varlen_cdb.opcode = VARIABLE_LENGTH_CMD;
+	ocdb->h.varlen_cdb.additional_cdb_length = OSD_ADDITIONAL_CDB_LENGTH;
+	ocdb->h.varlen_cdb.service_action = act;
+
+	ocdb->h.partition = cpu_to_be64(obj->partition);
+	ocdb->h.object = cpu_to_be64(obj->id);
+	ocdb->h.v1.length = cpu_to_be64(len);
+	ocdb->h.v1.start_address = cpu_to_be64(offset);
+}
+
+static void _osd_req_encode_common(struct osd_request *or,
+	__be16 act, const struct osd_obj_id *obj, u64 offset, u64 len)
+{
+	_osdv1_req_encode_common(or, act, obj, offset, len);
+}
+
+/*
+ * Device commands
+ */
+void osd_req_format(struct osd_request *or, u64 tot_capacity)
+{
+	_osd_req_encode_common(or, OSD_ACT_FORMAT_OSD, &osd_root_object, 0,
+				tot_capacity);
+}
+EXPORT_SYMBOL(osd_req_format);
+
+/*
+ * Partition commands
+ */
+static void _osd_req_encode_partition(struct osd_request *or,
+	__be16 act, osd_id partition)
+{
+	struct osd_obj_id par = {
+		.partition = partition,
+		.id = 0,
+	};
+
+	_osd_req_encode_common(or, act, &par, 0, 0);
+}
+
+void osd_req_create_partition(struct osd_request *or, osd_id partition)
+{
+	_osd_req_encode_partition(or, OSD_ACT_CREATE_PARTITION, partition);
+}
+EXPORT_SYMBOL(osd_req_create_partition);
+
+void osd_req_remove_partition(struct osd_request *or, osd_id partition)
+{
+	_osd_req_encode_partition(or, OSD_ACT_REMOVE_PARTITION, partition);
+}
+EXPORT_SYMBOL(osd_req_remove_partition);
+
+/*
+ * Object commands
+ */
+void osd_req_create_object(struct osd_request *or, struct osd_obj_id *obj)
+{
+	_osd_req_encode_common(or, OSD_ACT_CREATE, obj, 0, 0);
+}
+EXPORT_SYMBOL(osd_req_create_object);
+
+void osd_req_remove_object(struct osd_request *or, struct osd_obj_id *obj)
+{
+	_osd_req_encode_common(or, OSD_ACT_REMOVE, obj, 0, 0);
+}
+EXPORT_SYMBOL(osd_req_remove_object);
+
+void osd_req_write(struct osd_request *or,
+	const struct osd_obj_id *obj, struct bio *bio, u64 offset)
+{
+	_osd_req_encode_common(or, OSD_ACT_WRITE, obj, offset, bio->bi_size);
+	WARN_ON(or->out.bio || or->out.total_bytes);
+	bio->bi_rw |= (1 << BIO_RW);
+	or->out.bio = bio;
+	or->out.total_bytes = bio->bi_size;
+}
+EXPORT_SYMBOL(osd_req_write);
+
+void osd_req_read(struct osd_request *or,
+	const struct osd_obj_id *obj, struct bio *bio, u64 offset)
+{
+	_osd_req_encode_common(or, OSD_ACT_READ, obj, offset, bio->bi_size);
+	WARN_ON(or->in.bio || or->in.total_bytes);
+	bio->bi_rw &= ~(1 << BIO_RW);
+	or->in.bio = bio;
+	or->in.total_bytes = bio->bi_size;
+}
+EXPORT_SYMBOL(osd_req_read);
+
+/*
+ * osd_finalize_request and helpers
+ */
+
+static int _init_blk_request(struct osd_request *or,
+	bool has_in, bool has_out)
+{
+	gfp_t flags = or->alloc_flags;
+	struct scsi_device *scsi_device = or->osd_dev->scsi_device;
+	struct request_queue *q = scsi_device->request_queue;
+	struct request *req;
+	int ret = -ENOMEM;
+
+	req = blk_get_request(q, has_out, flags);
+	if (!req)
+		goto out;
+
+	or->request = req;
+	req->cmd_type = REQ_TYPE_BLOCK_PC;
+	req->timeout = or->timeout;
+	req->retries = or->retries;
+	req->sense = or->sense;
+	req->sense_len = 0;
+
+	if (has_out) {
+		or->out.req = req;
+		if (has_in) {
+			/* allocate bidi request */
+			req = blk_get_request(q, READ, flags);
+			if (!req) {
+				OSD_DEBUG("blk_get_request for bidi failed\n");
+				goto out;
+			}
+			req->cmd_type = REQ_TYPE_BLOCK_PC;
+			or->in.req = or->request->next_rq = req;
+		}
+	} else if (has_in)
+		or->in.req = req;
+
+	ret = 0;
+out:
+	OSD_DEBUG("or=%p has_in=%d has_out=%d => %d, %p\n",
+			or, has_in, has_out, ret, or->request);
+	return ret;
+}
+
+int osd_finalize_request(struct osd_request *or,
+	u8 options, const void *cap, const u8 *cap_key)
+{
+	struct osd_cdb_head *cdbh = osd_cdb_head(&or->cdb);
+	bool has_in, has_out;
+	int ret;
+
+	if (options & OSD_REQ_FUA)
+		cdbh->options |= OSD_CDB_FUA;
+
+	if (options & OSD_REQ_DPO)
+		cdbh->options |= OSD_CDB_DPO;
+
+	if (options & OSD_REQ_BYPASS_TIMESTAMPS)
+		cdbh->timestamp_control = OSD_CDB_BYPASS_TIMESTAMPS;
+
+	osd_set_caps(&or->cdb, cap);
+
+	has_in = or->in.bio || or->get_attr.total_bytes;
+	has_out = or->out.bio || or->set_attr.total_bytes ||
+		or->enc_get_attr.total_bytes;
+
+	ret = _init_blk_request(or, has_in, has_out);
+	if (ret) {
+		OSD_DEBUG("_init_blk_request failed\n");
+		return ret;
+	}
+
+	if (or->out.bio) {
+		ret = blk_rq_append_bio(or->request->q, or->out.req,
+					or->out.bio);
+		if (ret) {
+			OSD_DEBUG("blk_rq_append_bio out failed\n");
+			return ret;
+		}
+		OSD_DEBUG("out bytes=%llu (bytes_req=%u)\n",
+			or->out.total_bytes, or->out.req->data_len);
+	}
+	if (or->in.bio) {
+		ret = blk_rq_append_bio(or->request->q, or->in.req, or->in.bio);
+		if (ret) {
+			OSD_DEBUG("blk_rq_append_bio in failed\n");
+			return ret;
+		}
+		OSD_DEBUG("in bytes=%llu (bytes_req=%u)\n",
+			or->in.total_bytes, or->in.req->data_len);
+	}
+
+	if (!or->attributes_mode)
+		or->attributes_mode = OSD_CDB_GET_SET_ATTR_LISTS;
+	cdbh->command_specific_options |= or->attributes_mode;
+
+	or->request->cmd = or->cdb.buff;
+	or->request->cmd_len = _osd_req_cdb_len(or);
+
+	return 0;
+}
+EXPORT_SYMBOL(osd_finalize_request);
+
+/*
+ * Implementation of osd_sec.h API
+ * TODO: Move to a separate osd_sec.c file at a later stage.
+ */
+
+enum { OSD_SEC_CAP_V1_ALL_CAPS =
+	OSD_SEC_CAP_APPEND | OSD_SEC_CAP_OBJ_MGMT | OSD_SEC_CAP_REMOVE   |
+	OSD_SEC_CAP_CREATE | OSD_SEC_CAP_SET_ATTR | OSD_SEC_CAP_GET_ATTR |
+	OSD_SEC_CAP_WRITE  | OSD_SEC_CAP_READ     | OSD_SEC_CAP_POL_SEC  |
+	OSD_SEC_CAP_GLOBAL | OSD_SEC_CAP_DEV_MGMT
+};
+
+void osd_sec_init_nosec_doall_caps(void *caps,
+	const struct osd_obj_id *obj, bool is_collection, const bool is_v1)
+{
+	struct osd_capability *cap = caps;
+	u8 type;
+	u8 descriptor_type;
+
+	if (likely(obj->id)) {
+		if (unlikely(is_collection)) {
+			type = OSD_SEC_OBJ_COLLECTION;
+			descriptor_type = is_v1 ? OSD_SEC_OBJ_DESC_OBJ :
+						  OSD_SEC_OBJ_DESC_COL;
+		} else {
+			type = OSD_SEC_OBJ_USER;
+			descriptor_type = OSD_SEC_OBJ_DESC_OBJ;
+		}
+		WARN_ON(!obj->partition);
+	} else {
+		type = obj->partition ? OSD_SEC_OBJ_PARTITION :
+					OSD_SEC_OBJ_ROOT;
+		descriptor_type = OSD_SEC_OBJ_DESC_PAR;
+	}
+
+	memset(cap, 0, sizeof(*cap));
+
+	cap->h.format = OSD_SEC_CAP_FORMAT_VER1;
+	cap->h.integrity_algorithm__key_version = 0; /* MAKE_BYTE(0, 0); */
+	cap->h.security_method = OSD_SEC_NOSEC;
+/*	cap->expiration_time;
+	cap->AUDIT[30-10];
+	cap->discriminator[42-30];
+	cap->object_created_time; */
+	cap->h.object_type = type;
+	osd_sec_set_caps(&cap->h, OSD_SEC_CAP_V1_ALL_CAPS);
+	cap->h.object_descriptor_type = descriptor_type;
+	cap->od.obj_desc.policy_access_tag = 0;
+	cap->od.obj_desc.allowed_partition_id = cpu_to_be64(obj->partition);
+	cap->od.obj_desc.allowed_object_id = cpu_to_be64(obj->id);
+}
+EXPORT_SYMBOL(osd_sec_init_nosec_doall_caps);
+
+void osd_set_caps(struct osd_cdb *cdb, const void *caps)
+{
+	memcpy(&cdb->v1.caps, caps, OSDv1_CAP_LEN);
+}
-- 
1.6.0.1



  parent reply	other threads:[~2008-11-09 14:50 UTC|newest]

Thread overview: 183+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <48876009.8010701@panasas.com>
2008-07-24 17:30 ` [RFC 00/14] open-osd: OSD Initiator library for Linux Boaz Harrosh
2008-07-24 17:40   ` [RFC 01/14] libosd: OSDv1 Headers Boaz Harrosh
2008-07-24 17:45   ` [RFC 02/14] libosd: OSDv1 preliminary implementation Boaz Harrosh
2008-07-24 17:47   ` [RFC 03/14] osd_uld: OSD scsi ULD Boaz Harrosh
2008-07-27 21:16     ` James Bottomley
2008-08-06 17:25       ` Boaz Harrosh
2008-07-24 17:49   ` [RFC 04/14] osd_ktests: Add basic OSD tests Boaz Harrosh
2008-07-24 17:51   ` [RFC 05/14] libosd: attributes Support Boaz Harrosh
2008-07-24 17:53   ` [RFC 06/14] osd_ktests: Test Attribute lists Boaz Harrosh
2008-07-24 17:54   ` [RFC 07/14] libosd: OSD Security processing stubs Boaz Harrosh
2008-07-24 17:55   ` [RFC 08/14] libosd: Add Flush and List-objects support Boaz Harrosh
2008-07-24 17:57   ` [RFC 09/14] libosd: Not implemented commands Boaz Harrosh
2008-07-24 17:58   ` [RFC 10/14] libosd: OSD version 2 Support Boaz Harrosh
2008-07-24 17:59   ` [RFC 11/14] osd_ktests: OSDv2 auto detection Boaz Harrosh
2008-07-24 18:00   ` [RFC 12/14] osd: Kconfig file for in-tree builds Boaz Harrosh
2008-07-24 18:02   ` [RFC 13/14] osd: Documentation for OSD library Boaz Harrosh
2008-07-24 18:03   ` [RFC 14/14] scsi: Add osd library to build system Boaz Harrosh
2008-11-04 16:09 ` [PATCHSET 00/18] open-osd: OSD Initiator library for Linux Boaz Harrosh
2008-11-04 16:09   ` Boaz Harrosh
2008-11-04 16:17   ` [PATCH 01/18] major.h: char-major number for OSD device driver Boaz Harrosh
2008-11-04 16:17     ` Boaz Harrosh
2008-11-26 17:33     ` [osd-dev] " Boaz Harrosh
2008-11-26 18:07       ` Randy Dunlap
2008-11-26 18:07         ` Randy Dunlap
2008-11-04 16:42   ` [PATCH 02/18] scsi: OSD_TYPE Boaz Harrosh
2008-11-04 16:42   ` Boaz Harrosh
2008-11-04 16:44   ` [PATCH 03/18] libosd: OSDv1 Headers Boaz Harrosh
2008-11-04 16:44     ` Boaz Harrosh
2008-11-04 19:10     ` Andrew Morton
2008-11-04 19:42       ` Jörn Engel
2008-11-04 19:42         ` Jörn Engel
2008-11-04 20:29         ` Jörn Engel
2008-11-05 13:00         ` Boaz Harrosh
2008-11-05 13:00           ` Boaz Harrosh
2008-11-05 12:54       ` Boaz Harrosh
2008-11-05 12:54         ` Boaz Harrosh
2008-11-05 13:09         ` James Bottomley
2008-11-05 13:29           ` Boaz Harrosh
2008-11-09 14:52     ` [PATCH 03/18 ver2] " Boaz Harrosh
2008-11-09 14:52       ` Boaz Harrosh
2008-11-09 17:45       ` Jörn Engel
2008-11-09 17:45         ` Jörn Engel
2008-11-10  8:47         ` Boaz Harrosh
2008-11-10  8:47           ` Boaz Harrosh
2008-11-10 15:17           ` Jörn Engel
2008-11-10 15:17             ` Jörn Engel
2008-11-10 17:29       ` Randy Dunlap
2008-11-12 13:10         ` Boaz Harrosh
2008-11-12 13:10           ` Boaz Harrosh
2008-11-12 16:48           ` Randy Dunlap
2008-11-12 17:09             ` Boaz Harrosh
2008-11-12 17:15             ` Johannes Berg
2008-11-12 13:13         ` [PATCH 03/18 ver3] " Boaz Harrosh
2008-11-12 13:13           ` Boaz Harrosh
2008-11-12 18:59           ` Randy Dunlap
2008-11-13  9:38             ` Boaz Harrosh
2008-11-13 12:25             ` [PATCH 03/18 ver4] " Boaz Harrosh
2008-11-13 12:25               ` Boaz Harrosh
2008-11-13 18:16               ` Randy Dunlap
2008-11-13 15:41                 ` [osd-dev] " Benny Halevy
2008-11-04 16:44   ` [PATCH 04/18] libosd: OSDv1 preliminary implementation Boaz Harrosh
2008-11-04 16:44   ` Boaz Harrosh
2008-11-04 18:03     ` Sam Ravnborg
2008-11-05 13:12       ` Boaz Harrosh
2008-11-09 14:55         ` [osd-dev] " Boaz Harrosh
2008-11-10  5:37           ` Randy Dunlap
2008-11-10  9:00             ` Boaz Harrosh
2008-11-05 16:39       ` [Patch] Always include <linux/types.h> Jörn Engel
2008-11-05 17:23         ` Alexey Dobriyan
2008-11-05 19:16           ` Jörn Engel
2008-11-05 19:48             ` Andreas Schwab
2008-11-05 20:02             ` Jörn Engel
2008-11-05 20:32               ` Alexey Dobriyan
2008-11-07  8:02                 ` Jörn Engel
2008-11-05 20:20             ` Alexey Dobriyan
2008-11-05 17:48         ` Boaz Harrosh
2008-11-04 19:16     ` [PATCH 04/18] libosd: OSDv1 preliminary implementation Andrew Morton
2008-11-05 13:44       ` Boaz Harrosh
2008-11-09 14:50     ` Boaz Harrosh [this message]
2008-11-04 16:44   ` [PATCH 05/18] osd_uld: OSD scsi ULD Boaz Harrosh
2008-11-04 16:44     ` Boaz Harrosh
2008-11-04 16:44   ` [PATCH 06/18] osd_uld: API for retrieving osd devices from Kernel Boaz Harrosh
2008-11-04 16:44     ` Boaz Harrosh
2008-11-04 16:44   ` [PATCH 07/18] osd_test: User-mode application to run the OSD tests Boaz Harrosh
2008-11-04 16:44     ` Boaz Harrosh
2008-11-04 16:44   ` [PATCH 08/18] osd_ktests: Add basic " Boaz Harrosh
2008-11-04 16:44     ` Boaz Harrosh
2008-11-04 16:44   ` [PATCH 09/18] libosd: attributes Support Boaz Harrosh
2008-11-04 16:44     ` Boaz Harrosh
2008-11-04 16:44   ` [PATCH 10/18] osd_ktests: Test Attribute lists Boaz Harrosh
2008-11-04 16:44     ` Boaz Harrosh
2008-11-04 16:44   ` [PATCH 11/18] libosd: OSD Security processing stubs Boaz Harrosh
2008-11-04 16:44     ` Boaz Harrosh
2008-11-04 16:44   ` [PATCH 12/18] libosd: Add Flush and List-objects support Boaz Harrosh
2008-11-04 16:44     ` Boaz Harrosh
2008-11-04 16:44   ` [PATCH 13/18] libosd: Not implemented commands Boaz Harrosh
2008-11-04 16:44     ` Boaz Harrosh
2008-11-04 16:44   ` [PATCH 14/18] libosd: OSD version 2 Support Boaz Harrosh
2008-11-04 16:44     ` Boaz Harrosh
2008-11-04 16:44   ` [PATCH 15/18] libosd: OSDv2 auto detection Boaz Harrosh
2008-11-04 16:44     ` Boaz Harrosh
2008-11-04 16:44   ` [PATCH 16/18] osd: Documentation for OSD library Boaz Harrosh
2008-11-04 16:44     ` Boaz Harrosh
2008-11-04 16:44   ` [PATCH 17/18] osd: Kconfig file for in-tree builds Boaz Harrosh
2008-11-04 16:44     ` Boaz Harrosh
2008-11-04 16:44   ` [PATCH 18/18] scsi: Add osd library to build system Boaz Harrosh
2008-11-04 16:44     ` Boaz Harrosh
2008-11-04 19:19   ` [PATCHSET 00/18] open-osd: OSD Initiator library for Linux Andrew Morton
2008-11-05 13:56     ` Boaz Harrosh
2008-11-09 14:58     ` Boaz Harrosh
2008-11-09 23:26       ` Stephen Rothwell
2008-11-10 12:52         ` Boaz Harrosh
2008-11-10 13:04           ` Stephen Rothwell
2008-12-22 12:32 ` Boaz Harrosh
2008-12-22 12:32   ` Boaz Harrosh
2008-12-22 12:37   ` [PATCH 01/18] major.h: char-major number for OSD device driver Boaz Harrosh
2008-12-22 12:37     ` Boaz Harrosh
2008-12-22 12:39   ` [PATCH 02/18] scsi: OSD_TYPE Boaz Harrosh
2008-12-22 12:39     ` Boaz Harrosh
2008-12-22 12:41   ` [PATCH 03/18] libosd: OSDv1 Headers Boaz Harrosh
2008-12-22 12:41     ` Boaz Harrosh
2008-12-22 12:43   ` [PATCH 04/18] libosd: OSDv1 preliminary implementation Boaz Harrosh
2008-12-22 12:43     ` Boaz Harrosh
2008-12-22 12:46   ` [PATCH 05/18] osd_uld: OSD scsi ULD Boaz Harrosh
2008-12-22 12:46     ` Boaz Harrosh
2008-12-22 12:49   ` [PATCH 06/18] osd_uld: API for retrieving osd devices from Kernel Boaz Harrosh
2008-12-22 12:49     ` Boaz Harrosh
2008-12-22 12:51   ` [PATCH 07/18] osd_ktests: Add basic OSD tests Boaz Harrosh
2008-12-22 12:51     ` Boaz Harrosh
2008-12-22 12:55   ` [PATCH 08/18] libosd: attributes Support Boaz Harrosh
2008-12-22 12:55     ` Boaz Harrosh
2008-12-22 12:57   ` [PATCH 09/18] osd_ktests: Test Attribute lists Boaz Harrosh
2008-12-22 12:57     ` Boaz Harrosh
2008-12-22 13:00   ` [PATCH 10/18] libosd: OSD Security processing stubs Boaz Harrosh
2008-12-22 13:00     ` Boaz Harrosh
2008-12-22 13:02   ` [PATCH 11/18] libosd: Add Flush and List-objects support Boaz Harrosh
2008-12-22 13:02     ` Boaz Harrosh
2008-12-22 13:04   ` [PATCH 12/18] libosd: Not implemented commands Boaz Harrosh
2008-12-22 13:04     ` Boaz Harrosh
2008-12-22 13:07   ` [PATCH 13/18] libosd: OSD version 2 Support Boaz Harrosh
2008-12-22 13:07     ` Boaz Harrosh
2008-12-22 13:09   ` [PATCH 14/18] libosd: OSDv2 auto detection Boaz Harrosh
2008-12-22 13:09     ` Boaz Harrosh
2008-12-22 13:13   ` [PATCH 15/18] libosd: SCSI/OSD Sense decoding support Boaz Harrosh
2008-12-22 13:13     ` Boaz Harrosh
2008-12-22 13:16   ` [PATCH 16/18] osd: Documentation for OSD library Boaz Harrosh
2008-12-22 13:16     ` Boaz Harrosh
2008-12-22 13:18   ` [PATCH 17/18] osd: Kconfig file for in-tree builds Boaz Harrosh
2008-12-22 13:18     ` Boaz Harrosh
2008-12-22 13:20   ` [PATCH 18/18] scsi: Add osd library to build system Boaz Harrosh
2008-12-22 13:20     ` Boaz Harrosh
2009-01-06 14:04 ` [PATCHSET 00/18] open-osd: OSD Initiator library for 2.6.29 Boaz Harrosh
2009-01-06 14:07   ` [PATCH 01/18] major.h: char-major number for OSD device driver Boaz Harrosh
2009-01-06 14:10   ` [PATCH 02/18] scsi: OSD_TYPE Boaz Harrosh
2009-01-06 14:11   ` [PATCH 03/18] libosd: OSDv1 Headers Boaz Harrosh
2009-01-06 14:13   ` [PATCH 04/18] libosd: OSDv1 preliminary implementation Boaz Harrosh
2009-01-06 14:14   ` [PATCH 05/18] osd_uld: OSD scsi ULD Boaz Harrosh
2009-01-06 16:47     ` [PATCH ver2 05/16] " Boaz Harrosh
2009-01-06 14:16   ` [PATCH 06/18] osd_uld: API for retrieving osd devices from Kernel Boaz Harrosh
2009-01-06 14:17   ` [PATCH 07/18] osd_ktests: Add basic OSD tests Boaz Harrosh
2009-01-06 14:42     ` FUJITA Tomonori
2009-01-06 14:56       ` Boaz Harrosh
2009-01-06 15:12         ` FUJITA Tomonori
2009-01-06 15:49           ` Boaz Harrosh
2009-01-06 16:58             ` FUJITA Tomonori
2009-01-06 17:04               ` Boaz Harrosh
2009-01-06 16:49     ` Boaz Harrosh
2009-01-06 14:19   ` [PATCH 08/18] libosd: attributes Support Boaz Harrosh
2009-01-06 14:20   ` [PATCH 09/18] osd_ktests: Test Attribute lists Boaz Harrosh
2009-01-06 16:50     ` Boaz Harrosh
2009-01-06 14:21   ` [PATCH 10/18] libosd: OSD Security processing stubs Boaz Harrosh
2009-01-06 14:23   ` [PATCH 11/18] libosd: Add Flush and List-objects support Boaz Harrosh
2009-01-06 14:24   ` [PATCH 12/18] libosd: Not implemented commands Boaz Harrosh
2009-01-06 14:25   ` [PATCH 13/18] libosd: OSD version 2 Support Boaz Harrosh
2009-01-06 14:27   ` [PATCH 14/18] libosd: OSDv2 auto detection Boaz Harrosh
2009-01-06 14:29   ` [PATCH 15/18] libosd: SCSI/OSD Sense decoding support Boaz Harrosh
2009-01-06 14:31   ` [PATCH 16/18] osd: Documentation for OSD library Boaz Harrosh
2009-01-06 14:32   ` [PATCH 17/18] osd: Kconfig file for in-tree builds Boaz Harrosh
2009-01-06 17:40     ` Randy Dunlap
2009-01-07  8:48       ` Boaz Harrosh
2009-01-07 17:10         ` Randy Dunlap
2009-01-07  8:53       ` [PATCH ver2 15/16] " Boaz Harrosh
2009-01-06 14:34   ` [PATCH 18/18] scsi: Add osd library to build system Boaz Harrosh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4916F8AB.3080105@panasas.com \
    --to=bharrosh@panasas.com \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=Sami.Iren@seagate.com \
    --cc=akpm@linux-foundation.org \
    --cc=fujita.tomonori@lab.ntt.co.jp \
    --cc=jeff@garzik.org \
    --cc=joern@logfs.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=michaelc@cs.wisc.edu \
    --cc=osd-dev@open-osd.org \
    --cc=sam@ravnborg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.