Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
e9ccb945
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
e9ccb945
编写于
7月 20, 2016
作者:
M
Mike Snitzer
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'jens/for-4.8/core' into dm-4.8
DM's DAX support depends on block core's newly added QUEUE_FLAG_DAX.
上级
2a0fbffb
72ef799b
变更
19
隐藏空白更改
内联
并排
Showing
19 changed file
with
93 addition
and
40 deletion
+93
-40
Documentation/block/queue-sysfs.txt
Documentation/block/queue-sysfs.txt
+1
-1
block/bio-integrity.c
block/bio-integrity.c
+1
-0
block/blk-cgroup.c
block/blk-cgroup.c
+2
-2
block/blk-exec.c
block/blk-exec.c
+1
-1
block/blk-merge.c
block/blk-merge.c
+6
-0
block/blk-sysfs.c
block/blk-sysfs.c
+11
-0
block/cfq-iosched.c
block/cfq-iosched.c
+25
-8
block/deadline-iosched.c
block/deadline-iosched.c
+4
-3
block/elevator.c
block/elevator.c
+11
-11
block/partition-generic.c
block/partition-generic.c
+0
-3
block/partitions/atari.c
block/partitions/atari.c
+7
-0
drivers/block/brd.c
drivers/block/brd.c
+3
-1
drivers/nvdimm/pmem.c
drivers/nvdimm/pmem.c
+1
-0
drivers/s390/block/dcssblk.c
drivers/s390/block/dcssblk.c
+1
-0
fs/block_dev.c
fs/block_dev.c
+3
-2
fs/btrfs/volumes.c
fs/btrfs/volumes.c
+1
-1
include/linux/blkdev.h
include/linux/blkdev.h
+3
-1
include/linux/elevator.h
include/linux/elevator.h
+8
-3
kernel/trace/blktrace.c
kernel/trace/blktrace.c
+4
-3
未找到文件。
Documentation/block/queue-sysfs.txt
浏览文件 @
e9ccb945
...
@@ -53,7 +53,7 @@ disk.
...
@@ -53,7 +53,7 @@ disk.
logical_block_size (RO)
logical_block_size (RO)
-----------------------
-----------------------
This is the logcal block size of the device, in bytes.
This is the log
i
cal block size of the device, in bytes.
max_hw_sectors_kb (RO)
max_hw_sectors_kb (RO)
----------------------
----------------------
...
...
block/bio-integrity.c
浏览文件 @
e9ccb945
...
@@ -26,6 +26,7 @@
...
@@ -26,6 +26,7 @@
#include <linux/bio.h>
#include <linux/bio.h>
#include <linux/workqueue.h>
#include <linux/workqueue.h>
#include <linux/slab.h>
#include <linux/slab.h>
#include "blk.h"
#define BIP_INLINE_VECS 4
#define BIP_INLINE_VECS 4
...
...
block/blk-cgroup.c
浏览文件 @
e9ccb945
...
@@ -905,7 +905,7 @@ static int blkcg_print_stat(struct seq_file *sf, void *v)
...
@@ -905,7 +905,7 @@ static int blkcg_print_stat(struct seq_file *sf, void *v)
return
0
;
return
0
;
}
}
struct
cftype
blkcg_files
[]
=
{
st
atic
st
ruct
cftype
blkcg_files
[]
=
{
{
{
.
name
=
"stat"
,
.
name
=
"stat"
,
.
flags
=
CFTYPE_NOT_ON_ROOT
,
.
flags
=
CFTYPE_NOT_ON_ROOT
,
...
@@ -914,7 +914,7 @@ struct cftype blkcg_files[] = {
...
@@ -914,7 +914,7 @@ struct cftype blkcg_files[] = {
{
}
/* terminate */
{
}
/* terminate */
};
};
struct
cftype
blkcg_legacy_files
[]
=
{
st
atic
st
ruct
cftype
blkcg_legacy_files
[]
=
{
{
{
.
name
=
"reset_stats"
,
.
name
=
"reset_stats"
,
.
write_u64
=
blkcg_reset_stats
,
.
write_u64
=
blkcg_reset_stats
,
...
...
block/blk-exec.c
浏览文件 @
e9ccb945
...
@@ -62,7 +62,7 @@ void blk_execute_rq_nowait(struct request_queue *q, struct gendisk *bd_disk,
...
@@ -62,7 +62,7 @@ void blk_execute_rq_nowait(struct request_queue *q, struct gendisk *bd_disk,
/*
/*
* don't check dying flag for MQ because the request won't
* don't check dying flag for MQ because the request won't
* be re
su
ed after dying flag is set
* be re
us
ed after dying flag is set
*/
*/
if
(
q
->
mq_ops
)
{
if
(
q
->
mq_ops
)
{
blk_mq_insert_request
(
rq
,
at_head
,
true
,
false
);
blk_mq_insert_request
(
rq
,
at_head
,
true
,
false
);
...
...
block/blk-merge.c
浏览文件 @
e9ccb945
...
@@ -744,6 +744,12 @@ int attempt_front_merge(struct request_queue *q, struct request *rq)
...
@@ -744,6 +744,12 @@ int attempt_front_merge(struct request_queue *q, struct request *rq)
int
blk_attempt_req_merge
(
struct
request_queue
*
q
,
struct
request
*
rq
,
int
blk_attempt_req_merge
(
struct
request_queue
*
q
,
struct
request
*
rq
,
struct
request
*
next
)
struct
request
*
next
)
{
{
struct
elevator_queue
*
e
=
q
->
elevator
;
if
(
e
->
type
->
ops
.
elevator_allow_rq_merge_fn
)
if
(
!
e
->
type
->
ops
.
elevator_allow_rq_merge_fn
(
q
,
rq
,
next
))
return
0
;
return
attempt_merge
(
q
,
rq
,
next
);
return
attempt_merge
(
q
,
rq
,
next
);
}
}
...
...
block/blk-sysfs.c
浏览文件 @
e9ccb945
...
@@ -379,6 +379,11 @@ static ssize_t queue_wc_store(struct request_queue *q, const char *page,
...
@@ -379,6 +379,11 @@ static ssize_t queue_wc_store(struct request_queue *q, const char *page,
return
count
;
return
count
;
}
}
static
ssize_t
queue_dax_show
(
struct
request_queue
*
q
,
char
*
page
)
{
return
queue_var_show
(
blk_queue_dax
(
q
),
page
);
}
static
struct
queue_sysfs_entry
queue_requests_entry
=
{
static
struct
queue_sysfs_entry
queue_requests_entry
=
{
.
attr
=
{.
name
=
"nr_requests"
,
.
mode
=
S_IRUGO
|
S_IWUSR
},
.
attr
=
{.
name
=
"nr_requests"
,
.
mode
=
S_IRUGO
|
S_IWUSR
},
.
show
=
queue_requests_show
,
.
show
=
queue_requests_show
,
...
@@ -516,6 +521,11 @@ static struct queue_sysfs_entry queue_wc_entry = {
...
@@ -516,6 +521,11 @@ static struct queue_sysfs_entry queue_wc_entry = {
.
store
=
queue_wc_store
,
.
store
=
queue_wc_store
,
};
};
static
struct
queue_sysfs_entry
queue_dax_entry
=
{
.
attr
=
{.
name
=
"dax"
,
.
mode
=
S_IRUGO
},
.
show
=
queue_dax_show
,
};
static
struct
attribute
*
default_attrs
[]
=
{
static
struct
attribute
*
default_attrs
[]
=
{
&
queue_requests_entry
.
attr
,
&
queue_requests_entry
.
attr
,
&
queue_ra_entry
.
attr
,
&
queue_ra_entry
.
attr
,
...
@@ -542,6 +552,7 @@ static struct attribute *default_attrs[] = {
...
@@ -542,6 +552,7 @@ static struct attribute *default_attrs[] = {
&
queue_random_entry
.
attr
,
&
queue_random_entry
.
attr
,
&
queue_poll_entry
.
attr
,
&
queue_poll_entry
.
attr
,
&
queue_wc_entry
.
attr
,
&
queue_wc_entry
.
attr
,
&
queue_dax_entry
.
attr
,
NULL
,
NULL
,
};
};
...
...
block/cfq-iosched.c
浏览文件 @
e9ccb945
...
@@ -132,7 +132,7 @@ struct cfq_queue {
...
@@ -132,7 +132,7 @@ struct cfq_queue {
/* time when first request from queue completed and slice started. */
/* time when first request from queue completed and slice started. */
u64
slice_start
;
u64
slice_start
;
u64
slice_end
;
u64
slice_end
;
u
64
slice_resid
;
s
64
slice_resid
;
/* pending priority requests */
/* pending priority requests */
int
prio_pending
;
int
prio_pending
;
...
@@ -1463,7 +1463,8 @@ static inline u64 cfq_cfqq_slice_usage(struct cfq_queue *cfqq,
...
@@ -1463,7 +1463,8 @@ static inline u64 cfq_cfqq_slice_usage(struct cfq_queue *cfqq,
* a single request on seeky media and cause lots of seek time
* a single request on seeky media and cause lots of seek time
* and group will never know it.
* and group will never know it.
*/
*/
slice_used
=
max_t
(
u64
,
(
now
-
cfqq
->
dispatch_start
),
1
);
slice_used
=
max_t
(
u64
,
(
now
-
cfqq
->
dispatch_start
),
jiffies_to_nsecs
(
1
));
}
else
{
}
else
{
slice_used
=
now
-
cfqq
->
slice_start
;
slice_used
=
now
-
cfqq
->
slice_start
;
if
(
slice_used
>
cfqq
->
allocated_slice
)
{
if
(
slice_used
>
cfqq
->
allocated_slice
)
{
...
@@ -2543,7 +2544,7 @@ static int cfq_merge(struct request_queue *q, struct request **req,
...
@@ -2543,7 +2544,7 @@ static int cfq_merge(struct request_queue *q, struct request **req,
struct
request
*
__rq
;
struct
request
*
__rq
;
__rq
=
cfq_find_rq_fmerge
(
cfqd
,
bio
);
__rq
=
cfq_find_rq_fmerge
(
cfqd
,
bio
);
if
(
__rq
&&
elv_
rq
_merge_ok
(
__rq
,
bio
))
{
if
(
__rq
&&
elv_
bio
_merge_ok
(
__rq
,
bio
))
{
*
req
=
__rq
;
*
req
=
__rq
;
return
ELEVATOR_FRONT_MERGE
;
return
ELEVATOR_FRONT_MERGE
;
}
}
...
@@ -2600,8 +2601,8 @@ cfq_merged_requests(struct request_queue *q, struct request *rq,
...
@@ -2600,8 +2601,8 @@ cfq_merged_requests(struct request_queue *q, struct request *rq,
cfq_del_cfqq_rr
(
cfqd
,
cfqq
);
cfq_del_cfqq_rr
(
cfqd
,
cfqq
);
}
}
static
int
cfq_allow_merge
(
struct
request_queue
*
q
,
struct
request
*
rq
,
static
int
cfq_allow_
bio_
merge
(
struct
request_queue
*
q
,
struct
request
*
rq
,
struct
bio
*
bio
)
struct
bio
*
bio
)
{
{
struct
cfq_data
*
cfqd
=
q
->
elevator
->
elevator_data
;
struct
cfq_data
*
cfqd
=
q
->
elevator
->
elevator_data
;
struct
cfq_io_cq
*
cic
;
struct
cfq_io_cq
*
cic
;
...
@@ -2625,6 +2626,12 @@ static int cfq_allow_merge(struct request_queue *q, struct request *rq,
...
@@ -2625,6 +2626,12 @@ static int cfq_allow_merge(struct request_queue *q, struct request *rq,
return
cfqq
==
RQ_CFQQ
(
rq
);
return
cfqq
==
RQ_CFQQ
(
rq
);
}
}
static
int
cfq_allow_rq_merge
(
struct
request_queue
*
q
,
struct
request
*
rq
,
struct
request
*
next
)
{
return
RQ_CFQQ
(
rq
)
==
RQ_CFQQ
(
next
);
}
static
inline
void
cfq_del_timer
(
struct
cfq_data
*
cfqd
,
struct
cfq_queue
*
cfqq
)
static
inline
void
cfq_del_timer
(
struct
cfq_data
*
cfqd
,
struct
cfq_queue
*
cfqq
)
{
{
hrtimer_try_to_cancel
(
&
cfqd
->
idle_slice_timer
);
hrtimer_try_to_cancel
(
&
cfqd
->
idle_slice_timer
);
...
@@ -2689,7 +2696,7 @@ __cfq_slice_expired(struct cfq_data *cfqd, struct cfq_queue *cfqq,
...
@@ -2689,7 +2696,7 @@ __cfq_slice_expired(struct cfq_data *cfqd, struct cfq_queue *cfqq,
cfqq
->
slice_resid
=
cfq_scaled_cfqq_slice
(
cfqd
,
cfqq
);
cfqq
->
slice_resid
=
cfq_scaled_cfqq_slice
(
cfqd
,
cfqq
);
else
else
cfqq
->
slice_resid
=
cfqq
->
slice_end
-
ktime_get_ns
();
cfqq
->
slice_resid
=
cfqq
->
slice_end
-
ktime_get_ns
();
cfq_log_cfqq
(
cfqd
,
cfqq
,
"resid=%ll
u
"
,
cfqq
->
slice_resid
);
cfq_log_cfqq
(
cfqd
,
cfqq
,
"resid=%ll
d
"
,
cfqq
->
slice_resid
);
}
}
cfq_group_served
(
cfqd
,
cfqq
->
cfqg
,
cfqq
);
cfq_group_served
(
cfqd
,
cfqq
->
cfqg
,
cfqq
);
...
@@ -4243,7 +4250,16 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq)
...
@@ -4243,7 +4250,16 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq)
cfqq_type
(
cfqq
));
cfqq_type
(
cfqq
));
st
->
ttime
.
last_end_request
=
now
;
st
->
ttime
.
last_end_request
=
now
;
if
(
!
(
rq
->
start_time
+
cfqd
->
cfq_fifo_expire
[
1
]
>
now
))
/*
* We have to do this check in jiffies since start_time is in
* jiffies and it is not trivial to convert to ns. If
* cfq_fifo_expire[1] ever comes close to 1 jiffie, this test
* will become problematic but so far we are fine (the default
* is 128 ms).
*/
if
(
!
time_after
(
rq
->
start_time
+
nsecs_to_jiffies
(
cfqd
->
cfq_fifo_expire
[
1
]),
jiffies
))
cfqd
->
last_delayed_sync
=
now
;
cfqd
->
last_delayed_sync
=
now
;
}
}
...
@@ -4811,7 +4827,8 @@ static struct elevator_type iosched_cfq = {
...
@@ -4811,7 +4827,8 @@ static struct elevator_type iosched_cfq = {
.
elevator_merge_fn
=
cfq_merge
,
.
elevator_merge_fn
=
cfq_merge
,
.
elevator_merged_fn
=
cfq_merged_request
,
.
elevator_merged_fn
=
cfq_merged_request
,
.
elevator_merge_req_fn
=
cfq_merged_requests
,
.
elevator_merge_req_fn
=
cfq_merged_requests
,
.
elevator_allow_merge_fn
=
cfq_allow_merge
,
.
elevator_allow_bio_merge_fn
=
cfq_allow_bio_merge
,
.
elevator_allow_rq_merge_fn
=
cfq_allow_rq_merge
,
.
elevator_bio_merged_fn
=
cfq_bio_merged
,
.
elevator_bio_merged_fn
=
cfq_bio_merged
,
.
elevator_dispatch_fn
=
cfq_dispatch_requests
,
.
elevator_dispatch_fn
=
cfq_dispatch_requests
,
.
elevator_add_req_fn
=
cfq_insert_request
,
.
elevator_add_req_fn
=
cfq_insert_request
,
...
...
block/deadline-iosched.c
浏览文件 @
e9ccb945
...
@@ -137,7 +137,7 @@ deadline_merge(struct request_queue *q, struct request **req, struct bio *bio)
...
@@ -137,7 +137,7 @@ deadline_merge(struct request_queue *q, struct request **req, struct bio *bio)
if
(
__rq
)
{
if
(
__rq
)
{
BUG_ON
(
sector
!=
blk_rq_pos
(
__rq
));
BUG_ON
(
sector
!=
blk_rq_pos
(
__rq
));
if
(
elv_
rq
_merge_ok
(
__rq
,
bio
))
{
if
(
elv_
bio
_merge_ok
(
__rq
,
bio
))
{
ret
=
ELEVATOR_FRONT_MERGE
;
ret
=
ELEVATOR_FRONT_MERGE
;
goto
out
;
goto
out
;
}
}
...
@@ -173,7 +173,8 @@ deadline_merged_requests(struct request_queue *q, struct request *req,
...
@@ -173,7 +173,8 @@ deadline_merged_requests(struct request_queue *q, struct request *req,
* and move into next position (next will be deleted) in fifo
* and move into next position (next will be deleted) in fifo
*/
*/
if
(
!
list_empty
(
&
req
->
queuelist
)
&&
!
list_empty
(
&
next
->
queuelist
))
{
if
(
!
list_empty
(
&
req
->
queuelist
)
&&
!
list_empty
(
&
next
->
queuelist
))
{
if
(
time_before
(
next
->
fifo_time
,
req
->
fifo_time
))
{
if
(
time_before
((
unsigned
long
)
next
->
fifo_time
,
(
unsigned
long
)
req
->
fifo_time
))
{
list_move
(
&
req
->
queuelist
,
&
next
->
queuelist
);
list_move
(
&
req
->
queuelist
,
&
next
->
queuelist
);
req
->
fifo_time
=
next
->
fifo_time
;
req
->
fifo_time
=
next
->
fifo_time
;
}
}
...
@@ -227,7 +228,7 @@ static inline int deadline_check_fifo(struct deadline_data *dd, int ddir)
...
@@ -227,7 +228,7 @@ static inline int deadline_check_fifo(struct deadline_data *dd, int ddir)
/*
/*
* rq is expired!
* rq is expired!
*/
*/
if
(
time_after_eq
(
jiffies
,
rq
->
fifo_time
))
if
(
time_after_eq
(
jiffies
,
(
unsigned
long
)
rq
->
fifo_time
))
return
1
;
return
1
;
return
0
;
return
0
;
...
...
block/elevator.c
浏览文件 @
e9ccb945
...
@@ -53,13 +53,13 @@ static LIST_HEAD(elv_list);
...
@@ -53,13 +53,13 @@ static LIST_HEAD(elv_list);
* Query io scheduler to see if the current process issuing bio may be
* Query io scheduler to see if the current process issuing bio may be
* merged with rq.
* merged with rq.
*/
*/
static
int
elv_iosched_allow_merge
(
struct
request
*
rq
,
struct
bio
*
bio
)
static
int
elv_iosched_allow_
bio_
merge
(
struct
request
*
rq
,
struct
bio
*
bio
)
{
{
struct
request_queue
*
q
=
rq
->
q
;
struct
request_queue
*
q
=
rq
->
q
;
struct
elevator_queue
*
e
=
q
->
elevator
;
struct
elevator_queue
*
e
=
q
->
elevator
;
if
(
e
->
type
->
ops
.
elevator_allow_merge_fn
)
if
(
e
->
type
->
ops
.
elevator_allow_
bio_
merge_fn
)
return
e
->
type
->
ops
.
elevator_allow_merge_fn
(
q
,
rq
,
bio
);
return
e
->
type
->
ops
.
elevator_allow_
bio_
merge_fn
(
q
,
rq
,
bio
);
return
1
;
return
1
;
}
}
...
@@ -67,17 +67,17 @@ static int elv_iosched_allow_merge(struct request *rq, struct bio *bio)
...
@@ -67,17 +67,17 @@ static int elv_iosched_allow_merge(struct request *rq, struct bio *bio)
/*
/*
* can we safely merge with this request?
* can we safely merge with this request?
*/
*/
bool
elv_
rq
_merge_ok
(
struct
request
*
rq
,
struct
bio
*
bio
)
bool
elv_
bio
_merge_ok
(
struct
request
*
rq
,
struct
bio
*
bio
)
{
{
if
(
!
blk_rq_merge_ok
(
rq
,
bio
))
if
(
!
blk_rq_merge_ok
(
rq
,
bio
))
return
0
;
return
false
;
if
(
!
elv_iosched_allow_merge
(
rq
,
bio
))
if
(
!
elv_iosched_allow_
bio_
merge
(
rq
,
bio
))
return
0
;
return
false
;
return
1
;
return
true
;
}
}
EXPORT_SYMBOL
(
elv_
rq
_merge_ok
);
EXPORT_SYMBOL
(
elv_
bio
_merge_ok
);
static
struct
elevator_type
*
elevator_find
(
const
char
*
name
)
static
struct
elevator_type
*
elevator_find
(
const
char
*
name
)
{
{
...
@@ -425,7 +425,7 @@ int elv_merge(struct request_queue *q, struct request **req, struct bio *bio)
...
@@ -425,7 +425,7 @@ int elv_merge(struct request_queue *q, struct request **req, struct bio *bio)
/*
/*
* First try one-hit cache.
* First try one-hit cache.
*/
*/
if
(
q
->
last_merge
&&
elv_
rq
_merge_ok
(
q
->
last_merge
,
bio
))
{
if
(
q
->
last_merge
&&
elv_
bio
_merge_ok
(
q
->
last_merge
,
bio
))
{
ret
=
blk_try_merge
(
q
->
last_merge
,
bio
);
ret
=
blk_try_merge
(
q
->
last_merge
,
bio
);
if
(
ret
!=
ELEVATOR_NO_MERGE
)
{
if
(
ret
!=
ELEVATOR_NO_MERGE
)
{
*
req
=
q
->
last_merge
;
*
req
=
q
->
last_merge
;
...
@@ -440,7 +440,7 @@ int elv_merge(struct request_queue *q, struct request **req, struct bio *bio)
...
@@ -440,7 +440,7 @@ int elv_merge(struct request_queue *q, struct request **req, struct bio *bio)
* See if our hash lookup can find a potential backmerge.
* See if our hash lookup can find a potential backmerge.
*/
*/
__rq
=
elv_rqhash_find
(
q
,
bio
->
bi_iter
.
bi_sector
);
__rq
=
elv_rqhash_find
(
q
,
bio
->
bi_iter
.
bi_sector
);
if
(
__rq
&&
elv_
rq
_merge_ok
(
__rq
,
bio
))
{
if
(
__rq
&&
elv_
bio
_merge_ok
(
__rq
,
bio
))
{
*
req
=
__rq
;
*
req
=
__rq
;
return
ELEVATOR_BACK_MERGE
;
return
ELEVATOR_BACK_MERGE
;
}
}
...
...
block/partition-generic.c
浏览文件 @
e9ccb945
...
@@ -495,7 +495,6 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
...
@@ -495,7 +495,6 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
/* add partitions */
/* add partitions */
for
(
p
=
1
;
p
<
state
->
limit
;
p
++
)
{
for
(
p
=
1
;
p
<
state
->
limit
;
p
++
)
{
sector_t
size
,
from
;
sector_t
size
,
from
;
struct
partition_meta_info
*
info
=
NULL
;
size
=
state
->
parts
[
p
].
size
;
size
=
state
->
parts
[
p
].
size
;
if
(
!
size
)
if
(
!
size
)
...
@@ -530,8 +529,6 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
...
@@ -530,8 +529,6 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
}
}
}
}
if
(
state
->
parts
[
p
].
has_info
)
info
=
&
state
->
parts
[
p
].
info
;
part
=
add_partition
(
disk
,
p
,
from
,
size
,
part
=
add_partition
(
disk
,
p
,
from
,
size
,
state
->
parts
[
p
].
flags
,
state
->
parts
[
p
].
flags
,
&
state
->
parts
[
p
].
info
);
&
state
->
parts
[
p
].
info
);
...
...
block/partitions/atari.c
浏览文件 @
e9ccb945
...
@@ -42,6 +42,13 @@ int atari_partition(struct parsed_partitions *state)
...
@@ -42,6 +42,13 @@ int atari_partition(struct parsed_partitions *state)
int
part_fmt
=
0
;
/* 0:unknown, 1:AHDI, 2:ICD/Supra */
int
part_fmt
=
0
;
/* 0:unknown, 1:AHDI, 2:ICD/Supra */
#endif
#endif
/*
* ATARI partition scheme supports 512 lba only. If this is not
* the case, bail early to avoid miscalculating hd_size.
*/
if
(
bdev_logical_block_size
(
state
->
bdev
)
!=
512
)
return
0
;
rs
=
read_part_sector
(
state
,
0
,
&
sect
);
rs
=
read_part_sector
(
state
,
0
,
&
sect
);
if
(
!
rs
)
if
(
!
rs
)
return
-
1
;
return
-
1
;
...
...
drivers/block/brd.c
浏览文件 @
e9ccb945
...
@@ -509,7 +509,9 @@ static struct brd_device *brd_alloc(int i)
...
@@ -509,7 +509,9 @@ static struct brd_device *brd_alloc(int i)
blk_queue_max_discard_sectors
(
brd
->
brd_queue
,
UINT_MAX
);
blk_queue_max_discard_sectors
(
brd
->
brd_queue
,
UINT_MAX
);
brd
->
brd_queue
->
limits
.
discard_zeroes_data
=
1
;
brd
->
brd_queue
->
limits
.
discard_zeroes_data
=
1
;
queue_flag_set_unlocked
(
QUEUE_FLAG_DISCARD
,
brd
->
brd_queue
);
queue_flag_set_unlocked
(
QUEUE_FLAG_DISCARD
,
brd
->
brd_queue
);
#ifdef CONFIG_BLK_DEV_RAM_DAX
queue_flag_set_unlocked
(
QUEUE_FLAG_DAX
,
brd
->
brd_queue
);
#endif
disk
=
brd
->
brd_disk
=
alloc_disk
(
max_part
);
disk
=
brd
->
brd_disk
=
alloc_disk
(
max_part
);
if
(
!
disk
)
if
(
!
disk
)
goto
out_free_queue
;
goto
out_free_queue
;
...
...
drivers/nvdimm/pmem.c
浏览文件 @
e9ccb945
...
@@ -283,6 +283,7 @@ static int pmem_attach_disk(struct device *dev,
...
@@ -283,6 +283,7 @@ static int pmem_attach_disk(struct device *dev,
blk_queue_max_hw_sectors
(
q
,
UINT_MAX
);
blk_queue_max_hw_sectors
(
q
,
UINT_MAX
);
blk_queue_bounce_limit
(
q
,
BLK_BOUNCE_ANY
);
blk_queue_bounce_limit
(
q
,
BLK_BOUNCE_ANY
);
queue_flag_set_unlocked
(
QUEUE_FLAG_NONROT
,
q
);
queue_flag_set_unlocked
(
QUEUE_FLAG_NONROT
,
q
);
queue_flag_set_unlocked
(
QUEUE_FLAG_DAX
,
q
);
q
->
queuedata
=
pmem
;
q
->
queuedata
=
pmem
;
disk
=
alloc_disk_node
(
0
,
nid
);
disk
=
alloc_disk_node
(
0
,
nid
);
...
...
drivers/s390/block/dcssblk.c
浏览文件 @
e9ccb945
...
@@ -618,6 +618,7 @@ dcssblk_add_store(struct device *dev, struct device_attribute *attr, const char
...
@@ -618,6 +618,7 @@ dcssblk_add_store(struct device *dev, struct device_attribute *attr, const char
dev_info
->
gd
->
driverfs_dev
=
&
dev_info
->
dev
;
dev_info
->
gd
->
driverfs_dev
=
&
dev_info
->
dev
;
blk_queue_make_request
(
dev_info
->
dcssblk_queue
,
dcssblk_make_request
);
blk_queue_make_request
(
dev_info
->
dcssblk_queue
,
dcssblk_make_request
);
blk_queue_logical_block_size
(
dev_info
->
dcssblk_queue
,
4096
);
blk_queue_logical_block_size
(
dev_info
->
dcssblk_queue
,
4096
);
queue_flag_set_unlocked
(
QUEUE_FLAG_DAX
,
dev_info
->
dcssblk_queue
);
seg_byte_size
=
(
dev_info
->
end
-
dev_info
->
start
+
1
);
seg_byte_size
=
(
dev_info
->
end
-
dev_info
->
start
+
1
);
set_capacity
(
dev_info
->
gd
,
seg_byte_size
>>
9
);
// size in sectors
set_capacity
(
dev_info
->
gd
,
seg_byte_size
>>
9
);
// size in sectors
...
...
fs/block_dev.c
浏览文件 @
e9ccb945
...
@@ -493,7 +493,7 @@ long bdev_direct_access(struct block_device *bdev, struct blk_dax_ctl *dax)
...
@@ -493,7 +493,7 @@ long bdev_direct_access(struct block_device *bdev, struct blk_dax_ctl *dax)
if
(
size
<
0
)
if
(
size
<
0
)
return
size
;
return
size
;
if
(
!
ops
->
direct_access
)
if
(
!
blk_queue_dax
(
bdev_get_queue
(
bdev
))
||
!
ops
->
direct_access
)
return
-
EOPNOTSUPP
;
return
-
EOPNOTSUPP
;
if
((
sector
+
DIV_ROUND_UP
(
size
,
512
))
>
if
((
sector
+
DIV_ROUND_UP
(
size
,
512
))
>
part_nr_sects_read
(
bdev
->
bd_part
))
part_nr_sects_read
(
bdev
->
bd_part
))
...
@@ -1287,7 +1287,8 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
...
@@ -1287,7 +1287,8 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
bdev
->
bd_disk
=
disk
;
bdev
->
bd_disk
=
disk
;
bdev
->
bd_queue
=
disk
->
queue
;
bdev
->
bd_queue
=
disk
->
queue
;
bdev
->
bd_contains
=
bdev
;
bdev
->
bd_contains
=
bdev
;
if
(
IS_ENABLED
(
CONFIG_BLK_DEV_DAX
)
&&
disk
->
fops
->
direct_access
)
if
(
IS_ENABLED
(
CONFIG_BLK_DEV_DAX
)
&&
blk_queue_dax
(
disk
->
queue
))
bdev
->
bd_inode
->
i_flags
=
S_DAX
;
bdev
->
bd_inode
->
i_flags
=
S_DAX
;
else
else
bdev
->
bd_inode
->
i_flags
=
0
;
bdev
->
bd_inode
->
i_flags
=
0
;
...
...
fs/btrfs/volumes.c
浏览文件 @
e9ccb945
...
@@ -5494,7 +5494,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
...
@@ -5494,7 +5494,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int op,
}
}
}
else
if
(
map
->
type
&
BTRFS_BLOCK_GROUP_DUP
)
{
}
else
if
(
map
->
type
&
BTRFS_BLOCK_GROUP_DUP
)
{
if
(
op
==
REQ_OP_WRITE
||
REQ_OP_DISCARD
||
if
(
op
==
REQ_OP_WRITE
||
op
==
REQ_OP_DISCARD
||
op
==
REQ_GET_READ_MIRRORS
)
{
op
==
REQ_GET_READ_MIRRORS
)
{
num_stripes
=
map
->
num_stripes
;
num_stripes
=
map
->
num_stripes
;
}
else
if
(
mirror_num
)
{
}
else
if
(
mirror_num
)
{
...
...
include/linux/blkdev.h
浏览文件 @
e9ccb945
...
@@ -90,7 +90,7 @@ struct request {
...
@@ -90,7 +90,7 @@ struct request {
struct
list_head
queuelist
;
struct
list_head
queuelist
;
union
{
union
{
struct
call_single_data
csd
;
struct
call_single_data
csd
;
u
nsigned
long
fifo_time
;
u
64
fifo_time
;
};
};
struct
request_queue
*
q
;
struct
request_queue
*
q
;
...
@@ -505,6 +505,7 @@ struct request_queue {
...
@@ -505,6 +505,7 @@ struct request_queue {
#define QUEUE_FLAG_WC 23
/* Write back caching */
#define QUEUE_FLAG_WC 23
/* Write back caching */
#define QUEUE_FLAG_FUA 24
/* device supports FUA writes */
#define QUEUE_FLAG_FUA 24
/* device supports FUA writes */
#define QUEUE_FLAG_FLUSH_NQ 25
/* flush not queueuable */
#define QUEUE_FLAG_FLUSH_NQ 25
/* flush not queueuable */
#define QUEUE_FLAG_DAX 26
/* device supports DAX */
#define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \
#define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \
(1 << QUEUE_FLAG_STACKABLE) | \
(1 << QUEUE_FLAG_STACKABLE) | \
...
@@ -594,6 +595,7 @@ static inline void queue_flag_clear(unsigned int flag, struct request_queue *q)
...
@@ -594,6 +595,7 @@ static inline void queue_flag_clear(unsigned int flag, struct request_queue *q)
#define blk_queue_discard(q) test_bit(QUEUE_FLAG_DISCARD, &(q)->queue_flags)
#define blk_queue_discard(q) test_bit(QUEUE_FLAG_DISCARD, &(q)->queue_flags)
#define blk_queue_secdiscard(q) (blk_queue_discard(q) && \
#define blk_queue_secdiscard(q) (blk_queue_discard(q) && \
test_bit(QUEUE_FLAG_SECDISCARD, &(q)->queue_flags))
test_bit(QUEUE_FLAG_SECDISCARD, &(q)->queue_flags))
#define blk_queue_dax(q) test_bit(QUEUE_FLAG_DAX, &(q)->queue_flags)
#define blk_noretry_request(rq) \
#define blk_noretry_request(rq) \
((rq)->cmd_flags & (REQ_FAILFAST_DEV|REQ_FAILFAST_TRANSPORT| \
((rq)->cmd_flags & (REQ_FAILFAST_DEV|REQ_FAILFAST_TRANSPORT| \
...
...
include/linux/elevator.h
浏览文件 @
e9ccb945
...
@@ -16,7 +16,11 @@ typedef void (elevator_merge_req_fn) (struct request_queue *, struct request *,
...
@@ -16,7 +16,11 @@ typedef void (elevator_merge_req_fn) (struct request_queue *, struct request *,
typedef
void
(
elevator_merged_fn
)
(
struct
request_queue
*
,
struct
request
*
,
int
);
typedef
void
(
elevator_merged_fn
)
(
struct
request_queue
*
,
struct
request
*
,
int
);
typedef
int
(
elevator_allow_merge_fn
)
(
struct
request_queue
*
,
struct
request
*
,
struct
bio
*
);
typedef
int
(
elevator_allow_bio_merge_fn
)
(
struct
request_queue
*
,
struct
request
*
,
struct
bio
*
);
typedef
int
(
elevator_allow_rq_merge_fn
)
(
struct
request_queue
*
,
struct
request
*
,
struct
request
*
);
typedef
void
(
elevator_bio_merged_fn
)
(
struct
request_queue
*
,
typedef
void
(
elevator_bio_merged_fn
)
(
struct
request_queue
*
,
struct
request
*
,
struct
bio
*
);
struct
request
*
,
struct
bio
*
);
...
@@ -46,7 +50,8 @@ struct elevator_ops
...
@@ -46,7 +50,8 @@ struct elevator_ops
elevator_merge_fn
*
elevator_merge_fn
;
elevator_merge_fn
*
elevator_merge_fn
;
elevator_merged_fn
*
elevator_merged_fn
;
elevator_merged_fn
*
elevator_merged_fn
;
elevator_merge_req_fn
*
elevator_merge_req_fn
;
elevator_merge_req_fn
*
elevator_merge_req_fn
;
elevator_allow_merge_fn
*
elevator_allow_merge_fn
;
elevator_allow_bio_merge_fn
*
elevator_allow_bio_merge_fn
;
elevator_allow_rq_merge_fn
*
elevator_allow_rq_merge_fn
;
elevator_bio_merged_fn
*
elevator_bio_merged_fn
;
elevator_bio_merged_fn
*
elevator_bio_merged_fn
;
elevator_dispatch_fn
*
elevator_dispatch_fn
;
elevator_dispatch_fn
*
elevator_dispatch_fn
;
...
@@ -157,7 +162,7 @@ extern ssize_t elv_iosched_store(struct request_queue *, const char *, size_t);
...
@@ -157,7 +162,7 @@ extern ssize_t elv_iosched_store(struct request_queue *, const char *, size_t);
extern
int
elevator_init
(
struct
request_queue
*
,
char
*
);
extern
int
elevator_init
(
struct
request_queue
*
,
char
*
);
extern
void
elevator_exit
(
struct
elevator_queue
*
);
extern
void
elevator_exit
(
struct
elevator_queue
*
);
extern
int
elevator_change
(
struct
request_queue
*
,
const
char
*
);
extern
int
elevator_change
(
struct
request_queue
*
,
const
char
*
);
extern
bool
elv_
rq
_merge_ok
(
struct
request
*
,
struct
bio
*
);
extern
bool
elv_
bio
_merge_ok
(
struct
request
*
,
struct
bio
*
);
extern
struct
elevator_queue
*
elevator_alloc
(
struct
request_queue
*
,
extern
struct
elevator_queue
*
elevator_alloc
(
struct
request_queue
*
,
struct
elevator_type
*
);
struct
elevator_type
*
);
...
...
kernel/trace/blktrace.c
浏览文件 @
e9ccb945
...
@@ -127,12 +127,13 @@ static void trace_note_tsk(struct task_struct *tsk)
...
@@ -127,12 +127,13 @@ static void trace_note_tsk(struct task_struct *tsk)
static
void
trace_note_time
(
struct
blk_trace
*
bt
)
static
void
trace_note_time
(
struct
blk_trace
*
bt
)
{
{
struct
timespec
now
;
struct
timespec
64
now
;
unsigned
long
flags
;
unsigned
long
flags
;
u32
words
[
2
];
u32
words
[
2
];
getnstimeofday
(
&
now
);
/* need to check user space to see if this breaks in y2038 or y2106 */
words
[
0
]
=
now
.
tv_sec
;
ktime_get_real_ts64
(
&
now
);
words
[
0
]
=
(
u32
)
now
.
tv_sec
;
words
[
1
]
=
now
.
tv_nsec
;
words
[
1
]
=
now
.
tv_nsec
;
local_irq_save
(
flags
);
local_irq_save
(
flags
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录