Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da3530be authored by Dolev Raviv's avatar Dolev Raviv Committed by Matt Wagantall
Browse files

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: default avatarDolev Raviv <draviv@codeaurora.org>
[merez@codeaurora.org: fix trivial conflicts in ufs_test.c]
Signed-off-by: default avatarMaya Erez <merez@codeaurora.org>
parent e57839e5
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -610,7 +610,28 @@ static void scsi_disk_put(struct scsi_disk *sdkp)
	mutex_unlock(&sd_ref_mutex);
}

struct gendisk *scsi_gendisk_get_from_dev(struct device *dev)
{
	struct scsi_disk *sdkp;

	mutex_lock(&sd_ref_mutex);
	sdkp = dev_get_drvdata(dev);
	if (sdkp)
		sdkp = __scsi_disk_get(sdkp->disk);
	mutex_unlock(&sd_ref_mutex);
	return !sdkp ? NULL : sdkp->disk;
}

void scsi_gendisk_put(struct device *dev)
{
	struct scsi_disk *sdkp = dev_get_drvdata(dev);
	struct scsi_device *sdev = sdkp->device;

	mutex_lock(&sd_ref_mutex);
	put_device(&sdkp->dev);
	scsi_device_put(sdev);
	mutex_unlock(&sd_ref_mutex);
}

static unsigned char sd_setup_protect_cmnd(struct scsi_cmnd *scmd,
					   unsigned int dix, unsigned int dif)
+32 −12
Original line number Diff line number Diff line
@@ -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) {
+3 −0
Original line number Diff line number Diff line
@@ -565,4 +565,7 @@ static inline __u32 scsi_to_u32(__u8 *ptr)

struct scsi_disk *scsi_disk_get_from_dev(struct device *dev);

struct gendisk *scsi_gendisk_get_from_dev(struct device *dev);
void scsi_gendisk_put(struct device *dev);

#endif /* _SCSI_SCSI_H */