diff --git a/www/contributing.html b/www/contributing.html index f29d02d8a..7c3d4a20c 100644 --- a/www/contributing.html +++ b/www/contributing.html @@ -41,7 +41,8 @@
The main idea is to add one more flag to filp_open() "flags" parameter (like O_RDONLY, O_DIRECT, etc.) O_ZEROCOPY, which would be available - only if the caller is from the kernel space . In this case fd->f_op->readv(), + only if the caller is from the kernel space. In this case fd->f_op->readv(), do_sync_readv_writev(), etc. would receive as the pointer to data buffer not a real data buffer, but pointer to an empty SG vector. Then:
@@ -258,17 +260,18 @@That's all. Then only support for initiators, like iSCSI, which don't handle QUEUE FULL to decrease amount of queued - commands. Instead they expect target to control it through MAX_SN.
+ commands, should be added. Such initiators expect target to control size of + the queue, via, e.g., through MAX_SN for iSCSI. -For such cases at the stage 2 of the dynamic flow control development +
For it at the stage 2 of the dynamic flow control development the following should be done:
At the moment, in scst_vdisk handler command execution function vdisk_do_job() is + overcomplicated and not very performance effective. It would be good to replace all those + ugly "switch" statements by choosing the handler for each SCSI command by indirect + function call on an array of function pointers.
+ +I.e., there should be an array vdisk_exec_fns with 256 entries of function pointers:
+ +void (*cmd_exec_fn) (struct scst_cmd *cmd)
+ +Then vdisk_do_job() should look like
+ +static int vdisk_do_job(struct scst_cmd *cmd) +{ + return vdisk_exec_fns[cmd->cdb[0]](cmd); +}