2011-07-23 06:43:04 +00:00
/*******************************************************************************
* This file contains the iSCSI Virtual Device and Disk Transport
* agnostic related functions .
*
2013-09-05 15:29:12 -07:00
* ( c ) Copyright 2007 - 2013 Datera , Inc .
2011-07-23 06:43:04 +00:00
*
* Author : Nicholas A . Bellinger < nab @ linux - iscsi . org >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include <target/target_core_base.h>
2011-11-16 09:46:48 -05:00
# include <target/target_core_fabric.h>
2011-07-23 06:43:04 +00:00
2015-01-07 14:57:31 +02:00
# include <target/iscsi/iscsi_target_core.h>
2011-07-23 06:43:04 +00:00
# include "iscsi_target_device.h"
# include "iscsi_target_tpg.h"
# include "iscsi_target_util.h"
void iscsit_determine_maxcmdsn ( struct iscsi_session * sess )
{
struct se_node_acl * se_nacl ;
/*
* This is a discovery session , the single queue slot was already
* assigned in iscsi_login_zero_tsih ( ) . Since only Logout and
* Text Opcodes are allowed during discovery we do not have to worry
* about the HBA ' s queue depth here .
*/
if ( sess - > sess_ops - > SessionType )
return ;
se_nacl = sess - > se_sess - > se_node_acl ;
/*
* This is a normal session , set the Session ' s CmdSN window to the
* struct se_node_acl - > queue_depth . The value in struct se_node_acl - > queue_depth
* has already been validated as a legal value in
* core_set_queue_depth_for_node ( ) .
*/
sess - > cmdsn_window = se_nacl - > queue_depth ;
2015-07-23 14:53:32 -07:00
atomic_set ( & sess - > max_cmd_sn , ( u32 ) atomic_read ( & sess - > max_cmd_sn ) + se_nacl - > queue_depth - 1 ) ;
2011-07-23 06:43:04 +00:00
}
void iscsit_increment_maxcmdsn ( struct iscsi_cmd * cmd , struct iscsi_session * sess )
{
if ( cmd - > immediate_cmd | | cmd - > maxcmdsn_inc )
return ;
cmd - > maxcmdsn_inc = 1 ;
2015-07-23 14:53:32 -07:00
pr_debug ( " Updated MaxCmdSN to 0x%08x \n " , atomic_inc_return ( & sess - > max_cmd_sn ) ) ;
2011-07-23 06:43:04 +00:00
}
2013-03-20 15:29:15 -07:00
EXPORT_SYMBOL ( iscsit_increment_maxcmdsn ) ;