Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
28935ab5
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
28935ab5
编写于
7月 31, 2013
作者:
K
Kent Overstreet
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
bcache: Use ida for bcache block dev minor
Signed-off-by:
N
Kent Overstreet
<
kmo@daterainc.com
>
上级
c4d951dd
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
20 addition
and
6 deletion
+20
-6
drivers/md/bcache/super.c
drivers/md/bcache/super.c
+20
-6
未找到文件。
drivers/md/bcache/super.c
浏览文件 @
28935ab5
...
...
@@ -16,6 +16,7 @@
#include <linux/buffer_head.h>
#include <linux/debugfs.h>
#include <linux/genhd.h>
#include <linux/idr.h>
#include <linux/kthread.h>
#include <linux/module.h>
#include <linux/random.h>
...
...
@@ -50,7 +51,8 @@ struct mutex bch_register_lock;
LIST_HEAD
(
bch_cache_sets
);
static
LIST_HEAD
(
uncached_devices
);
static
int
bcache_major
,
bcache_minor
;
static
int
bcache_major
;
static
DEFINE_IDA
(
bcache_minor
);
static
wait_queue_head_t
unregister_wait
;
struct
workqueue_struct
*
bcache_wq
;
...
...
@@ -731,8 +733,10 @@ static void bcache_device_free(struct bcache_device *d)
del_gendisk
(
d
->
disk
);
if
(
d
->
disk
&&
d
->
disk
->
queue
)
blk_cleanup_queue
(
d
->
disk
->
queue
);
if
(
d
->
disk
)
if
(
d
->
disk
)
{
ida_simple_remove
(
&
bcache_minor
,
d
->
disk
->
first_minor
);
put_disk
(
d
->
disk
);
}
bio_split_pool_free
(
&
d
->
bio_split_hook
);
if
(
d
->
unaligned_bvec
)
...
...
@@ -756,6 +760,7 @@ static int bcache_device_init(struct bcache_device *d, unsigned block_size,
{
struct
request_queue
*
q
;
size_t
n
;
int
minor
;
if
(
!
d
->
stripe_size
)
d
->
stripe_size
=
1
<<
31
;
...
...
@@ -783,22 +788,31 @@ static int bcache_device_init(struct bcache_device *d, unsigned block_size,
if
(
!
d
->
full_dirty_stripes
)
return
-
ENOMEM
;
minor
=
ida_simple_get
(
&
bcache_minor
,
0
,
MINORMASK
+
1
,
GFP_KERNEL
);
if
(
minor
<
0
)
return
minor
;
if
(
!
(
d
->
bio_split
=
bioset_create
(
4
,
offsetof
(
struct
bbio
,
bio
)))
||
!
(
d
->
unaligned_bvec
=
mempool_create_kmalloc_pool
(
1
,
sizeof
(
struct
bio_vec
)
*
BIO_MAX_PAGES
))
||
bio_split_pool_init
(
&
d
->
bio_split_hook
)
||
!
(
d
->
disk
=
alloc_disk
(
1
))
||
!
(
q
=
blk_alloc_queue
(
GFP_KERNEL
)))
!
(
d
->
disk
=
alloc_disk
(
1
))
)
{
ida_simple_remove
(
&
bcache_minor
,
minor
);
return
-
ENOMEM
;
}
set_capacity
(
d
->
disk
,
sectors
);
snprintf
(
d
->
disk
->
disk_name
,
DISK_NAME_LEN
,
"bcache%i"
,
bcache_
minor
);
snprintf
(
d
->
disk
->
disk_name
,
DISK_NAME_LEN
,
"bcache%i"
,
minor
);
d
->
disk
->
major
=
bcache_major
;
d
->
disk
->
first_minor
=
bcache_minor
++
;
d
->
disk
->
first_minor
=
minor
;
d
->
disk
->
fops
=
&
bcache_ops
;
d
->
disk
->
private_data
=
d
;
q
=
blk_alloc_queue
(
GFP_KERNEL
);
if
(
!
q
)
return
-
ENOMEM
;
blk_queue_make_request
(
q
,
NULL
);
d
->
disk
->
queue
=
q
;
q
->
queuedata
=
d
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录