lkml.org 
[lkml]   [2008]   [Nov]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH 10/18] osd_ktests: Test Attribute lists
Date
Add tests for setting/getting Attribute lists. All combinations
of read/write with set/get attributes are tested.
(6 possibilities), So all but data integrity request structure
layouts are attempted.

This test passes against the IBM-OSD-SIM OSDv1 target.

Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
Reviewed-by: Benny Halevy <bhalevy@panasas.com>
---
drivers/scsi/osd/osd_ktests.c | 110 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 110 insertions(+), 0 deletions(-)
diff --git a/drivers/scsi/osd/osd_ktests.c b/drivers/scsi/osd/osd_ktests.c
index f620915..f0a791f 100644
--- a/drivers/scsi/osd/osd_ktests.c
+++ b/drivers/scsi/osd/osd_ktests.c
@@ -43,6 +43,7 @@

#include <scsi/osd_initiator.h>
#include <scsi/osd_sec.h>
+#include <scsi/osd_attributes.h>

#include "osd_ktests.h"
#include "osd_debug.h"
@@ -260,6 +261,91 @@ int ktest_remove_par(struct osd_dev *osd_dev)
return 0;
}

+int ktest_write_read_attr(struct osd_dev *osd_dev, void *buff,
+ bool doread, bool doset, bool doget)
+{
+ struct request_queue *req_q = osd_dev->scsi_dev->request_queue;
+ struct osd_request *or;
+ char g_caps[OSD_CAP_LEN];
+ int ret;
+ struct bio *bio;
+ char *domsg;
+ /* set attrs */
+ static char name[] = "ktest_write_read_attr";
+ __be64 max_len = cpu_to_be64(0x80000000L);
+ struct osd_obj_id obj = {
+ .partition = first_par_id,
+ .id = first_obj_id,
+ };
+ struct osd_attr set_attrs[] = {
+ ATTR_SET(OSD_APAGE_OBJECT_QUOTAS, OSD_ATTR_OQ_MAXIMUM_LENGTH,
+ sizeof(max_len), &max_len),
+ ATTR_SET(OSD_APAGE_OBJECT_INFORMATION, OSD_ATTR_OI_USERNAME,
+ sizeof(name), name),
+ };
+ struct osd_attr get_attrs[] = {
+ ATTR_DEF(OSD_APAGE_OBJECT_INFORMATION,
+ OSD_ATTR_OI_USED_CAPACITY, sizeof(__be64)),
+ ATTR_DEF(OSD_APAGE_OBJECT_INFORMATION,
+ OSD_ATTR_OI_LOGICAL_LENGTH, sizeof(__be64)),
+ };
+
+ KTEST_START_REQ(osd_dev, or);
+ bio = bio_map_kern(req_q, buff, BUFF_SIZE, GFP_KERNEL);
+ if (!bio) {
+ OSD_ERR("!!! Failed to allocate BIO\n");
+ return -ENOMEM;
+ }
+
+ if (doread) {
+ osd_req_read(or, &obj, bio, 0);
+ domsg = "Read-with-attr";
+ } else {
+ osd_req_write(or, &obj, bio, 0);
+ domsg = "Write-with-attr";
+ }
+
+ if (doset)
+ osd_req_add_set_attr_list(or, set_attrs, 2);
+ if (doget)
+ osd_req_add_get_attr_list(or, get_attrs, 2);
+
+/* KTEST_EXEC_END(or, &obj, "");*/
+ ret = test_exec(or, g_caps, &obj);
+ if (!ret && doget) {
+ void *iter = NULL, *pFirst, *pSec;
+ int nelem = 2;
+ u64 capacity_len = ~0;
+ u64 logical_len = ~0;
+
+ osd_req_decode_get_attr_list(or, get_attrs, &nelem, &iter);
+
+ /*FIXME: Std does not guaranty order of return attrs */
+ pFirst = get_attrs[0].val_ptr;
+ if (pFirst)
+ capacity_len = get_unaligned_be64(pFirst);
+ else
+ OSD_ERR("failed to read capacity_used\n");
+ pSec = get_attrs[1].val_ptr;
+ if (pSec)
+ logical_len = get_unaligned_be64(pSec);
+ else
+ OSD_ERR("failed to read logical_length\n");
+ OSD_INFO("%s capacity=%llu len=%llu\n",
+ domsg, capacity_len, logical_len);
+ }
+
+ osd_end_request(or);
+ if (ret) {
+ OSD_ERR("!!! Error executing %s => %d doset=%d doget=%d\n",
+ domsg, ret, doset, doget);
+ return ret;
+ }
+ OSD_DEBUG("%s\n", domsg);
+
+ return 0;
+}
+
int do_test_17(struct osd_dev *od)
{
void *write_buff = NULL;
@@ -304,11 +390,35 @@ int do_test_17(struct osd_dev *od)
/* List all objects */

/* Write with get_attr */
+ ret = ktest_write_read_attr(od, write_buff, false, false, true);
+ if (ret)
+ goto dev_fini;
+
/* Write with set_attr */
+ ret = ktest_write_read_attr(od, write_buff, false, true, false);
+ if (ret)
+ goto dev_fini;
+
/* Write with set_attr + get_attr */
+ ret = ktest_write_read_attr(od, write_buff, false, true, true);
+ if (ret)
+ goto dev_fini;
+
/* Read with set_attr */
+ ret = ktest_write_read_attr(od, write_buff, true, true, false);
+ if (ret)
+ goto dev_fini;
+
/* Read with get_attr */
+ ret = ktest_write_read_attr(od, write_buff, true, false, true);
+ if (ret)
+ goto dev_fini;
+
/* Read with get_attr + set_attr */
+ ret = ktest_write_read_attr(od, write_buff, true, true, true);
+ if (ret)
+ goto dev_fini;
+
/* remove objects */
ret = ktest_remove_obj(od);
if (ret)
--
1.6.0.1


\
 
 \ /
  Last update: 2008-11-04 17:53    [from the cache]
©2003-2011 Jasper Spaans