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
c30f3343
Commit
c30f3343
authored
Oct 13, 2009
by
Jens Axboe
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-linus' into for-2.6.33
parents
132cc538
2ec24ff1
Changes
15
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
228 additions
and
201 deletions
+228
-201
block/blk-core.c
block/blk-core.c
+4
-12
block/blk-merge.c
block/blk-merge.c
+1
-1
block/blk-settings.c
block/blk-settings.c
+1
-1
block/blk-tag.c
block/blk-tag.c
+1
-1
block/cfq-iosched.c
block/cfq-iosched.c
+142
-117
block/elevator.c
block/elevator.c
+1
-3
block/genhd.c
block/genhd.c
+3
-1
drivers/block/cciss.c
drivers/block/cciss.c
+37
-42
drivers/md/dm.c
drivers/md/dm.c
+10
-6
fs/partitions/check.c
fs/partitions/check.c
+11
-1
include/linux/blkdev.h
include/linux/blkdev.h
+0
-4
include/linux/genhd.h
include/linux/genhd.h
+14
-7
kernel/sched.c
kernel/sched.c
+0
-3
mm/backing-dev.c
mm/backing-dev.c
+1
-1
mm/page-writeback.c
mm/page-writeback.c
+2
-1
No files found.
block/blk-core.c
View file @
c30f3343
...
@@ -70,7 +70,7 @@ static void drive_stat_acct(struct request *rq, int new_io)
...
@@ -70,7 +70,7 @@ static void drive_stat_acct(struct request *rq, int new_io)
part_stat_inc
(
cpu
,
part
,
merges
[
rw
]);
part_stat_inc
(
cpu
,
part
,
merges
[
rw
]);
else
{
else
{
part_round_stats
(
cpu
,
part
);
part_round_stats
(
cpu
,
part
);
part_inc_in_flight
(
part
);
part_inc_in_flight
(
part
,
rw
);
}
}
part_stat_unlock
();
part_stat_unlock
();
...
@@ -1030,9 +1030,9 @@ static void part_round_stats_single(int cpu, struct hd_struct *part,
...
@@ -1030,9 +1030,9 @@ static void part_round_stats_single(int cpu, struct hd_struct *part,
if
(
now
==
part
->
stamp
)
if
(
now
==
part
->
stamp
)
return
;
return
;
if
(
part
->
in_flight
)
{
if
(
part
_in_flight
(
part
)
)
{
__part_stat_add
(
cpu
,
part
,
time_in_queue
,
__part_stat_add
(
cpu
,
part
,
time_in_queue
,
part
->
in_flight
*
(
now
-
part
->
stamp
));
part
_in_flight
(
part
)
*
(
now
-
part
->
stamp
));
__part_stat_add
(
cpu
,
part
,
io_ticks
,
(
now
-
part
->
stamp
));
__part_stat_add
(
cpu
,
part
,
io_ticks
,
(
now
-
part
->
stamp
));
}
}
part
->
stamp
=
now
;
part
->
stamp
=
now
;
...
@@ -1739,7 +1739,7 @@ static void blk_account_io_done(struct request *req)
...
@@ -1739,7 +1739,7 @@ static void blk_account_io_done(struct request *req)
part_stat_inc
(
cpu
,
part
,
ios
[
rw
]);
part_stat_inc
(
cpu
,
part
,
ios
[
rw
]);
part_stat_add
(
cpu
,
part
,
ticks
[
rw
],
duration
);
part_stat_add
(
cpu
,
part
,
ticks
[
rw
],
duration
);
part_round_stats
(
cpu
,
part
);
part_round_stats
(
cpu
,
part
);
part_dec_in_flight
(
part
);
part_dec_in_flight
(
part
,
rw
);
part_stat_unlock
();
part_stat_unlock
();
}
}
...
@@ -2492,14 +2492,6 @@ int kblockd_schedule_work(struct request_queue *q, struct work_struct *work)
...
@@ -2492,14 +2492,6 @@ int kblockd_schedule_work(struct request_queue *q, struct work_struct *work)
}
}
EXPORT_SYMBOL
(
kblockd_schedule_work
);
EXPORT_SYMBOL
(
kblockd_schedule_work
);
int
kblockd_schedule_delayed_work
(
struct
request_queue
*
q
,
struct
delayed_work
*
work
,
unsigned
long
delay
)
{
return
queue_delayed_work
(
kblockd_workqueue
,
work
,
delay
);
}
EXPORT_SYMBOL
(
kblockd_schedule_delayed_work
);
int
__init
blk_dev_init
(
void
)
int
__init
blk_dev_init
(
void
)
{
{
BUILD_BUG_ON
(
__REQ_NR_BITS
>
8
*
BUILD_BUG_ON
(
__REQ_NR_BITS
>
8
*
...
...
block/blk-merge.c
View file @
c30f3343
...
@@ -351,7 +351,7 @@ static void blk_account_io_merge(struct request *req)
...
@@ -351,7 +351,7 @@ static void blk_account_io_merge(struct request *req)
part
=
disk_map_sector_rcu
(
req
->
rq_disk
,
blk_rq_pos
(
req
));
part
=
disk_map_sector_rcu
(
req
->
rq_disk
,
blk_rq_pos
(
req
));
part_round_stats
(
cpu
,
part
);
part_round_stats
(
cpu
,
part
);
part_dec_in_flight
(
part
);
part_dec_in_flight
(
part
,
rq_data_dir
(
req
)
);
part_stat_unlock
();
part_stat_unlock
();
}
}
...
...
block/blk-settings.c
View file @
c30f3343
...
@@ -242,7 +242,7 @@ EXPORT_SYMBOL(blk_queue_max_hw_sectors);
...
@@ -242,7 +242,7 @@ EXPORT_SYMBOL(blk_queue_max_hw_sectors);
/**
/**
* blk_queue_max_discard_sectors - set max sectors for a single discard
* blk_queue_max_discard_sectors - set max sectors for a single discard
* @q: the request queue for the device
* @q: the request queue for the device
* @max_discard: maximum number of sectors to discard
* @max_discard
_sectors
: maximum number of sectors to discard
**/
**/
void
blk_queue_max_discard_sectors
(
struct
request_queue
*
q
,
void
blk_queue_max_discard_sectors
(
struct
request_queue
*
q
,
unsigned
int
max_discard_sectors
)
unsigned
int
max_discard_sectors
)
...
...
block/blk-tag.c
View file @
c30f3343
...
@@ -359,7 +359,7 @@ int blk_queue_start_tag(struct request_queue *q, struct request *rq)
...
@@ -359,7 +359,7 @@ int blk_queue_start_tag(struct request_queue *q, struct request *rq)
max_depth
-=
2
;
max_depth
-=
2
;
if
(
!
max_depth
)
if
(
!
max_depth
)
max_depth
=
1
;
max_depth
=
1
;
if
(
q
->
in_flight
[
0
]
>
max_depth
)
if
(
q
->
in_flight
[
BLK_RW_ASYNC
]
>
max_depth
)
return
1
;
return
1
;
}
}
...
...
block/cfq-iosched.c
View file @
c30f3343
This diff is collapsed.
Click to expand it.
block/elevator.c
View file @
c30f3343
...
@@ -1053,9 +1053,7 @@ ssize_t elv_iosched_store(struct request_queue *q, const char *name,
...
@@ -1053,9 +1053,7 @@ ssize_t elv_iosched_store(struct request_queue *q, const char *name,
return
count
;
return
count
;
strlcpy
(
elevator_name
,
name
,
sizeof
(
elevator_name
));
strlcpy
(
elevator_name
,
name
,
sizeof
(
elevator_name
));
strstrip
(
elevator_name
);
e
=
elevator_get
(
strstrip
(
elevator_name
));
e
=
elevator_get
(
elevator_name
);
if
(
!
e
)
{
if
(
!
e
)
{
printk
(
KERN_ERR
"elevator: type %s not found
\n
"
,
elevator_name
);
printk
(
KERN_ERR
"elevator: type %s not found
\n
"
,
elevator_name
);
return
-
EINVAL
;
return
-
EINVAL
;
...
...
block/genhd.c
View file @
c30f3343
...
@@ -869,6 +869,7 @@ static DEVICE_ATTR(size, S_IRUGO, part_size_show, NULL);
...
@@ -869,6 +869,7 @@ static DEVICE_ATTR(size, S_IRUGO, part_size_show, NULL);
static
DEVICE_ATTR
(
alignment_offset
,
S_IRUGO
,
disk_alignment_offset_show
,
NULL
);
static
DEVICE_ATTR
(
alignment_offset
,
S_IRUGO
,
disk_alignment_offset_show
,
NULL
);
static
DEVICE_ATTR
(
capability
,
S_IRUGO
,
disk_capability_show
,
NULL
);
static
DEVICE_ATTR
(
capability
,
S_IRUGO
,
disk_capability_show
,
NULL
);
static
DEVICE_ATTR
(
stat
,
S_IRUGO
,
part_stat_show
,
NULL
);
static
DEVICE_ATTR
(
stat
,
S_IRUGO
,
part_stat_show
,
NULL
);
static
DEVICE_ATTR
(
inflight
,
S_IRUGO
,
part_inflight_show
,
NULL
);
#ifdef CONFIG_FAIL_MAKE_REQUEST
#ifdef CONFIG_FAIL_MAKE_REQUEST
static
struct
device_attribute
dev_attr_fail
=
static
struct
device_attribute
dev_attr_fail
=
__ATTR
(
make
-
it
-
fail
,
S_IRUGO
|
S_IWUSR
,
part_fail_show
,
part_fail_store
);
__ATTR
(
make
-
it
-
fail
,
S_IRUGO
|
S_IWUSR
,
part_fail_show
,
part_fail_store
);
...
@@ -888,6 +889,7 @@ static struct attribute *disk_attrs[] = {
...
@@ -888,6 +889,7 @@ static struct attribute *disk_attrs[] = {
&
dev_attr_alignment_offset
.
attr
,
&
dev_attr_alignment_offset
.
attr
,
&
dev_attr_capability
.
attr
,
&
dev_attr_capability
.
attr
,
&
dev_attr_stat
.
attr
,
&
dev_attr_stat
.
attr
,
&
dev_attr_inflight
.
attr
,
#ifdef CONFIG_FAIL_MAKE_REQUEST
#ifdef CONFIG_FAIL_MAKE_REQUEST
&
dev_attr_fail
.
attr
,
&
dev_attr_fail
.
attr
,
#endif
#endif
...
@@ -1053,7 +1055,7 @@ static int diskstats_show(struct seq_file *seqf, void *v)
...
@@ -1053,7 +1055,7 @@ static int diskstats_show(struct seq_file *seqf, void *v)
part_stat_read
(
hd
,
merges
[
1
]),
part_stat_read
(
hd
,
merges
[
1
]),
(
unsigned
long
long
)
part_stat_read
(
hd
,
sectors
[
1
]),
(
unsigned
long
long
)
part_stat_read
(
hd
,
sectors
[
1
]),
jiffies_to_msecs
(
part_stat_read
(
hd
,
ticks
[
1
])),
jiffies_to_msecs
(
part_stat_read
(
hd
,
ticks
[
1
])),
hd
->
in_flight
,
part_in_flight
(
hd
)
,
jiffies_to_msecs
(
part_stat_read
(
hd
,
io_ticks
)),
jiffies_to_msecs
(
part_stat_read
(
hd
,
io_ticks
)),
jiffies_to_msecs
(
part_stat_read
(
hd
,
time_in_queue
))
jiffies_to_msecs
(
part_stat_read
(
hd
,
time_in_queue
))
);
);
...
...
drivers/block/cciss.c
View file @
c30f3343
...
@@ -68,6 +68,12 @@ MODULE_SUPPORTED_DEVICE("HP SA5i SA5i+ SA532 SA5300 SA5312 SA641 SA642 SA6400"
...
@@ -68,6 +68,12 @@ MODULE_SUPPORTED_DEVICE("HP SA5i SA5i+ SA532 SA5300 SA5312 SA641 SA642 SA6400"
MODULE_VERSION
(
"3.6.20"
);
MODULE_VERSION
(
"3.6.20"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
static
int
cciss_allow_hpsa
;
module_param
(
cciss_allow_hpsa
,
int
,
S_IRUGO
|
S_IWUSR
);
MODULE_PARM_DESC
(
cciss_allow_hpsa
,
"Prevent cciss driver from accessing hardware known to be "
" supported by the hpsa driver"
);
#include "cciss_cmd.h"
#include "cciss_cmd.h"
#include "cciss.h"
#include "cciss.h"
#include <linux/cciss_ioctl.h>
#include <linux/cciss_ioctl.h>
...
@@ -101,8 +107,6 @@ static const struct pci_device_id cciss_pci_device_id[] = {
...
@@ -101,8 +107,6 @@ static const struct pci_device_id cciss_pci_device_id[] = {
{
PCI_VENDOR_ID_HP
,
PCI_DEVICE_ID_HP_CISSE
,
0x103C
,
0x3249
},
{
PCI_VENDOR_ID_HP
,
PCI_DEVICE_ID_HP_CISSE
,
0x103C
,
0x3249
},
{
PCI_VENDOR_ID_HP
,
PCI_DEVICE_ID_HP_CISSE
,
0x103C
,
0x324A
},
{
PCI_VENDOR_ID_HP
,
PCI_DEVICE_ID_HP_CISSE
,
0x103C
,
0x324A
},
{
PCI_VENDOR_ID_HP
,
PCI_DEVICE_ID_HP_CISSE
,
0x103C
,
0x324B
},
{
PCI_VENDOR_ID_HP
,
PCI_DEVICE_ID_HP_CISSE
,
0x103C
,
0x324B
},
{
PCI_VENDOR_ID_HP
,
PCI_ANY_ID
,
PCI_ANY_ID
,
PCI_ANY_ID
,
PCI_CLASS_STORAGE_RAID
<<
8
,
0xffff
<<
8
,
0
},
{
0
,}
{
0
,}
};
};
...
@@ -123,8 +127,6 @@ static struct board_type products[] = {
...
@@ -123,8 +127,6 @@ static struct board_type products[] = {
{
0x409D0E11
,
"Smart Array 6400 EM"
,
&
SA5_access
},
{
0x409D0E11
,
"Smart Array 6400 EM"
,
&
SA5_access
},
{
0x40910E11
,
"Smart Array 6i"
,
&
SA5_access
},
{
0x40910E11
,
"Smart Array 6i"
,
&
SA5_access
},
{
0x3225103C
,
"Smart Array P600"
,
&
SA5_access
},
{
0x3225103C
,
"Smart Array P600"
,
&
SA5_access
},
{
0x3223103C
,
"Smart Array P800"
,
&
SA5_access
},
{
0x3234103C
,
"Smart Array P400"
,
&
SA5_access
},
{
0x3235103C
,
"Smart Array P400i"
,
&
SA5_access
},
{
0x3235103C
,
"Smart Array P400i"
,
&
SA5_access
},
{
0x3211103C
,
"Smart Array E200i"
,
&
SA5_access
},
{
0x3211103C
,
"Smart Array E200i"
,
&
SA5_access
},
{
0x3212103C
,
"Smart Array E200"
,
&
SA5_access
},
{
0x3212103C
,
"Smart Array E200"
,
&
SA5_access
},
...
@@ -132,6 +134,10 @@ static struct board_type products[] = {
...
@@ -132,6 +134,10 @@ static struct board_type products[] = {
{
0x3214103C
,
"Smart Array E200i"
,
&
SA5_access
},
{
0x3214103C
,
"Smart Array E200i"
,
&
SA5_access
},
{
0x3215103C
,
"Smart Array E200i"
,
&
SA5_access
},
{
0x3215103C
,
"Smart Array E200i"
,
&
SA5_access
},
{
0x3237103C
,
"Smart Array E500"
,
&
SA5_access
},
{
0x3237103C
,
"Smart Array E500"
,
&
SA5_access
},
/* controllers below this line are also supported by the hpsa driver. */
#define HPSA_BOUNDARY 0x3223103C
{
0x3223103C
,
"Smart Array P800"
,
&
SA5_access
},
{
0x3234103C
,
"Smart Array P400"
,
&
SA5_access
},
{
0x323D103C
,
"Smart Array P700m"
,
&
SA5_access
},
{
0x323D103C
,
"Smart Array P700m"
,
&
SA5_access
},
{
0x3241103C
,
"Smart Array P212"
,
&
SA5_access
},
{
0x3241103C
,
"Smart Array P212"
,
&
SA5_access
},
{
0x3243103C
,
"Smart Array P410"
,
&
SA5_access
},
{
0x3243103C
,
"Smart Array P410"
,
&
SA5_access
},
...
@@ -140,7 +146,6 @@ static struct board_type products[] = {
...
@@ -140,7 +146,6 @@ static struct board_type products[] = {
{
0x3249103C
,
"Smart Array P812"
,
&
SA5_access
},
{
0x3249103C
,
"Smart Array P812"
,
&
SA5_access
},
{
0x324A103C
,
"Smart Array P712m"
,
&
SA5_access
},
{
0x324A103C
,
"Smart Array P712m"
,
&
SA5_access
},
{
0x324B103C
,
"Smart Array P711m"
,
&
SA5_access
},
{
0x324B103C
,
"Smart Array P711m"
,
&
SA5_access
},
{
0xFFFF103C
,
"Unknown Smart Array"
,
&
SA5_access
},
};
};
/* How long to wait (in milliseconds) for board to go into simple mode */
/* How long to wait (in milliseconds) for board to go into simple mode */
...
@@ -3754,7 +3759,27 @@ static int __devinit cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev)
...
@@ -3754,7 +3759,27 @@ static int __devinit cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev)
__u64
cfg_offset
;
__u64
cfg_offset
;
__u32
cfg_base_addr
;
__u32
cfg_base_addr
;
__u64
cfg_base_addr_index
;
__u64
cfg_base_addr_index
;
int
i
,
err
;
int
i
,
prod_index
,
err
;
subsystem_vendor_id
=
pdev
->
subsystem_vendor
;
subsystem_device_id
=
pdev
->
subsystem_device
;
board_id
=
(((
__u32
)
(
subsystem_device_id
<<
16
)
&
0xffff0000
)
|
subsystem_vendor_id
);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
products
);
i
++
)
{
/* Stand aside for hpsa driver on request */
if
(
cciss_allow_hpsa
&&
products
[
i
].
board_id
==
HPSA_BOUNDARY
)
return
-
ENODEV
;
if
(
board_id
==
products
[
i
].
board_id
)
break
;
}
prod_index
=
i
;
if
(
prod_index
==
ARRAY_SIZE
(
products
))
{
dev_warn
(
&
pdev
->
dev
,
"unrecognized board ID: 0x%08lx, ignoring.
\n
"
,
(
unsigned
long
)
board_id
);
return
-
ENODEV
;
}
/* check to see if controller has been disabled */
/* check to see if controller has been disabled */
/* BEFORE trying to enable it */
/* BEFORE trying to enable it */
...
@@ -3778,11 +3803,6 @@ static int __devinit cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev)
...
@@ -3778,11 +3803,6 @@ static int __devinit cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev)
return
err
;
return
err
;
}
}
subsystem_vendor_id
=
pdev
->
subsystem_vendor
;
subsystem_device_id
=
pdev
->
subsystem_device
;
board_id
=
(((
__u32
)
(
subsystem_device_id
<<
16
)
&
0xffff0000
)
|
subsystem_vendor_id
);
#ifdef CCISS_DEBUG
#ifdef CCISS_DEBUG
printk
(
"command = %x
\n
"
,
command
);
printk
(
"command = %x
\n
"
,
command
);
printk
(
"irq = %x
\n
"
,
pdev
->
irq
);
printk
(
"irq = %x
\n
"
,
pdev
->
irq
);
...
@@ -3868,14 +3888,9 @@ static int __devinit cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev)
...
@@ -3868,14 +3888,9 @@ static int __devinit cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev)
* leave a little room for ioctl calls.
* leave a little room for ioctl calls.
*/
*/
c
->
max_commands
=
readl
(
&
(
c
->
cfgtable
->
CmdsOutMax
));
c
->
max_commands
=
readl
(
&
(
c
->
cfgtable
->
CmdsOutMax
));
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
products
);
i
++
)
{
c
->
product_name
=
products
[
prod_index
].
product_name
;
if
(
board_id
==
products
[
i
].
board_id
)
{
c
->
access
=
*
(
products
[
prod_index
].
access
);
c
->
product_name
=
products
[
i
].
product_name
;
c
->
nr_cmds
=
c
->
max_commands
-
4
;
c
->
access
=
*
(
products
[
i
].
access
);
c
->
nr_cmds
=
c
->
max_commands
-
4
;
break
;
}
}
if
((
readb
(
&
c
->
cfgtable
->
Signature
[
0
])
!=
'C'
)
||
if
((
readb
(
&
c
->
cfgtable
->
Signature
[
0
])
!=
'C'
)
||
(
readb
(
&
c
->
cfgtable
->
Signature
[
1
])
!=
'I'
)
||
(
readb
(
&
c
->
cfgtable
->
Signature
[
1
])
!=
'I'
)
||
(
readb
(
&
c
->
cfgtable
->
Signature
[
2
])
!=
'S'
)
||
(
readb
(
&
c
->
cfgtable
->
Signature
[
2
])
!=
'S'
)
||
...
@@ -3884,27 +3899,6 @@ static int __devinit cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev)
...
@@ -3884,27 +3899,6 @@ static int __devinit cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev)
err
=
-
ENODEV
;
err
=
-
ENODEV
;
goto
err_out_free_res
;
goto
err_out_free_res
;
}
}
/* We didn't find the controller in our list. We know the
* signature is valid. If it's an HP device let's try to
* bind to the device and fire it up. Otherwise we bail.
*/
if
(
i
==
ARRAY_SIZE
(
products
))
{
if
(
subsystem_vendor_id
==
PCI_VENDOR_ID_HP
)
{
c
->
product_name
=
products
[
i
-
1
].
product_name
;
c
->
access
=
*
(
products
[
i
-
1
].
access
);
c
->
nr_cmds
=
c
->
max_commands
-
4
;
printk
(
KERN_WARNING
"cciss: This is an unknown "
"Smart Array controller.
\n
"
"cciss: Please update to the latest driver "
"available from www.hp.com.
\n
"
);
}
else
{
printk
(
KERN_WARNING
"cciss: Sorry, I don't know how"
" to access the Smart Array controller %08lx
\n
"
,
(
unsigned
long
)
board_id
);
err
=
-
ENODEV
;
goto
err_out_free_res
;
}
}
#ifdef CONFIG_X86
#ifdef CONFIG_X86
{
{
/* Need to enable prefetch in the SCSI core for 6400 in x86 */
/* Need to enable prefetch in the SCSI core for 6400 in x86 */
...
@@ -4254,7 +4248,7 @@ static int __devinit cciss_init_one(struct pci_dev *pdev,
...
@@ -4254,7 +4248,7 @@ static int __devinit cciss_init_one(struct pci_dev *pdev,
mutex_init
(
&
hba
[
i
]
->
busy_shutting_down
);
mutex_init
(
&
hba
[
i
]
->
busy_shutting_down
);
if
(
cciss_pci_init
(
hba
[
i
],
pdev
)
!=
0
)
if
(
cciss_pci_init
(
hba
[
i
],
pdev
)
!=
0
)
goto
clean
0
;
goto
clean
_no_release_regions
;
sprintf
(
hba
[
i
]
->
devname
,
"cciss%d"
,
i
);
sprintf
(
hba
[
i
]
->
devname
,
"cciss%d"
,
i
);
hba
[
i
]
->
ctlr
=
i
;
hba
[
i
]
->
ctlr
=
i
;
...
@@ -4391,13 +4385,14 @@ static int __devinit cciss_init_one(struct pci_dev *pdev,
...
@@ -4391,13 +4385,14 @@ static int __devinit cciss_init_one(struct pci_dev *pdev,
clean1:
clean1:
cciss_destroy_hba_sysfs_entry
(
hba
[
i
]);
cciss_destroy_hba_sysfs_entry
(
hba
[
i
]);
clean0:
clean0:
pci_release_regions
(
pdev
);
clean_no_release_regions:
hba
[
i
]
->
busy_initializing
=
0
;
hba
[
i
]
->
busy_initializing
=
0
;
/*
/*
* Deliberately omit pci_disable_device(): it does something nasty to
* Deliberately omit pci_disable_device(): it does something nasty to
* Smart Array controllers that pci_enable_device does not undo
* Smart Array controllers that pci_enable_device does not undo
*/
*/
pci_release_regions
(
pdev
);
pci_set_drvdata
(
pdev
,
NULL
);
pci_set_drvdata
(
pdev
,
NULL
);
free_hba
(
i
);
free_hba
(
i
);
return
-
1
;
return
-
1
;
...
...
drivers/md/dm.c
View file @
c30f3343
...
@@ -130,7 +130,7 @@ struct mapped_device {
...
@@ -130,7 +130,7 @@ struct mapped_device {
/*
/*
* A list of ios that arrived while we were suspended.
* A list of ios that arrived while we were suspended.
*/
*/
atomic_t
pending
;
atomic_t
pending
[
2
]
;
wait_queue_head_t
wait
;
wait_queue_head_t
wait
;
struct
work_struct
work
;
struct
work_struct
work
;
struct
bio_list
deferred
;
struct
bio_list
deferred
;
...
@@ -453,13 +453,14 @@ static void start_io_acct(struct dm_io *io)
...
@@ -453,13 +453,14 @@ static void start_io_acct(struct dm_io *io)
{
{
struct
mapped_device
*
md
=
io
->
md
;
struct
mapped_device
*
md
=
io
->
md
;
int
cpu
;
int
cpu
;
int
rw
=
bio_data_dir
(
io
->
bio
);
io
->
start_time
=
jiffies
;
io
->
start_time
=
jiffies
;
cpu
=
part_stat_lock
();
cpu
=
part_stat_lock
();
part_round_stats
(
cpu
,
&
dm_disk
(
md
)
->
part0
);
part_round_stats
(
cpu
,
&
dm_disk
(
md
)
->
part0
);
part_stat_unlock
();
part_stat_unlock
();
dm_disk
(
md
)
->
part0
.
in_flight
=
atomic_inc_return
(
&
md
->
pending
);
dm_disk
(
md
)
->
part0
.
in_flight
[
rw
]
=
atomic_inc_return
(
&
md
->
pending
[
rw
]
);
}
}
static
void
end_io_acct
(
struct
dm_io
*
io
)
static
void
end_io_acct
(
struct
dm_io
*
io
)
...
@@ -479,8 +480,9 @@ static void end_io_acct(struct dm_io *io)
...
@@ -479,8 +480,9 @@ static void end_io_acct(struct dm_io *io)
* After this is decremented the bio must not be touched if it is
* After this is decremented the bio must not be touched if it is
* a barrier.
* a barrier.
*/
*/
dm_disk
(
md
)
->
part0
.
in_flight
=
pending
=
dm_disk
(
md
)
->
part0
.
in_flight
[
rw
]
=
pending
=
atomic_dec_return
(
&
md
->
pending
);
atomic_dec_return
(
&
md
->
pending
[
rw
]);
pending
+=
atomic_read
(
&
md
->
pending
[
rw
^
0x1
]);
/* nudge anyone waiting on suspend queue */
/* nudge anyone waiting on suspend queue */
if
(
!
pending
)
if
(
!
pending
)
...
@@ -1785,7 +1787,8 @@ static struct mapped_device *alloc_dev(int minor)
...
@@ -1785,7 +1787,8 @@ static struct mapped_device *alloc_dev(int minor)
if
(
!
md
->
disk
)
if
(
!
md
->
disk
)
goto
bad_disk
;
goto
bad_disk
;
atomic_set
(
&
md
->
pending
,
0
);
atomic_set
(
&
md
->
pending
[
0
],
0
);
atomic_set
(
&
md
->
pending
[
1
],
0
);
init_waitqueue_head
(
&
md
->
wait
);
init_waitqueue_head
(
&
md
->
wait
);
INIT_WORK
(
&
md
->
work
,
dm_wq_work
);
INIT_WORK
(
&
md
->
work
,
dm_wq_work
);
init_waitqueue_head
(
&
md
->
eventq
);
init_waitqueue_head
(
&
md
->
eventq
);
...
@@ -2088,7 +2091,8 @@ static int dm_wait_for_completion(struct mapped_device *md, int interruptible)
...
@@ -2088,7 +2091,8 @@ static int dm_wait_for_completion(struct mapped_device *md, int interruptible)
break
;
break
;
}
}
spin_unlock_irqrestore
(
q
->
queue_lock
,
flags
);
spin_unlock_irqrestore
(
q
->
queue_lock
,
flags
);
}
else
if
(
!
atomic_read
(
&
md
->
pending
))
}
else
if
(
!
atomic_read
(
&
md
->
pending
[
0
])
&&
!
atomic_read
(
&
md
->
pending
[
1
]))
break
;
break
;
if
(
interruptible
==
TASK_INTERRUPTIBLE
&&
if
(
interruptible
==
TASK_INTERRUPTIBLE
&&
...
...
fs/partitions/check.c
View file @
c30f3343
...
@@ -248,11 +248,19 @@ ssize_t part_stat_show(struct device *dev,
...
@@ -248,11 +248,19 @@ ssize_t part_stat_show(struct device *dev,
part_stat_read
(
p
,
merges
[
WRITE
]),
part_stat_read
(
p
,
merges
[
WRITE
]),
(
unsigned
long
long
)
part_stat_read
(
p
,
sectors
[
WRITE
]),
(
unsigned
long
long
)
part_stat_read
(
p
,
sectors
[
WRITE
]),
jiffies_to_msecs
(
part_stat_read
(
p
,
ticks
[
WRITE
])),
jiffies_to_msecs
(
part_stat_read
(
p
,
ticks
[
WRITE
])),
p
->
in_flight
,
p
art_in_flight
(
p
)
,
jiffies_to_msecs
(
part_stat_read
(
p
,
io_ticks
)),
jiffies_to_msecs
(
part_stat_read
(
p
,
io_ticks
)),
jiffies_to_msecs
(
part_stat_read
(
p
,
time_in_queue
)));
jiffies_to_msecs
(
part_stat_read
(
p
,
time_in_queue
)));
}
}
ssize_t
part_inflight_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
struct
hd_struct
*
p
=
dev_to_part
(
dev
);
return
sprintf
(
buf
,
"%8u %8u
\n
"
,
p
->
in_flight
[
0
],
p
->
in_flight
[
1
]);
}
#ifdef CONFIG_FAIL_MAKE_REQUEST
#ifdef CONFIG_FAIL_MAKE_REQUEST
ssize_t
part_fail_show
(
struct
device
*
dev
,
ssize_t
part_fail_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
struct
device_attribute
*
attr
,
char
*
buf
)
...
@@ -281,6 +289,7 @@ static DEVICE_ATTR(start, S_IRUGO, part_start_show, NULL);
...
@@ -281,6 +289,7 @@ static DEVICE_ATTR(start, S_IRUGO, part_start_show, NULL);
static
DEVICE_ATTR
(
size
,
S_IRUGO
,
part_size_show
,
NULL
);
static
DEVICE_ATTR
(
size
,
S_IRUGO
,
part_size_show
,
NULL
);
static
DEVICE_ATTR
(
alignment_offset
,
S_IRUGO
,
part_alignment_offset_show
,
NULL
);
static
DEVICE_ATTR
(
alignment_offset
,
S_IRUGO
,
part_alignment_offset_show
,
NULL
);
static
DEVICE_ATTR
(
stat
,
S_IRUGO
,
part_stat_show
,
NULL
);
static
DEVICE_ATTR
(
stat
,
S_IRUGO
,
part_stat_show
,
NULL
);
static
DEVICE_ATTR
(
inflight
,
S_IRUGO
,
part_inflight_show
,
NULL
);
#ifdef CONFIG_FAIL_MAKE_REQUEST
#ifdef CONFIG_FAIL_MAKE_REQUEST
static
struct
device_attribute
dev_attr_fail
=
static
struct
device_attribute
dev_attr_fail
=
__ATTR
(
make
-
it
-
fail
,
S_IRUGO
|
S_IWUSR
,
part_fail_show
,
part_fail_store
);
__ATTR
(
make
-
it
-
fail
,
S_IRUGO
|
S_IWUSR
,
part_fail_show
,
part_fail_store
);
...
@@ -292,6 +301,7 @@ static struct attribute *part_attrs[] = {
...
@@ -292,6 +301,7 @@ static struct attribute *part_attrs[] = {
&
dev_attr_size
.
attr
,
&
dev_attr_size
.
attr
,
&
dev_attr_alignment_offset
.
attr
,
&
dev_attr_alignment_offset
.
attr
,
&
dev_attr_stat
.
attr
,
&
dev_attr_stat
.
attr
,
&
dev_attr_inflight
.
attr
,
#ifdef CONFIG_FAIL_MAKE_REQUEST
#ifdef CONFIG_FAIL_MAKE_REQUEST
&
dev_attr_fail
.
attr
,
&
dev_attr_fail
.
attr
,
#endif
#endif
...
...
include/linux/blkdev.h
View file @
c30f3343
...
@@ -1172,11 +1172,7 @@ static inline void put_dev_sector(Sector p)
...
@@ -1172,11 +1172,7 @@ static inline void put_dev_sector(Sector p)
}
}
struct
work_struct
;
struct
work_struct
;
struct
delayed_work
;
int
kblockd_schedule_work
(
struct
request_queue
*
q
,
struct
work_struct
*
work
);
int
kblockd_schedule_work
(
struct
request_queue
*
q
,
struct
work_struct
*
work
);
int
kblockd_schedule_delayed_work
(
struct
request_queue
*
q
,
struct
delayed_work
*
work
,
unsigned
long
delay
);
#define MODULE_ALIAS_BLOCKDEV(major,minor) \
#define MODULE_ALIAS_BLOCKDEV(major,minor) \
MODULE_ALIAS("block-major-" __stringify(major) "-" __stringify(minor))
MODULE_ALIAS("block-major-" __stringify(major) "-" __stringify(minor))
...
...
include/linux/genhd.h
View file @
c30f3343
...
@@ -98,7 +98,7 @@ struct hd_struct {
...
@@ -98,7 +98,7 @@ struct hd_struct {
int
make_it_fail
;
int
make_it_fail
;
#endif
#endif
unsigned
long
stamp
;
unsigned
long
stamp
;
int
in_flight
;
int
in_flight
[
2
]
;
#ifdef CONFIG_SMP
#ifdef CONFIG_SMP
struct
disk_stats
*
dkstats
;
struct
disk_stats
*
dkstats
;
#else
#else
...
@@ -322,18 +322,23 @@ static inline void free_part_stats(struct hd_struct *part)
...
@@ -322,18 +322,23 @@ static inline void free_part_stats(struct hd_struct *part)
#define part_stat_sub(cpu, gendiskp, field, subnd) \
#define part_stat_sub(cpu, gendiskp, field, subnd) \
part_stat_add(cpu, gendiskp, field, -subnd)
part_stat_add(cpu, gendiskp, field, -subnd)
static
inline
void
part_inc_in_flight
(
struct
hd_struct
*
part
)
static
inline
void
part_inc_in_flight
(
struct
hd_struct
*
part
,
int
rw
)
{
{
part
->
in_flight
++
;
part
->
in_flight
[
rw
]
++
;
if
(
part
->
partno
)
if
(
part
->
partno
)
part_to_disk
(
part
)
->
part0
.
in_flight
++
;
part_to_disk
(
part
)
->
part0
.
in_flight
[
rw
]
++
;
}
}
static
inline
void
part_dec_in_flight
(
struct
hd_struct
*
part
)
static
inline
void
part_dec_in_flight
(
struct
hd_struct
*
part
,
int
rw
)
{
{
part
->
in_flight
--
;
part
->
in_flight
[
rw
]
--
;
if
(
part
->
partno
)
if
(
part
->
partno
)
part_to_disk
(
part
)
->
part0
.
in_flight
--
;
part_to_disk
(
part
)
->
part0
.
in_flight
[
rw
]
--
;
}
static
inline
int
part_in_flight
(
struct
hd_struct
*
part
)
{
return
part
->
in_flight
[
0
]
+
part
->
in_flight
[
1
];
}
}
/* block/blk-core.c */
/* block/blk-core.c */
...
@@ -546,6 +551,8 @@ extern ssize_t part_size_show(struct device *dev,
...
@@ -546,6 +551,8 @@ extern ssize_t part_size_show(struct device *dev,
struct
device_attribute
*
attr
,
char
*
buf
);
struct
device_attribute
*
attr
,
char
*
buf
);
extern
ssize_t
part_stat_show
(
struct
device
*
dev
,
extern
ssize_t
part_stat_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
);
struct
device_attribute
*
attr
,
char
*
buf
);
extern
ssize_t
part_inflight_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
);
#ifdef CONFIG_FAIL_MAKE_REQUEST
#ifdef CONFIG_FAIL_MAKE_REQUEST
extern
ssize_t
part_fail_show
(
struct
device
*
dev
,
extern
ssize_t
part_fail_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
);
struct
device_attribute
*
attr
,
char
*
buf
);
...
...
kernel/sched.c
View file @
c30f3343
...
@@ -6720,9 +6720,6 @@ EXPORT_SYMBOL(yield);
...
@@ -6720,9 +6720,6 @@ EXPORT_SYMBOL(yield);
/*
/*
* This task is about to go to sleep on IO. Increment rq->nr_iowait so
* This task is about to go to sleep on IO. Increment rq->nr_iowait so
* that process accounting knows that this is a task in IO wait state.
* that process accounting knows that this is a task in IO wait state.
*
* But don't do that if it is a deliberate, throttling IO wait (this task
* has set its backing_dev_info: the queue against which it should throttle)
*/
*/
void
__sched
io_schedule
(
void
)
void
__sched
io_schedule
(
void
)
{
{
...
...
mm/backing-dev.c
View file @
c30f3343
...
@@ -92,7 +92,7 @@ static int bdi_debug_stats_show(struct seq_file *m, void *v)
...
@@ -92,7 +92,7 @@ static int bdi_debug_stats_show(struct seq_file *m, void *v)
"BdiDirtyThresh: %8lu kB
\n
"
"BdiDirtyThresh: %8lu kB
\n
"
"DirtyThresh: %8lu kB
\n
"
"DirtyThresh: %8lu kB
\n
"
"BackgroundThresh: %8lu kB
\n
"
"BackgroundThresh: %8lu kB
\n
"
"Write
Back threads:
%8lu
\n
"
"Write
backThreads:
%8lu
\n
"
"b_dirty: %8lu
\n
"
"b_dirty: %8lu
\n
"
"b_io: %8lu
\n
"
"b_io: %8lu
\n
"
"b_more_io: %8lu
\n
"
"b_more_io: %8lu
\n
"
...
...
mm/page-writeback.c
View file @
c30f3343
...
@@ -566,7 +566,8 @@ static void balance_dirty_pages(struct address_space *mapping,
...
@@ -566,7 +566,8 @@ static void balance_dirty_pages(struct address_space *mapping,
if
(
pages_written
>=
write_chunk
)
if
(
pages_written
>=
write_chunk
)
break
;
/* We've done our duty */
break
;
/* We've done our duty */
schedule_timeout_interruptible
(
pause
);
__set_current_state
(
TASK_INTERRUPTIBLE
);
io_schedule_timeout
(
pause
);
/*
/*
* Increase the delay for each loop, up to our previous
* Increase the delay for each loop, up to our previous
...
...
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