patch-2.1.96 linux/drivers/scsi/sg.c
Next file: linux/drivers/scsi/sr.c
Previous file: linux/drivers/scsi/seagate.c
Back to the patch index
Back to the overall index
- Lines: 60
- Date:
Mon Apr 13 13:48:07 1998
- Orig file:
v2.1.95/linux/drivers/scsi/sg.c
- Orig date:
Fri Apr 10 13:03:49 1998
diff -u --recursive --new-file v2.1.95/linux/drivers/scsi/sg.c linux/drivers/scsi/sg.c
@@ -95,6 +95,8 @@
return 0;
case SG_GET_TIMEOUT:
return scsi_generics[dev].timeout;
+ case SG_EMULATED_HOST:
+ return put_user(scsi_generics[dev].device->host->hostt->emulated, (int *) arg);
default:
return scsi_ioctl(scsi_generics[dev].device, cmd_in, (void *) arg);
}
@@ -226,7 +228,6 @@
struct inode *inode = filp->f_dentry->d_inode;
int dev=MINOR(inode->i_rdev);
int i;
- unsigned long flags;
struct scsi_generic *device=&scsi_generics[dev];
/*
@@ -250,22 +251,18 @@
/*
* Wait until the command is actually done.
*/
- spin_lock_irqsave(&io_request_lock, flags);
while(!device->pending || !device->complete)
{
if (filp->f_flags & O_NONBLOCK)
{
- spin_unlock_irqrestore(&io_request_lock, flags);
return -EAGAIN;
}
interruptible_sleep_on(&device->read_wait);
if (signal_pending(current))
{
- spin_unlock_irqrestore(&io_request_lock, flags);
return -ERESTARTSYS;
}
}
- spin_unlock_irqrestore(&io_request_lock, flags);
/*
* Now copy the result back to the user buffer.
@@ -364,6 +361,7 @@
static ssize_t sg_write(struct file *filp, const char *buf,
size_t count, loff_t *ppos)
{
+ unsigned long flags;
struct inode *inode = filp->f_dentry->d_inode;
int bsize,size,amt,i;
unsigned char cmnd[MAX_COMMAND_SIZE];
@@ -531,9 +529,11 @@
* do not do any more here - when the interrupt arrives, we will
* then do the post-processing.
*/
+ spin_lock_irqsave(&io_request_lock, flags);
scsi_do_cmd (SCpnt,(void *) cmnd,
(void *) device->buff,amt,
sg_command_done,device->timeout,SG_DEFAULT_RETRIES);
+ spin_unlock_irqrestore(&io_request_lock, flags);
#ifdef DEBUG
printk("done cmd\n");
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov