Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
c45ec656
K
Kernel
项目概览
openeuler
/
Kernel
12 个月 前同步成功
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c45ec656
编写于
2月 22, 2006
作者:
L
Linus Torvalds
浏览文件
操作
浏览文件
下载
差异文件
Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6
上级
102d60a2
fa675765
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
31 addition
and
3 deletion
+31
-3
Documentation/feature-removal-schedule.txt
Documentation/feature-removal-schedule.txt
+9
-0
fs/super.c
fs/super.c
+14
-1
include/linux/kobject.h
include/linux/kobject.h
+4
-2
lib/kobject_uevent.c
lib/kobject_uevent.c
+4
-0
未找到文件。
Documentation/feature-removal-schedule.txt
浏览文件 @
c45ec656
...
@@ -171,3 +171,12 @@ Why: The ISA interface is faster and should be always available. The I2C
...
@@ -171,3 +171,12 @@ Why: The ISA interface is faster and should be always available. The I2C
probing is also known to cause trouble in at least one case (see
probing is also known to cause trouble in at least one case (see
bug #5889.)
bug #5889.)
Who: Jean Delvare <khali@linux-fr.org>
Who: Jean Delvare <khali@linux-fr.org>
---------------------------
What: mount/umount uevents
When: February 2007
Why: These events are not correct, and do not properly let userspace know
when a file system has been mounted or unmounted. Userspace should
poll the /proc/mounts file instead to detect this properly.
Who: Greg Kroah-Hartman <gregkh@suse.de>
fs/super.c
浏览文件 @
c45ec656
...
@@ -666,6 +666,16 @@ static int test_bdev_super(struct super_block *s, void *data)
...
@@ -666,6 +666,16 @@ static int test_bdev_super(struct super_block *s, void *data)
return
(
void
*
)
s
->
s_bdev
==
data
;
return
(
void
*
)
s
->
s_bdev
==
data
;
}
}
static
void
bdev_uevent
(
struct
block_device
*
bdev
,
enum
kobject_action
action
)
{
if
(
bdev
->
bd_disk
)
{
if
(
bdev
->
bd_part
)
kobject_uevent
(
&
bdev
->
bd_part
->
kobj
,
action
);
else
kobject_uevent
(
&
bdev
->
bd_disk
->
kobj
,
action
);
}
}
struct
super_block
*
get_sb_bdev
(
struct
file_system_type
*
fs_type
,
struct
super_block
*
get_sb_bdev
(
struct
file_system_type
*
fs_type
,
int
flags
,
const
char
*
dev_name
,
void
*
data
,
int
flags
,
const
char
*
dev_name
,
void
*
data
,
int
(
*
fill_super
)(
struct
super_block
*
,
void
*
,
int
))
int
(
*
fill_super
)(
struct
super_block
*
,
void
*
,
int
))
...
@@ -707,8 +717,10 @@ struct super_block *get_sb_bdev(struct file_system_type *fs_type,
...
@@ -707,8 +717,10 @@ struct super_block *get_sb_bdev(struct file_system_type *fs_type,
up_write
(
&
s
->
s_umount
);
up_write
(
&
s
->
s_umount
);
deactivate_super
(
s
);
deactivate_super
(
s
);
s
=
ERR_PTR
(
error
);
s
=
ERR_PTR
(
error
);
}
else
}
else
{
s
->
s_flags
|=
MS_ACTIVE
;
s
->
s_flags
|=
MS_ACTIVE
;
bdev_uevent
(
bdev
,
KOBJ_MOUNT
);
}
}
}
return
s
;
return
s
;
...
@@ -724,6 +736,7 @@ void kill_block_super(struct super_block *sb)
...
@@ -724,6 +736,7 @@ void kill_block_super(struct super_block *sb)
{
{
struct
block_device
*
bdev
=
sb
->
s_bdev
;
struct
block_device
*
bdev
=
sb
->
s_bdev
;
bdev_uevent
(
bdev
,
KOBJ_UMOUNT
);
generic_shutdown_super
(
sb
);
generic_shutdown_super
(
sb
);
sync_blockdev
(
bdev
);
sync_blockdev
(
bdev
);
close_bdev_excl
(
bdev
);
close_bdev_excl
(
bdev
);
...
...
include/linux/kobject.h
浏览文件 @
c45ec656
...
@@ -41,8 +41,10 @@ enum kobject_action {
...
@@ -41,8 +41,10 @@ enum kobject_action {
KOBJ_ADD
=
(
__force
kobject_action_t
)
0x01
,
/* exclusive to core */
KOBJ_ADD
=
(
__force
kobject_action_t
)
0x01
,
/* exclusive to core */
KOBJ_REMOVE
=
(
__force
kobject_action_t
)
0x02
,
/* exclusive to core */
KOBJ_REMOVE
=
(
__force
kobject_action_t
)
0x02
,
/* exclusive to core */
KOBJ_CHANGE
=
(
__force
kobject_action_t
)
0x03
,
/* device state change */
KOBJ_CHANGE
=
(
__force
kobject_action_t
)
0x03
,
/* device state change */
KOBJ_OFFLINE
=
(
__force
kobject_action_t
)
0x04
,
/* device offline */
KOBJ_MOUNT
=
(
__force
kobject_action_t
)
0x04
,
/* mount event for block devices (broken) */
KOBJ_ONLINE
=
(
__force
kobject_action_t
)
0x05
,
/* device online */
KOBJ_UMOUNT
=
(
__force
kobject_action_t
)
0x05
,
/* umount event for block devices (broken) */
KOBJ_OFFLINE
=
(
__force
kobject_action_t
)
0x06
,
/* device offline */
KOBJ_ONLINE
=
(
__force
kobject_action_t
)
0x07
,
/* device online */
};
};
struct
kobject
{
struct
kobject
{
...
...
lib/kobject_uevent.c
浏览文件 @
c45ec656
...
@@ -38,6 +38,10 @@ static char *action_to_string(enum kobject_action action)
...
@@ -38,6 +38,10 @@ static char *action_to_string(enum kobject_action action)
return
"remove"
;
return
"remove"
;
case
KOBJ_CHANGE
:
case
KOBJ_CHANGE
:
return
"change"
;
return
"change"
;
case
KOBJ_MOUNT
:
return
"mount"
;
case
KOBJ_UMOUNT
:
return
"umount"
;
case
KOBJ_OFFLINE
:
case
KOBJ_OFFLINE
:
return
"offline"
;
return
"offline"
;
case
KOBJ_ONLINE
:
case
KOBJ_ONLINE
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录