diff --git a/scst/src/dev_handlers/scst_vdisk.c b/scst/src/dev_handlers/scst_vdisk.c index 962cced3e..e5d5c143a 100644 --- a/scst/src/dev_handlers/scst_vdisk.c +++ b/scst/src/dev_handlers/scst_vdisk.c @@ -226,15 +226,6 @@ struct scst_vdisk_dev { struct scst_dev_type *vdev_devt; }; -struct scst_vdisk_tgt_dev { - /* - * Used without locking since SCST core ensures that only commands - * with the same ORDERED type per tgt_dev can be processed - * simultaneously. - */ - enum scst_cmd_queue_type last_write_cmd_queue_type; -}; - struct scst_vdisk_thr { struct scst_thr_data_hdr hdr; struct file *fd; @@ -832,62 +823,26 @@ out_free: static int vdisk_attach_tgt(struct scst_tgt_dev *tgt_dev) { - struct scst_vdisk_tgt_dev *ftgt_dev; int res = 0; TRACE_ENTRY(); - ftgt_dev = kzalloc(sizeof(*ftgt_dev), GFP_KERNEL); - if (ftgt_dev == NULL) { - TRACE(TRACE_OUT_OF_MEM, "%s", "Allocation of per-session " - "virtual device failed"); - res = -ENOMEM; - goto out; - } + /* Nothing to do */ - tgt_dev->dh_priv = ftgt_dev; - -out: TRACE_EXIT_RES(res); return res; } static void vdisk_detach_tgt(struct scst_tgt_dev *tgt_dev) { - struct scst_vdisk_tgt_dev *ftgt_dev = - (struct scst_vdisk_tgt_dev *)tgt_dev->dh_priv; - TRACE_ENTRY(); scst_del_all_thr_data(tgt_dev); - kfree(ftgt_dev); - tgt_dev->dh_priv = NULL; - TRACE_EXIT(); return; } -static inline int vdisk_sync_queue_type(enum scst_cmd_queue_type qt) -{ - switch (qt) { - case SCST_CMD_QUEUE_ORDERED: - case SCST_CMD_QUEUE_HEAD_OF_QUEUE: - return 1; - default: - return 0; - } -} - -static inline int vdisk_need_pre_sync(enum scst_cmd_queue_type cur, - enum scst_cmd_queue_type last) -{ - if (vdisk_sync_queue_type(cur)) - if (!vdisk_sync_queue_type(last)) - return 1; - return 0; -} - static int vdisk_do_job(struct scst_cmd *cmd) { int rc, res; @@ -1038,28 +993,13 @@ static int vdisk_do_job(struct scst_cmd *cmd) case WRITE_12: case WRITE_16: { - int do_fsync = vdisk_sync_queue_type(cmd->queue_type); - struct scst_vdisk_tgt_dev *ftgt_dev = - (struct scst_vdisk_tgt_dev *)tgt_dev->dh_priv; - enum scst_cmd_queue_type last_queue_type = - ftgt_dev->last_write_cmd_queue_type; - ftgt_dev->last_write_cmd_queue_type = cmd->queue_type; - if (vdisk_need_pre_sync(cmd->queue_type, last_queue_type)) { - TRACE(TRACE_ORDER, "ORDERED WRITE(%d): loff=%lld, " - "data_len=%lld", cmd->queue_type, - (long long unsigned int)loff, - (long long unsigned int)data_len); - do_fsync = 1; - if (vdisk_fsync(thr, 0, 0, cmd, dev) != 0) - goto out_compl; - } if (virt_dev->blockio) { blockio_exec_rw(cmd, thr, lba_start, 1); goto out_thr; } else vdisk_exec_write(cmd, thr, loff); /* O_SYNC flag is used for WT devices */ - if (do_fsync || fua) + if (fua) vdisk_fsync(thr, loff, data_len, cmd, dev); break; } @@ -1067,29 +1007,11 @@ static int vdisk_do_job(struct scst_cmd *cmd) case WRITE_VERIFY_12: case WRITE_VERIFY_16: { - int do_fsync = vdisk_sync_queue_type(cmd->queue_type); - struct scst_vdisk_tgt_dev *ftgt_dev = - (struct scst_vdisk_tgt_dev *) tgt_dev->dh_priv; - enum scst_cmd_queue_type last_queue_type = - ftgt_dev->last_write_cmd_queue_type; - ftgt_dev->last_write_cmd_queue_type = cmd->queue_type; - if (vdisk_need_pre_sync(cmd->queue_type, last_queue_type)) { - TRACE(TRACE_ORDER, "ORDERED " - "WRITE_VERIFY(%d): loff=%lld," - " data_len=%lld", cmd->queue_type, - (long long unsigned int)loff, - (long long unsigned int)data_len); - do_fsync = 1; - if (vdisk_fsync(thr, 0, 0, cmd, dev) != 0) - goto out_compl; - } /* ToDo: BLOCKIO VERIFY */ vdisk_exec_write(cmd, thr, loff); /* O_SYNC flag is used for WT devices */ if (scsi_status_is_good(cmd->status)) vdisk_exec_verify(cmd, thr, loff); - else if (do_fsync) - vdisk_fsync(thr, loff, data_len, cmd, dev); break; } case SYNCHRONIZE_CACHE: diff --git a/usr/fileio/common.c b/usr/fileio/common.c index 4817cb205..51c5db5ab 100644 --- a/usr/fileio/common.c +++ b/usr/fileio/common.c @@ -227,26 +227,6 @@ struct vdisk_tgt_dev *find_empty_tgt_dev(struct vdisk_dev *dev) return res; } -static inline int sync_queue_type(enum scst_cmd_queue_type qt) -{ - switch(qt) { - case SCST_CMD_QUEUE_ORDERED: - case SCST_CMD_QUEUE_HEAD_OF_QUEUE: - return 1; - default: - return 0; - } -} - -static inline int need_pre_sync(enum scst_cmd_queue_type cur, - enum scst_cmd_queue_type last) -{ - if (sync_queue_type(cur)) - if (!sync_queue_type(last)) - return 1; - return 0; -} - static int do_exec(struct vdisk_cmd *vcmd) { int res = 0; @@ -405,9 +385,7 @@ static int do_exec(struct vdisk_cmd *vcmd) case WRITE_12: case WRITE_16: if (!dev->rd_only_flag) { - int do_fsync = sync_queue_type(cmd->queue_type); struct vdisk_tgt_dev *tgt_dev; - enum scst_cmd_queue_type last_queue_type; tgt_dev = find_tgt_dev(dev, cmd->sess_h); if (tgt_dev == NULL) { @@ -418,20 +396,9 @@ static int do_exec(struct vdisk_cmd *vcmd) goto out; } - last_queue_type = tgt_dev->last_write_cmd_queue_type; - tgt_dev->last_write_cmd_queue_type = cmd->queue_type; - if (need_pre_sync(cmd->queue_type, last_queue_type)) { - TRACE(TRACE_ORDER, "ORDERED " - "WRITE(%d): loff=%"PRId64", data_len=%" - PRId64, cmd->queue_type, (uint64_t)loff, - (uint64_t)data_len); - do_fsync = 1; - if (exec_fsync(vcmd) != 0) - goto out; - } exec_write(vcmd, loff); /* O_SYNC flag is used for WT devices */ - if (do_fsync || fua) + if (fua) exec_fsync(vcmd); } else { PRINT_WARNING("Attempt to write to read-only " @@ -444,9 +411,7 @@ static int do_exec(struct vdisk_cmd *vcmd) case WRITE_VERIFY_12: case WRITE_VERIFY_16: if (!dev->rd_only_flag) { - int do_fsync = sync_queue_type(cmd->queue_type); struct vdisk_tgt_dev *tgt_dev; - enum scst_cmd_queue_type last_queue_type; tgt_dev = find_tgt_dev(dev, cmd->sess_h); if (tgt_dev == NULL) { @@ -457,22 +422,11 @@ static int do_exec(struct vdisk_cmd *vcmd) goto out; } - last_queue_type = tgt_dev->last_write_cmd_queue_type; - tgt_dev->last_write_cmd_queue_type = cmd->queue_type; - if (need_pre_sync(cmd->queue_type, last_queue_type)) { - TRACE(TRACE_ORDER, "ORDERED " - "WRITE_VERIFY(%d): loff=%"PRId64", " - "data_len=%"PRId64, cmd->queue_type, - (uint64_t)loff, (uint64_t)data_len); - do_fsync = 1; - if (exec_fsync(vcmd) != 0) - goto out; - } exec_write(vcmd, loff); /* O_SYNC flag is used for WT devices */ if (reply->status == 0) exec_verify(vcmd, loff); - else if (do_fsync) + else if (fua) exec_fsync(vcmd); } else { PRINT_WARNING("Attempt to write to read-only " @@ -712,7 +666,6 @@ static int do_sess(struct vdisk_cmd *vcmd) } tgt_dev->sess_h = cmd->sess.sess_h; - tgt_dev->last_write_cmd_queue_type = SCST_CMD_QUEUE_SIMPLE; PRINT_INFO("Session from initiator %s (target %s) attached " "(LUN %"PRIx64", threads_num %d, rd_only %d, sess_h " diff --git a/usr/fileio/common.h b/usr/fileio/common.h index 0ed313110..3acfdf966 100644 --- a/usr/fileio/common.h +++ b/usr/fileio/common.h @@ -46,12 +46,6 @@ struct vdisk_tgt_dev { uint64_t sess_h; - /* - * Used without protection since we are guaranteed by SCST core - * that only commands with the same ORDERED type per tgt_dev can - * be processed simultaneously. - */ - int last_write_cmd_queue_type; }; struct vdisk_dev {