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
Kirill Smelkov
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