Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
48d28fd5
Commit
48d28fd5
authored
Aug 10, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
parents
86b37860
5bb8345d
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
50 additions
and
2 deletions
+50
-2
drivers/scsi/dpt_i2o.c
drivers/scsi/dpt_i2o.c
+8
-1
drivers/scsi/scsi_scan.c
drivers/scsi/scsi_scan.c
+15
-1
drivers/scsi/scsi_transport_fc.c
drivers/scsi/scsi_transport_fc.c
+19
-0
include/scsi/scsi_transport.h
include/scsi/scsi_transport.h
+8
-0
No files found.
drivers/scsi/dpt_i2o.c
View file @
48d28fd5
...
...
@@ -907,9 +907,13 @@ static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev
raptorFlag
=
TRUE
;
}
if
(
pci_request_regions
(
pDev
,
"dpt_i2o"
))
{
PERROR
(
"dpti: adpt_config_hba: pci request region failed
\n
"
);
return
-
EINVAL
;
}
base_addr_virt
=
ioremap
(
base_addr0_phys
,
hba_map0_area_size
);
if
(
!
base_addr_virt
)
{
pci_release_regions
(
pDev
);
PERROR
(
"dpti: adpt_config_hba: io remap failed
\n
"
);
return
-
EINVAL
;
}
...
...
@@ -919,6 +923,7 @@ static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev
if
(
!
msg_addr_virt
)
{
PERROR
(
"dpti: adpt_config_hba: io remap failed on BAR1
\n
"
);
iounmap
(
base_addr_virt
);
pci_release_regions
(
pDev
);
return
-
EINVAL
;
}
}
else
{
...
...
@@ -932,6 +937,7 @@ static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev
iounmap
(
msg_addr_virt
);
}
iounmap
(
base_addr_virt
);
pci_release_regions
(
pDev
);
return
-
ENOMEM
;
}
memset
(
pHba
,
0
,
sizeof
(
adpt_hba
));
...
...
@@ -1027,6 +1033,7 @@ static void adpt_i2o_delete_hba(adpt_hba* pHba)
up
(
&
adpt_configuration_lock
);
iounmap
(
pHba
->
base_addr_virt
);
pci_release_regions
(
pHba
->
pDev
);
if
(
pHba
->
msg_addr_virt
!=
pHba
->
base_addr_virt
){
iounmap
(
pHba
->
msg_addr_virt
);
}
...
...
drivers/scsi/scsi_scan.c
View file @
48d28fd5
...
...
@@ -336,9 +336,23 @@ static struct scsi_target *scsi_alloc_target(struct device *parent,
unsigned
long
flags
;
const
int
size
=
sizeof
(
struct
scsi_target
)
+
shost
->
transportt
->
target_size
;
struct
scsi_target
*
starget
=
kmalloc
(
size
,
GFP_ATOMIC
)
;
struct
scsi_target
*
starget
;
struct
scsi_target
*
found_target
;
/*
* Obtain the real parent from the transport. The transport
* is allowed to fail (no error) if there is nothing at that
* target id.
*/
if
(
shost
->
transportt
->
target_parent
)
{
spin_lock_irqsave
(
shost
->
host_lock
,
flags
);
parent
=
shost
->
transportt
->
target_parent
(
shost
,
channel
,
id
);
spin_unlock_irqrestore
(
shost
->
host_lock
,
flags
);
if
(
!
parent
)
return
NULL
;
}
starget
=
kmalloc
(
size
,
GFP_KERNEL
);
if
(
!
starget
)
{
printk
(
KERN_ERR
"%s: allocation failure
\n
"
,
__FUNCTION__
);
return
NULL
;
...
...
drivers/scsi/scsi_transport_fc.c
View file @
48d28fd5
...
...
@@ -1022,6 +1022,23 @@ static int fc_rport_match(struct attribute_container *cont,
return
&
i
->
rport_attr_cont
.
ac
==
cont
;
}
/*
* Must be called with shost->host_lock held
*/
static
struct
device
*
fc_target_parent
(
struct
Scsi_Host
*
shost
,
int
channel
,
uint
id
)
{
struct
fc_rport
*
rport
;
list_for_each_entry
(
rport
,
&
fc_host_rports
(
shost
),
peers
)
if
((
rport
->
channel
==
channel
)
&&
(
rport
->
scsi_target_id
==
id
))
return
&
rport
->
dev
;
return
NULL
;
}
struct
scsi_transport_template
*
fc_attach_transport
(
struct
fc_function_template
*
ft
)
{
...
...
@@ -1057,6 +1074,8 @@ fc_attach_transport(struct fc_function_template *ft)
/* Transport uses the shost workq for scsi scanning */
i
->
t
.
create_work_queue
=
1
;
i
->
t
.
target_parent
=
fc_target_parent
;
/*
* Setup SCSI Target Attributes.
...
...
include/scsi/scsi_transport.h
View file @
48d28fd5
...
...
@@ -29,6 +29,14 @@ struct scsi_transport_template {
struct
transport_container
target_attrs
;
struct
transport_container
device_attrs
;
/*
* If set, call target_parent prior to allocating a scsi_target,
* so we get the appropriate parent for the target. This function
* is required for transports like FC and iSCSI that do not put the
* scsi_target under scsi_host.
*/
struct
device
*
(
*
target_parent
)(
struct
Scsi_Host
*
,
int
,
uint
);
/* The size of the specific transport attribute structure (a
* space of this size will be left at the end of the
* scsi_* structure */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment