summaryrefslogtreecommitdiff
path: root/drivers/scsi/ufs
diff options
context:
space:
mode:
authorDolev Raviv <draviv@codeaurora.org>2015-01-19 22:22:16 +0200
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-22 10:59:20 -0700
commit279fdf9c3a1a21ace588b5d12c3a58a243c5b7c2 (patch)
tree7a2bf678fd8cfa7eb0381ef3b9acba4788862537 /drivers/scsi/ufs
parent94df81252080e8a0f9bf6530c13e2f8c6e1d8b49 (diff)
test-iosched: ufs_test: fix gendisk usage in test
Adding a new access api for gendisk without using scsi private headers. This patch fixes multiple errors: 1. Relative include path in ufs_test.c to <../sd.h> 2. Allowing suspend after first test run. Change-Id: I152d34667ab63790b643abb55111fc5b67c90ac9 Signed-off-by: Dolev Raviv <draviv@codeaurora.org> [merez@codeaurora.org: fix trivial conflicts in ufs_test.c] Signed-off-by: Maya Erez <merez@codeaurora.org> [venkatg@codeaurora.org: resolved trivial merge conflicts, use scsi_disk_get instead of __scsi_disk_get] Signed-off-by: Venkat Gopalakrishnan <venkatg@codeaurora.org>
Diffstat (limited to 'drivers/scsi/ufs')
-rw-r--r--drivers/scsi/ufs/ufs_test.c44
1 files changed, 32 insertions, 12 deletions
diff --git a/drivers/scsi/ufs/ufs_test.c b/drivers/scsi/ufs/ufs_test.c
index 2b6d8054ed9d..005c14de57d8 100644
--- a/drivers/scsi/ufs/ufs_test.c
+++ b/drivers/scsi/ufs/ufs_test.c
@@ -19,6 +19,7 @@
#include <linux/delay.h>
#include <linux/module.h>
#include <linux/test-iosched.h>
+#include <scsi/scsi.h>
#include <scsi/scsi_device.h>
#include <scsi/scsi_cmnd.h>
#include <scsi/scsi_host.h>
@@ -413,29 +414,47 @@ static struct gendisk *ufs_test_get_rq_disk(void)
{
struct request_queue *req_q = test_iosched_get_req_queue();
struct scsi_device *sd;
- struct device *dev;
- struct scsi_disk *sdkp;
- struct gendisk *gd;
if (!req_q) {
pr_info("%s: Could not fetch request_queue", __func__);
- gd = NULL;
goto exit;
}
sd = (struct scsi_device *)req_q->queuedata;
+ if (!sd) {
+ pr_info("%s: req_q is missing required queuedata", __func__);
+ goto exit;
+ }
+
+ return scsi_gendisk_get_from_dev(&sd->sdev_gendev);
+
+exit:
+ return NULL;
+}
+
+static int ufs_test_put_gendisk(struct test_data *td)
+{
+ struct request_queue *req_q = test_iosched_get_req_queue();
+ struct scsi_device *sd;
+ int ret = 0;
- dev = &sd->sdev_gendev;
- sdkp = scsi_disk_get_from_dev(dev);
- if (!sdkp) {
- pr_info("%s: Could not fatch scsi disk", __func__);
- gd = NULL;
+ if (!req_q) {
+ pr_info("%s: Could not fetch request_queue", __func__);
+ ret = -EINVAL;
goto exit;
}
- gd = sdkp->disk;
+ sd = (struct scsi_device *)req_q->queuedata;
+ if (!sd) {
+ pr_info("%s: req_q is missing required queuedata", __func__);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ scsi_gendisk_put(&sd->sdev_gendev);
+
exit:
- return gd;
+ return ret;
}
static int ufs_test_check_result(struct test_data *td)
@@ -1045,7 +1064,7 @@ static int long_rand_test_calc_iops(struct test_data *td)
pr_info("%s: IOPS: %lu IOP/sec\n", __func__, iops);
- return 0;
+ return ufs_test_put_gendisk(td);
}
static int long_seq_test_calc_throughput(struct test_data *td)
@@ -1102,6 +1121,7 @@ static ssize_t ufs_test_write(struct file *file, const char __user *buf,
utd->test_info.testcase = test_case;
utd->test_info.get_rq_disk_fn = ufs_test_get_rq_disk;
utd->test_info.check_test_result_fn = ufs_test_check_result;
+ utd->test_info.post_test_fn = ufs_test_put_gendisk;
utd->test_stage = DEFAULT;
switch (test_case) {