diff options
author | Dolev Raviv <draviv@codeaurora.org> | 2015-01-19 22:22:16 +0200 |
---|---|---|
committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-22 10:59:20 -0700 |
commit | 279fdf9c3a1a21ace588b5d12c3a58a243c5b7c2 (patch) | |
tree | 7a2bf678fd8cfa7eb0381ef3b9acba4788862537 /drivers/scsi/ufs | |
parent | 94df81252080e8a0f9bf6530c13e2f8c6e1d8b49 (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.c | 44 |
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) { |