The sg_reset utility with no options (just a DEVICE) reports on the reset state (e.g. if a reset is underway) of DEVICE. When given a -d, -t, -b or -h option it requests a device, target, bus or host reset respectively.
The ability to reset a SCSI target (often called a "hard reset" at the transport level) was added in linux kernel 2.6.27 . Low level drivers that support target reset hopefully reset a logical unit only when given the device reset (i.e. -d) option. This should removed the ambiguity of whether "device" meant LU or target that we have had in the past.
In the linux kernel 2.6 series this utility can be called on sd, sr (cd/dvd), st or sg device nodes; if the user has appropriate permissions.
In the linux kernel 2.4 series support for this utility first appeared in lk 2.4.19 and could only be called on sg device nodes. Various vendors made this capability available in their kernels prior to lk 2.4.19.
SAM-4 defines a hard reset, a logical unit reset and a I_T nexus reset. A hard reset is defined to be a power on condition, a microcode change or a transport reset event. A LU reset and an I_T nexus reset can be requested via task management function (and support for LU reset is mandatory). In Linux the SCSI subsystem leaves it up to the low level drivers as to whether a "device reset" is only for the addressed LU or all the LUs in the device that contains the addressed LU (i.e. a target reset). The additional of the target reset (i.e. option -t) should give more control in this area. The "bus reset" is a transport reset and may be a dummy operation, depending on the transport. A "host reset" attempts to re-initialize the HBA that the request passes through en route to the DEVICE. Note that a "host reset" and a "bus reset" may cause collateral damage.
This utility does not allow individual SCSI commands (or tasks as they are called in SAM-4) to be aborted. SAM-4 defines ABORT TASK and ABORT TASK SET task management functions for that.
Prior to SAM-3 there was a TARGET RESET task management function. Several transports still support that function and many associated linux low level drivers map the -t option to it.