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

Commit 1cd6c521 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "test-iosched: ufs_test: fix gendisk usage in test"

parents 4e399c02 eeea96cb
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -580,6 +580,29 @@ 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 void sd_prot_op(struct scsi_cmnd *scmd, unsigned int dif)
{
	unsigned int prot_op = SCSI_PROT_NORMAL;
+32 −13
Original line number Diff line number Diff line
@@ -19,10 +19,10 @@
#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>
#include <../sd.h>
#include "ufshcd.h"
#include "ufs.h"

@@ -425,29 +425,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)
@@ -1057,7 +1075,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)
@@ -1206,6 +1224,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
@@ -578,4 +578,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 */