Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
838bee9e
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看板
提交
838bee9e
编写于
11月 14, 2017
作者:
J
Jan Kara
浏览文件
操作
浏览文件
下载
差异文件
Merge udf, isofs, quota, ext2 changes for 4.15-rc1.
上级
ac3d7939
88d8ff97
变更
27
隐藏空白更改
内联
并排
Showing
27 changed file
with
366 addition
and
314 deletion
+366
-314
Documentation/filesystems/udf.txt
Documentation/filesystems/udf.txt
+2
-6
fs/ext2/super.c
fs/ext2/super.c
+78
-83
fs/isofs/isofs.h
fs/isofs/isofs.h
+11
-11
fs/isofs/rock.h
fs/isofs/rock.h
+32
-32
fs/isofs/util.c
fs/isofs/util.c
+1
-1
fs/notify/fanotify/fanotify.c
fs/notify/fanotify/fanotify.c
+7
-1
fs/notify/fanotify/fanotify_user.c
fs/notify/fanotify/fanotify_user.c
+15
-1
fs/notify/fdinfo.c
fs/notify/fdinfo.c
+3
-0
fs/quota/dquot.c
fs/quota/dquot.c
+10
-3
fs/udf/balloc.c
fs/udf/balloc.c
+16
-13
fs/udf/dir.c
fs/udf/dir.c
+1
-1
fs/udf/directory.c
fs/udf/directory.c
+5
-4
fs/udf/ialloc.c
fs/udf/ialloc.c
+1
-1
fs/udf/inode.c
fs/udf/inode.c
+25
-25
fs/udf/misc.c
fs/udf/misc.c
+4
-4
fs/udf/namei.c
fs/udf/namei.c
+7
-6
fs/udf/partition.c
fs/udf/partition.c
+3
-3
fs/udf/super.c
fs/udf/super.c
+28
-28
fs/udf/truncate.c
fs/udf/truncate.c
+1
-1
fs/udf/udfdecl.h
fs/udf/udfdecl.h
+13
-8
fs/udf/unicode.c
fs/udf/unicode.c
+1
-1
include/linux/audit.h
include/linux/audit.h
+10
-0
include/linux/fsnotify_backend.h
include/linux/fsnotify_backend.h
+1
-0
include/uapi/linux/audit.h
include/uapi/linux/audit.h
+1
-0
include/uapi/linux/fanotify.h
include/uapi/linux/fanotify.h
+3
-0
include/uapi/linux/iso_fs.h
include/uapi/linux/iso_fs.h
+81
-81
kernel/auditsc.c
kernel/auditsc.c
+6
-0
未找到文件。
Documentation/filesystems/udf.txt
浏览文件 @
838bee9e
*
*
* Documentation/filesystems/udf.txt
* Documentation/filesystems/udf.txt
*
*
UDF Filesystem version 0.9.8.1
If you encounter problems with reading UDF discs using this driver,
If you encounter problems with reading UDF discs using this driver,
please report them to linux_udf@hpesjro.fc.hp.com, which is the
please report them according to MAINTAINERS file.
developer's list.
Write support requires a block driver which supports writing. Currently
Write support requires a block driver which supports writing. Currently
dvd+rw drives and media support true random sector writes, and so a udf
dvd+rw drives and media support true random sector writes, and so a udf
...
@@ -73,10 +71,8 @@ The following expect a offset from the partition root.
...
@@ -73,10 +71,8 @@ The following expect a offset from the partition root.
For the latest version and toolset see:
For the latest version and toolset see:
http
://linux-udf.sourceforge.net/
http
s://github.com/pali/udftools
Documentation on UDF and ECMA 167 is available FREE from:
Documentation on UDF and ECMA 167 is available FREE from:
http://www.osta.org/
http://www.osta.org/
http://www.ecma-international.org/
http://www.ecma-international.org/
Ben Fennema <bfennema@falcon.csc.calpoly.edu>
fs/ext2/super.c
浏览文件 @
838bee9e
...
@@ -479,10 +479,10 @@ static const match_table_t tokens = {
...
@@ -479,10 +479,10 @@ static const match_table_t tokens = {
{
Opt_err
,
NULL
}
{
Opt_err
,
NULL
}
};
};
static
int
parse_options
(
char
*
options
,
struct
super_block
*
sb
)
static
int
parse_options
(
char
*
options
,
struct
super_block
*
sb
,
struct
ext2_mount_options
*
opts
)
{
{
char
*
p
;
char
*
p
;
struct
ext2_sb_info
*
sbi
=
EXT2_SB
(
sb
);
substring_t
args
[
MAX_OPT_ARGS
];
substring_t
args
[
MAX_OPT_ARGS
];
int
option
;
int
option
;
kuid_t
uid
;
kuid_t
uid
;
...
@@ -499,16 +499,16 @@ static int parse_options(char *options, struct super_block *sb)
...
@@ -499,16 +499,16 @@ static int parse_options(char *options, struct super_block *sb)
token
=
match_token
(
p
,
tokens
,
args
);
token
=
match_token
(
p
,
tokens
,
args
);
switch
(
token
)
{
switch
(
token
)
{
case
Opt_bsd_df
:
case
Opt_bsd_df
:
clear_opt
(
sbi
->
s_mount_opt
,
MINIX_DF
);
clear_opt
(
opts
->
s_mount_opt
,
MINIX_DF
);
break
;
break
;
case
Opt_minix_df
:
case
Opt_minix_df
:
set_opt
(
sbi
->
s_mount_opt
,
MINIX_DF
);
set_opt
(
opts
->
s_mount_opt
,
MINIX_DF
);
break
;
break
;
case
Opt_grpid
:
case
Opt_grpid
:
set_opt
(
sbi
->
s_mount_opt
,
GRPID
);
set_opt
(
opts
->
s_mount_opt
,
GRPID
);
break
;
break
;
case
Opt_nogrpid
:
case
Opt_nogrpid
:
clear_opt
(
sbi
->
s_mount_opt
,
GRPID
);
clear_opt
(
opts
->
s_mount_opt
,
GRPID
);
break
;
break
;
case
Opt_resuid
:
case
Opt_resuid
:
if
(
match_int
(
&
args
[
0
],
&
option
))
if
(
match_int
(
&
args
[
0
],
&
option
))
...
@@ -519,7 +519,7 @@ static int parse_options(char *options, struct super_block *sb)
...
@@ -519,7 +519,7 @@ static int parse_options(char *options, struct super_block *sb)
return
0
;
return
0
;
}
}
sbi
->
s_resuid
=
uid
;
opts
->
s_resuid
=
uid
;
break
;
break
;
case
Opt_resgid
:
case
Opt_resgid
:
if
(
match_int
(
&
args
[
0
],
&
option
))
if
(
match_int
(
&
args
[
0
],
&
option
))
...
@@ -529,51 +529,51 @@ static int parse_options(char *options, struct super_block *sb)
...
@@ -529,51 +529,51 @@ static int parse_options(char *options, struct super_block *sb)
ext2_msg
(
sb
,
KERN_ERR
,
"Invalid gid value %d"
,
option
);
ext2_msg
(
sb
,
KERN_ERR
,
"Invalid gid value %d"
,
option
);
return
0
;
return
0
;
}
}
sbi
->
s_resgid
=
gid
;
opts
->
s_resgid
=
gid
;
break
;
break
;
case
Opt_sb
:
case
Opt_sb
:
/* handled by get_sb_block() instead of here */
/* handled by get_sb_block() instead of here */
/* *sb_block = match_int(&args[0]); */
/* *sb_block = match_int(&args[0]); */
break
;
break
;
case
Opt_err_panic
:
case
Opt_err_panic
:
clear_opt
(
sbi
->
s_mount_opt
,
ERRORS_CONT
);
clear_opt
(
opts
->
s_mount_opt
,
ERRORS_CONT
);
clear_opt
(
sbi
->
s_mount_opt
,
ERRORS_RO
);
clear_opt
(
opts
->
s_mount_opt
,
ERRORS_RO
);
set_opt
(
sbi
->
s_mount_opt
,
ERRORS_PANIC
);
set_opt
(
opts
->
s_mount_opt
,
ERRORS_PANIC
);
break
;
break
;
case
Opt_err_ro
:
case
Opt_err_ro
:
clear_opt
(
sbi
->
s_mount_opt
,
ERRORS_CONT
);
clear_opt
(
opts
->
s_mount_opt
,
ERRORS_CONT
);
clear_opt
(
sbi
->
s_mount_opt
,
ERRORS_PANIC
);
clear_opt
(
opts
->
s_mount_opt
,
ERRORS_PANIC
);
set_opt
(
sbi
->
s_mount_opt
,
ERRORS_RO
);
set_opt
(
opts
->
s_mount_opt
,
ERRORS_RO
);
break
;
break
;
case
Opt_err_cont
:
case
Opt_err_cont
:
clear_opt
(
sbi
->
s_mount_opt
,
ERRORS_RO
);
clear_opt
(
opts
->
s_mount_opt
,
ERRORS_RO
);
clear_opt
(
sbi
->
s_mount_opt
,
ERRORS_PANIC
);
clear_opt
(
opts
->
s_mount_opt
,
ERRORS_PANIC
);
set_opt
(
sbi
->
s_mount_opt
,
ERRORS_CONT
);
set_opt
(
opts
->
s_mount_opt
,
ERRORS_CONT
);
break
;
break
;
case
Opt_nouid32
:
case
Opt_nouid32
:
set_opt
(
sbi
->
s_mount_opt
,
NO_UID32
);
set_opt
(
opts
->
s_mount_opt
,
NO_UID32
);
break
;
break
;
case
Opt_nocheck
:
case
Opt_nocheck
:
clear_opt
(
sbi
->
s_mount_opt
,
CHECK
);
clear_opt
(
opts
->
s_mount_opt
,
CHECK
);
break
;
break
;
case
Opt_debug
:
case
Opt_debug
:
set_opt
(
sbi
->
s_mount_opt
,
DEBUG
);
set_opt
(
opts
->
s_mount_opt
,
DEBUG
);
break
;
break
;
case
Opt_oldalloc
:
case
Opt_oldalloc
:
set_opt
(
sbi
->
s_mount_opt
,
OLDALLOC
);
set_opt
(
opts
->
s_mount_opt
,
OLDALLOC
);
break
;
break
;
case
Opt_orlov
:
case
Opt_orlov
:
clear_opt
(
sbi
->
s_mount_opt
,
OLDALLOC
);
clear_opt
(
opts
->
s_mount_opt
,
OLDALLOC
);
break
;
break
;
case
Opt_nobh
:
case
Opt_nobh
:
set_opt
(
sbi
->
s_mount_opt
,
NOBH
);
set_opt
(
opts
->
s_mount_opt
,
NOBH
);
break
;
break
;
#ifdef CONFIG_EXT2_FS_XATTR
#ifdef CONFIG_EXT2_FS_XATTR
case
Opt_user_xattr
:
case
Opt_user_xattr
:
set_opt
(
sbi
->
s_mount_opt
,
XATTR_USER
);
set_opt
(
opts
->
s_mount_opt
,
XATTR_USER
);
break
;
break
;
case
Opt_nouser_xattr
:
case
Opt_nouser_xattr
:
clear_opt
(
sbi
->
s_mount_opt
,
XATTR_USER
);
clear_opt
(
opts
->
s_mount_opt
,
XATTR_USER
);
break
;
break
;
#else
#else
case
Opt_user_xattr
:
case
Opt_user_xattr
:
...
@@ -584,10 +584,10 @@ static int parse_options(char *options, struct super_block *sb)
...
@@ -584,10 +584,10 @@ static int parse_options(char *options, struct super_block *sb)
#endif
#endif
#ifdef CONFIG_EXT2_FS_POSIX_ACL
#ifdef CONFIG_EXT2_FS_POSIX_ACL
case
Opt_acl
:
case
Opt_acl
:
set_opt
(
sbi
->
s_mount_opt
,
POSIX_ACL
);
set_opt
(
opts
->
s_mount_opt
,
POSIX_ACL
);
break
;
break
;
case
Opt_noacl
:
case
Opt_noacl
:
clear_opt
(
sbi
->
s_mount_opt
,
POSIX_ACL
);
clear_opt
(
opts
->
s_mount_opt
,
POSIX_ACL
);
break
;
break
;
#else
#else
case
Opt_acl
:
case
Opt_acl
:
...
@@ -598,13 +598,13 @@ static int parse_options(char *options, struct super_block *sb)
...
@@ -598,13 +598,13 @@ static int parse_options(char *options, struct super_block *sb)
#endif
#endif
case
Opt_xip
:
case
Opt_xip
:
ext2_msg
(
sb
,
KERN_INFO
,
"use dax instead of xip"
);
ext2_msg
(
sb
,
KERN_INFO
,
"use dax instead of xip"
);
set_opt
(
sbi
->
s_mount_opt
,
XIP
);
set_opt
(
opts
->
s_mount_opt
,
XIP
);
/* Fall through */
/* Fall through */
case
Opt_dax
:
case
Opt_dax
:
#ifdef CONFIG_FS_DAX
#ifdef CONFIG_FS_DAX
ext2_msg
(
sb
,
KERN_WARNING
,
ext2_msg
(
sb
,
KERN_WARNING
,
"DAX enabled. Warning: EXPERIMENTAL, use at your own risk"
);
"DAX enabled. Warning: EXPERIMENTAL, use at your own risk"
);
set_opt
(
sbi
->
s_mount_opt
,
DAX
);
set_opt
(
opts
->
s_mount_opt
,
DAX
);
#else
#else
ext2_msg
(
sb
,
KERN_INFO
,
"dax option not supported"
);
ext2_msg
(
sb
,
KERN_INFO
,
"dax option not supported"
);
#endif
#endif
...
@@ -613,11 +613,11 @@ static int parse_options(char *options, struct super_block *sb)
...
@@ -613,11 +613,11 @@ static int parse_options(char *options, struct super_block *sb)
#if defined(CONFIG_QUOTA)
#if defined(CONFIG_QUOTA)
case
Opt_quota
:
case
Opt_quota
:
case
Opt_usrquota
:
case
Opt_usrquota
:
set_opt
(
sbi
->
s_mount_opt
,
USRQUOTA
);
set_opt
(
opts
->
s_mount_opt
,
USRQUOTA
);
break
;
break
;
case
Opt_grpquota
:
case
Opt_grpquota
:
set_opt
(
sbi
->
s_mount_opt
,
GRPQUOTA
);
set_opt
(
opts
->
s_mount_opt
,
GRPQUOTA
);
break
;
break
;
#else
#else
case
Opt_quota
:
case
Opt_quota
:
...
@@ -629,11 +629,11 @@ static int parse_options(char *options, struct super_block *sb)
...
@@ -629,11 +629,11 @@ static int parse_options(char *options, struct super_block *sb)
#endif
#endif
case
Opt_reservation
:
case
Opt_reservation
:
set_opt
(
sbi
->
s_mount_opt
,
RESERVATION
);
set_opt
(
opts
->
s_mount_opt
,
RESERVATION
);
ext2_msg
(
sb
,
KERN_INFO
,
"reservations ON"
);
ext2_msg
(
sb
,
KERN_INFO
,
"reservations ON"
);
break
;
break
;
case
Opt_noreservation
:
case
Opt_noreservation
:
clear_opt
(
sbi
->
s_mount_opt
,
RESERVATION
);
clear_opt
(
opts
->
s_mount_opt
,
RESERVATION
);
ext2_msg
(
sb
,
KERN_INFO
,
"reservations OFF"
);
ext2_msg
(
sb
,
KERN_INFO
,
"reservations OFF"
);
break
;
break
;
case
Opt_ignore
:
case
Opt_ignore
:
...
@@ -830,6 +830,7 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)
...
@@ -830,6 +830,7 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)
int
i
,
j
;
int
i
,
j
;
__le32
features
;
__le32
features
;
int
err
;
int
err
;
struct
ext2_mount_options
opts
;
err
=
-
ENOMEM
;
err
=
-
ENOMEM
;
sbi
=
kzalloc
(
sizeof
(
*
sbi
),
GFP_KERNEL
);
sbi
=
kzalloc
(
sizeof
(
*
sbi
),
GFP_KERNEL
);
...
@@ -890,35 +891,39 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)
...
@@ -890,35 +891,39 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)
/* Set defaults before we parse the mount options */
/* Set defaults before we parse the mount options */
def_mount_opts
=
le32_to_cpu
(
es
->
s_default_mount_opts
);
def_mount_opts
=
le32_to_cpu
(
es
->
s_default_mount_opts
);
if
(
def_mount_opts
&
EXT2_DEFM_DEBUG
)
if
(
def_mount_opts
&
EXT2_DEFM_DEBUG
)
set_opt
(
sbi
->
s_mount_opt
,
DEBUG
);
set_opt
(
opts
.
s_mount_opt
,
DEBUG
);
if
(
def_mount_opts
&
EXT2_DEFM_BSDGROUPS
)
if
(
def_mount_opts
&
EXT2_DEFM_BSDGROUPS
)
set_opt
(
sbi
->
s_mount_opt
,
GRPID
);
set_opt
(
opts
.
s_mount_opt
,
GRPID
);
if
(
def_mount_opts
&
EXT2_DEFM_UID16
)
if
(
def_mount_opts
&
EXT2_DEFM_UID16
)
set_opt
(
sbi
->
s_mount_opt
,
NO_UID32
);
set_opt
(
opts
.
s_mount_opt
,
NO_UID32
);
#ifdef CONFIG_EXT2_FS_XATTR
#ifdef CONFIG_EXT2_FS_XATTR
if
(
def_mount_opts
&
EXT2_DEFM_XATTR_USER
)
if
(
def_mount_opts
&
EXT2_DEFM_XATTR_USER
)
set_opt
(
sbi
->
s_mount_opt
,
XATTR_USER
);
set_opt
(
opts
.
s_mount_opt
,
XATTR_USER
);
#endif
#endif
#ifdef CONFIG_EXT2_FS_POSIX_ACL
#ifdef CONFIG_EXT2_FS_POSIX_ACL
if
(
def_mount_opts
&
EXT2_DEFM_ACL
)
if
(
def_mount_opts
&
EXT2_DEFM_ACL
)
set_opt
(
sbi
->
s_mount_opt
,
POSIX_ACL
);
set_opt
(
opts
.
s_mount_opt
,
POSIX_ACL
);
#endif
#endif
if
(
le16_to_cpu
(
sbi
->
s_es
->
s_errors
)
==
EXT2_ERRORS_PANIC
)
if
(
le16_to_cpu
(
sbi
->
s_es
->
s_errors
)
==
EXT2_ERRORS_PANIC
)
set_opt
(
sbi
->
s_mount_opt
,
ERRORS_PANIC
);
set_opt
(
opts
.
s_mount_opt
,
ERRORS_PANIC
);
else
if
(
le16_to_cpu
(
sbi
->
s_es
->
s_errors
)
==
EXT2_ERRORS_CONTINUE
)
else
if
(
le16_to_cpu
(
sbi
->
s_es
->
s_errors
)
==
EXT2_ERRORS_CONTINUE
)
set_opt
(
sbi
->
s_mount_opt
,
ERRORS_CONT
);
set_opt
(
opts
.
s_mount_opt
,
ERRORS_CONT
);
else
else
set_opt
(
sbi
->
s_mount_opt
,
ERRORS_RO
);
set_opt
(
opts
.
s_mount_opt
,
ERRORS_RO
);
sbi
->
s_resuid
=
make_kuid
(
&
init_user_ns
,
le16_to_cpu
(
es
->
s_def_resuid
));
opts
.
s_resuid
=
make_kuid
(
&
init_user_ns
,
le16_to_cpu
(
es
->
s_def_resuid
));
sbi
->
s_resgid
=
make_kgid
(
&
init_user_ns
,
le16_to_cpu
(
es
->
s_def_resgid
));
opts
.
s_resgid
=
make_kgid
(
&
init_user_ns
,
le16_to_cpu
(
es
->
s_def_resgid
));
set_opt
(
sbi
->
s_mount_opt
,
RESERVATION
);
set_opt
(
opts
.
s_mount_opt
,
RESERVATION
);
if
(
!
parse_options
((
char
*
)
data
,
sb
))
if
(
!
parse_options
((
char
*
)
data
,
sb
,
&
opts
))
goto
failed_mount
;
goto
failed_mount
;
sbi
->
s_mount_opt
=
opts
.
s_mount_opt
;
sbi
->
s_resuid
=
opts
.
s_resuid
;
sbi
->
s_resgid
=
opts
.
s_resgid
;
sb
->
s_flags
=
(
sb
->
s_flags
&
~
MS_POSIXACL
)
|
sb
->
s_flags
=
(
sb
->
s_flags
&
~
MS_POSIXACL
)
|
((
EXT2_SB
(
sb
)
->
s_mount_opt
&
EXT2_MOUNT_POSIX_ACL
)
?
((
EXT2_SB
(
sb
)
->
s_mount_opt
&
EXT2_MOUNT_POSIX_ACL
)
?
MS_POSIXACL
:
0
);
MS_POSIXACL
:
0
);
...
@@ -1312,46 +1317,36 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data)
...
@@ -1312,46 +1317,36 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data)
{
{
struct
ext2_sb_info
*
sbi
=
EXT2_SB
(
sb
);
struct
ext2_sb_info
*
sbi
=
EXT2_SB
(
sb
);
struct
ext2_super_block
*
es
;
struct
ext2_super_block
*
es
;
struct
ext2_mount_options
old_opts
;
struct
ext2_mount_options
new_opts
;
unsigned
long
old_sb_flags
;
int
err
;
int
err
;
sync_filesystem
(
sb
);
sync_filesystem
(
sb
);
spin_lock
(
&
sbi
->
s_lock
);
/* Store the old options */
spin_lock
(
&
sbi
->
s_lock
);
old_sb_flags
=
sb
->
s_flags
;
new_opts
.
s_mount_opt
=
sbi
->
s_mount_opt
;
old_opts
.
s_mount_opt
=
sbi
->
s_mount_opt
;
new_opts
.
s_resuid
=
sbi
->
s_resuid
;
old_opts
.
s_resuid
=
sbi
->
s_resu
id
;
new_opts
.
s_resgid
=
sbi
->
s_resg
id
;
old_opts
.
s_resgid
=
sbi
->
s_resgid
;
spin_unlock
(
&
sbi
->
s_lock
)
;
/*
/*
* Allow the "check" option to be passed as a remount option.
* Allow the "check" option to be passed as a remount option.
*/
*/
if
(
!
parse_options
(
data
,
sb
))
{
if
(
!
parse_options
(
data
,
sb
,
&
new_opts
))
err
=
-
EINVAL
;
return
-
EINVAL
;
goto
restore_opts
;
}
sb
->
s_flags
=
(
sb
->
s_flags
&
~
MS_POSIXACL
)
|
((
sbi
->
s_mount_opt
&
EXT2_MOUNT_POSIX_ACL
)
?
MS_POSIXACL
:
0
);
spin_lock
(
&
sbi
->
s_lock
);
es
=
sbi
->
s_es
;
es
=
sbi
->
s_es
;
if
((
sbi
->
s_mount_opt
^
old
_opts
.
s_mount_opt
)
&
EXT2_MOUNT_DAX
)
{
if
((
sbi
->
s_mount_opt
^
new
_opts
.
s_mount_opt
)
&
EXT2_MOUNT_DAX
)
{
ext2_msg
(
sb
,
KERN_WARNING
,
"warning: refusing change of "
ext2_msg
(
sb
,
KERN_WARNING
,
"warning: refusing change of "
"dax flag with busy inodes while remounting"
);
"dax flag with busy inodes while remounting"
);
sbi
->
s_mount_opt
^=
EXT2_MOUNT_DAX
;
new_opts
.
s_mount_opt
^=
EXT2_MOUNT_DAX
;
}
if
((
bool
)(
*
flags
&
MS_RDONLY
)
==
sb_rdonly
(
sb
))
{
spin_unlock
(
&
sbi
->
s_lock
);
return
0
;
}
}
if
((
bool
)(
*
flags
&
MS_RDONLY
)
==
sb_rdonly
(
sb
))
goto
out_set
;
if
(
*
flags
&
MS_RDONLY
)
{
if
(
*
flags
&
MS_RDONLY
)
{
if
(
le16_to_cpu
(
es
->
s_state
)
&
EXT2_VALID_FS
||
if
(
le16_to_cpu
(
es
->
s_state
)
&
EXT2_VALID_FS
||
!
(
sbi
->
s_mount_state
&
EXT2_VALID_FS
))
{
!
(
sbi
->
s_mount_state
&
EXT2_VALID_FS
))
spin_unlock
(
&
sbi
->
s_lock
);
goto
out_set
;
return
0
;
}
/*
/*
* OK, we are remounting a valid rw partition rdonly, so set
* OK, we are remounting a valid rw partition rdonly, so set
...
@@ -1362,22 +1357,20 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data)
...
@@ -1362,22 +1357,20 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data)
spin_unlock
(
&
sbi
->
s_lock
);
spin_unlock
(
&
sbi
->
s_lock
);
err
=
dquot_suspend
(
sb
,
-
1
);
err
=
dquot_suspend
(
sb
,
-
1
);
if
(
err
<
0
)
{
if
(
err
<
0
)
spin_lock
(
&
sbi
->
s_lock
);
return
err
;
goto
restore_opts
;
}
ext2_sync_super
(
sb
,
es
,
1
);
ext2_sync_super
(
sb
,
es
,
1
);
}
else
{
}
else
{
__le32
ret
=
EXT2_HAS_RO_COMPAT_FEATURE
(
sb
,
__le32
ret
=
EXT2_HAS_RO_COMPAT_FEATURE
(
sb
,
~
EXT2_FEATURE_RO_COMPAT_SUPP
);
~
EXT2_FEATURE_RO_COMPAT_SUPP
);
if
(
ret
)
{
if
(
ret
)
{
spin_unlock
(
&
sbi
->
s_lock
);
ext2_msg
(
sb
,
KERN_WARNING
,
ext2_msg
(
sb
,
KERN_WARNING
,
"warning: couldn't remount RDWR because of "
"warning: couldn't remount RDWR because of "
"unsupported optional features (%x)."
,
"unsupported optional features (%x)."
,
le32_to_cpu
(
ret
));
le32_to_cpu
(
ret
));
err
=
-
EROFS
;
return
-
EROFS
;
goto
restore_opts
;
}
}
/*
/*
* Mounting a RDONLY partition read-write, so reread and
* Mounting a RDONLY partition read-write, so reread and
...
@@ -1394,14 +1387,16 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data)
...
@@ -1394,14 +1387,16 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data)
dquot_resume
(
sb
,
-
1
);
dquot_resume
(
sb
,
-
1
);
}
}
return
0
;
spin_lock
(
&
sbi
->
s_lock
);
restore_opts:
out_set:
sbi
->
s_mount_opt
=
old_opts
.
s_mount_opt
;
sbi
->
s_mount_opt
=
new_opts
.
s_mount_opt
;
sbi
->
s_resuid
=
old_opts
.
s_resuid
;
sbi
->
s_resuid
=
new_opts
.
s_resuid
;
sbi
->
s_resgid
=
old_opts
.
s_resgid
;
sbi
->
s_resgid
=
new_opts
.
s_resgid
;
sb
->
s_flags
=
old_sb_flags
;
sb
->
s_flags
=
(
sb
->
s_flags
&
~
MS_POSIXACL
)
|
((
sbi
->
s_mount_opt
&
EXT2_MOUNT_POSIX_ACL
)
?
MS_POSIXACL
:
0
);
spin_unlock
(
&
sbi
->
s_lock
);
spin_unlock
(
&
sbi
->
s_lock
);
return
err
;
return
0
;
}
}
static
int
ext2_statfs
(
struct
dentry
*
dentry
,
struct
kstatfs
*
buf
)
static
int
ext2_statfs
(
struct
dentry
*
dentry
,
struct
kstatfs
*
buf
)
...
...
fs/isofs/isofs.h
浏览文件 @
838bee9e
...
@@ -72,41 +72,41 @@ static inline struct iso_inode_info *ISOFS_I(struct inode *inode)
...
@@ -72,41 +72,41 @@ static inline struct iso_inode_info *ISOFS_I(struct inode *inode)
return
container_of
(
inode
,
struct
iso_inode_info
,
vfs_inode
);
return
container_of
(
inode
,
struct
iso_inode_info
,
vfs_inode
);
}
}
static
inline
int
isonum_711
(
char
*
p
)
static
inline
int
isonum_711
(
u8
*
p
)
{
{
return
*
(
u8
*
)
p
;
return
*
p
;
}
}
static
inline
int
isonum_712
(
char
*
p
)
static
inline
int
isonum_712
(
s8
*
p
)
{
{
return
*
(
s8
*
)
p
;
return
*
p
;
}
}
static
inline
unsigned
int
isonum_721
(
char
*
p
)
static
inline
unsigned
int
isonum_721
(
u8
*
p
)
{
{
return
get_unaligned_le16
(
p
);
return
get_unaligned_le16
(
p
);
}
}
static
inline
unsigned
int
isonum_722
(
char
*
p
)
static
inline
unsigned
int
isonum_722
(
u8
*
p
)
{
{
return
get_unaligned_be16
(
p
);
return
get_unaligned_be16
(
p
);
}
}
static
inline
unsigned
int
isonum_723
(
char
*
p
)
static
inline
unsigned
int
isonum_723
(
u8
*
p
)
{
{
/* Ignore bigendian datum due to broken mastering programs */
/* Ignore bigendian datum due to broken mastering programs */
return
get_unaligned_le16
(
p
);
return
get_unaligned_le16
(
p
);
}
}
static
inline
unsigned
int
isonum_731
(
char
*
p
)
static
inline
unsigned
int
isonum_731
(
u8
*
p
)
{
{
return
get_unaligned_le32
(
p
);
return
get_unaligned_le32
(
p
);
}
}
static
inline
unsigned
int
isonum_732
(
char
*
p
)
static
inline
unsigned
int
isonum_732
(
u8
*
p
)
{
{
return
get_unaligned_be32
(
p
);
return
get_unaligned_be32
(
p
);
}
}
static
inline
unsigned
int
isonum_733
(
char
*
p
)
static
inline
unsigned
int
isonum_733
(
u8
*
p
)
{
{
/* Ignore bigendian datum due to broken mastering programs */
/* Ignore bigendian datum due to broken mastering programs */
return
get_unaligned_le32
(
p
);
return
get_unaligned_le32
(
p
);
}
}
extern
int
iso_date
(
char
*
,
int
);
extern
int
iso_date
(
u8
*
,
int
);
struct
inode
;
/* To make gcc happy */
struct
inode
;
/* To make gcc happy */
...
...
fs/isofs/rock.h
浏览文件 @
838bee9e
...
@@ -6,78 +6,78 @@
...
@@ -6,78 +6,78 @@
*/
*/
struct
SU_SP_s
{
struct
SU_SP_s
{
unsigned
char
magic
[
2
];
__u8
magic
[
2
];
unsigned
char
skip
;
__u8
skip
;
}
__attribute__
((
packed
));
}
__attribute__
((
packed
));
struct
SU_CE_s
{
struct
SU_CE_s
{
char
extent
[
8
];
__u8
extent
[
8
];
char
offset
[
8
];
__u8
offset
[
8
];
char
size
[
8
];
__u8
size
[
8
];
};
};
struct
SU_ER_s
{
struct
SU_ER_s
{
unsigned
char
len_id
;
__u8
len_id
;
unsigned
char
len_des
;
__u8
len_des
;
unsigned
char
len_src
;
__u8
len_src
;
unsigned
char
ext_ver
;
__u8
ext_ver
;
char
data
[
0
];
__u8
data
[
0
];
}
__attribute__
((
packed
));
}
__attribute__
((
packed
));
struct
RR_RR_s
{
struct
RR_RR_s
{
char
flags
[
1
];
__u8
flags
[
1
];
}
__attribute__
((
packed
));
}
__attribute__
((
packed
));
struct
RR_PX_s
{
struct
RR_PX_s
{
char
mode
[
8
];
__u8
mode
[
8
];
char
n_links
[
8
];
__u8
n_links
[
8
];
char
uid
[
8
];
__u8
uid
[
8
];
char
gid
[
8
];
__u8
gid
[
8
];
};
};
struct
RR_PN_s
{
struct
RR_PN_s
{
char
dev_high
[
8
];
__u8
dev_high
[
8
];
char
dev_low
[
8
];
__u8
dev_low
[
8
];
};
};
struct
SL_component
{
struct
SL_component
{
unsigned
char
flags
;
__u8
flags
;
unsigned
char
len
;
__u8
len
;
char
text
[
0
];
__u8
text
[
0
];
}
__attribute__
((
packed
));
}
__attribute__
((
packed
));
struct
RR_SL_s
{
struct
RR_SL_s
{
unsigned
char
flags
;
__u8
flags
;
struct
SL_component
link
;
struct
SL_component
link
;
}
__attribute__
((
packed
));
}
__attribute__
((
packed
));
struct
RR_NM_s
{
struct
RR_NM_s
{
unsigned
char
flags
;
__u8
flags
;
char
name
[
0
];
char
name
[
0
];
}
__attribute__
((
packed
));
}
__attribute__
((
packed
));
struct
RR_CL_s
{
struct
RR_CL_s
{
char
location
[
8
];
__u8
location
[
8
];
};
};
struct
RR_PL_s
{
struct
RR_PL_s
{
char
location
[
8
];
__u8
location
[
8
];
};
};
struct
stamp
{
struct
stamp
{
char
time
[
7
];
__u8
time
[
7
];
/* actually 6 unsigned, 1 signed */
}
__attribute__
((
packed
));
}
__attribute__
((
packed
));
struct
RR_TF_s
{
struct
RR_TF_s
{
char
flags
;
__u8
flags
;
struct
stamp
times
[
0
];
/* Variable number of these beasts */
struct
stamp
times
[
0
];
/* Variable number of these beasts */
}
__attribute__
((
packed
));
}
__attribute__
((
packed
));
/* Linux-specific extension for transparent decompression */
/* Linux-specific extension for transparent decompression */
struct
RR_ZF_s
{
struct
RR_ZF_s
{
char
algorithm
[
2
];
__u8
algorithm
[
2
];
char
parms
[
2
];
__u8
parms
[
2
];
char
real_size
[
8
];
__u8
real_size
[
8
];
};
};
/*
/*
...
@@ -93,9 +93,9 @@ struct RR_ZF_s {
...
@@ -93,9 +93,9 @@ struct RR_ZF_s {
#define TF_LONG_FORM 128
#define TF_LONG_FORM 128
struct
rock_ridge
{
struct
rock_ridge
{
char
signature
[
2
];
__u8
signature
[
2
];
unsigned
char
len
;
__u8
len
;
unsigned
char
version
;
__u8
version
;
union
{
union
{
struct
SU_SP_s
SP
;
struct
SU_SP_s
SP
;
struct
SU_CE_s
CE
;
struct
SU_CE_s
CE
;
...
...
fs/isofs/util.c
浏览文件 @
838bee9e
...
@@ -15,7 +15,7 @@
...
@@ -15,7 +15,7 @@
* to GMT. Thus we should always be correct.
* to GMT. Thus we should always be correct.
*/
*/
int
iso_date
(
char
*
p
,
int
flag
)
int
iso_date
(
u8
*
p
,
int
flag
)
{
{
int
year
,
month
,
day
,
hour
,
minute
,
second
,
tz
;
int
year
,
month
,
day
,
hour
,
minute
,
second
,
tz
;
int
crtime
;
int
crtime
;
...
...
fs/notify/fanotify/fanotify.c
浏览文件 @
838bee9e
...
@@ -9,6 +9,7 @@
...
@@ -9,6 +9,7 @@
#include <linux/sched/user.h>
#include <linux/sched/user.h>
#include <linux/types.h>
#include <linux/types.h>
#include <linux/wait.h>
#include <linux/wait.h>
#include <linux/audit.h>
#include "fanotify.h"
#include "fanotify.h"
...
@@ -78,7 +79,7 @@ static int fanotify_get_response(struct fsnotify_group *group,
...
@@ -78,7 +79,7 @@ static int fanotify_get_response(struct fsnotify_group *group,
fsnotify_finish_user_wait
(
iter_info
);
fsnotify_finish_user_wait
(
iter_info
);
out:
out:
/* userspace responded, convert to something usable */
/* userspace responded, convert to something usable */
switch
(
event
->
response
)
{
switch
(
event
->
response
&
~
FAN_AUDIT
)
{
case
FAN_ALLOW
:
case
FAN_ALLOW
:
ret
=
0
;
ret
=
0
;
break
;
break
;
...
@@ -86,6 +87,11 @@ static int fanotify_get_response(struct fsnotify_group *group,
...
@@ -86,6 +87,11 @@ static int fanotify_get_response(struct fsnotify_group *group,
default:
default:
ret
=
-
EPERM
;
ret
=
-
EPERM
;
}
}
/* Check if the response should be audited */
if
(
event
->
response
&
FAN_AUDIT
)
audit_fanotify
(
event
->
response
&
~
FAN_AUDIT
);
event
->
response
=
0
;
event
->
response
=
0
;
pr_debug
(
"%s: group=%p event=%p about to return ret=%d
\n
"
,
__func__
,
pr_debug
(
"%s: group=%p event=%p about to return ret=%d
\n
"
,
__func__
,
...
...
fs/notify/fanotify/fanotify_user.c
浏览文件 @
838bee9e
...
@@ -179,7 +179,7 @@ static int process_access_response(struct fsnotify_group *group,
...
@@ -179,7 +179,7 @@ static int process_access_response(struct fsnotify_group *group,
* userspace can send a valid response or we will clean it up after the
* userspace can send a valid response or we will clean it up after the
* timeout
* timeout
*/
*/
switch
(
response
)
{
switch
(
response
&
~
FAN_AUDIT
)
{
case
FAN_ALLOW
:
case
FAN_ALLOW
:
case
FAN_DENY
:
case
FAN_DENY
:
break
;
break
;
...
@@ -190,6 +190,9 @@ static int process_access_response(struct fsnotify_group *group,
...
@@ -190,6 +190,9 @@ static int process_access_response(struct fsnotify_group *group,
if
(
fd
<
0
)
if
(
fd
<
0
)
return
-
EINVAL
;
return
-
EINVAL
;
if
((
response
&
FAN_AUDIT
)
&&
!
group
->
fanotify_data
.
audit
)
return
-
EINVAL
;
event
=
dequeue_event
(
group
,
fd
);
event
=
dequeue_event
(
group
,
fd
);
if
(
!
event
)
if
(
!
event
)
return
-
ENOENT
;
return
-
ENOENT
;
...
@@ -721,7 +724,11 @@ SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags)
...
@@ -721,7 +724,11 @@ SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags)
if
(
!
capable
(
CAP_SYS_ADMIN
))
if
(
!
capable
(
CAP_SYS_ADMIN
))
return
-
EPERM
;
return
-
EPERM
;
#ifdef CONFIG_AUDITSYSCALL
if
(
flags
&
~
(
FAN_ALL_INIT_FLAGS
|
FAN_ENABLE_AUDIT
))
#else
if
(
flags
&
~
FAN_ALL_INIT_FLAGS
)
if
(
flags
&
~
FAN_ALL_INIT_FLAGS
)
#endif
return
-
EINVAL
;
return
-
EINVAL
;
if
(
event_f_flags
&
~
FANOTIFY_INIT_ALL_EVENT_F_BITS
)
if
(
event_f_flags
&
~
FANOTIFY_INIT_ALL_EVENT_F_BITS
)
...
@@ -805,6 +812,13 @@ SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags)
...
@@ -805,6 +812,13 @@ SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags)
group
->
fanotify_data
.
max_marks
=
FANOTIFY_DEFAULT_MAX_MARKS
;
group
->
fanotify_data
.
max_marks
=
FANOTIFY_DEFAULT_MAX_MARKS
;
}
}
if
(
flags
&
FAN_ENABLE_AUDIT
)
{
fd
=
-
EPERM
;
if
(
!
capable
(
CAP_AUDIT_WRITE
))
goto
out_destroy_group
;
group
->
fanotify_data
.
audit
=
true
;
}
fd
=
anon_inode_getfd
(
"[fanotify]"
,
&
fanotify_fops
,
group
,
f_flags
);
fd
=
anon_inode_getfd
(
"[fanotify]"
,
&
fanotify_fops
,
group
,
f_flags
);
if
(
fd
<
0
)
if
(
fd
<
0
)
goto
out_destroy_group
;
goto
out_destroy_group
;
...
...
fs/notify/fdinfo.c
浏览文件 @
838bee9e
...
@@ -156,6 +156,9 @@ void fanotify_show_fdinfo(struct seq_file *m, struct file *f)
...
@@ -156,6 +156,9 @@ void fanotify_show_fdinfo(struct seq_file *m, struct file *f)
if
(
group
->
fanotify_data
.
max_marks
==
UINT_MAX
)
if
(
group
->
fanotify_data
.
max_marks
==
UINT_MAX
)
flags
|=
FAN_UNLIMITED_MARKS
;
flags
|=
FAN_UNLIMITED_MARKS
;
if
(
group
->
fanotify_data
.
audit
)
flags
|=
FAN_ENABLE_AUDIT
;
seq_printf
(
m
,
"fanotify flags:%x event-flags:%x
\n
"
,
seq_printf
(
m
,
"fanotify flags:%x event-flags:%x
\n
"
,
flags
,
group
->
fanotify_data
.
f_flags
);
flags
,
group
->
fanotify_data
.
f_flags
);
...
...
fs/quota/dquot.c
浏览文件 @
838bee9e
...
@@ -644,8 +644,15 @@ int dquot_writeback_dquots(struct super_block *sb, int type)
...
@@ -644,8 +644,15 @@ int dquot_writeback_dquots(struct super_block *sb, int type)
spin_unlock
(
&
dq_list_lock
);
spin_unlock
(
&
dq_list_lock
);
dqstats_inc
(
DQST_LOOKUPS
);
dqstats_inc
(
DQST_LOOKUPS
);
err
=
sb
->
dq_op
->
write_dquot
(
dquot
);
err
=
sb
->
dq_op
->
write_dquot
(
dquot
);
if
(
!
ret
&&
err
)
if
(
err
)
{
ret
=
err
;
/*
* Clear dirty bit anyway to avoid infinite
* loop here.
*/
clear_dquot_dirty
(
dquot
);
if
(
!
ret
)
ret
=
err
;
}
dqput
(
dquot
);
dqput
(
dquot
);
spin_lock
(
&
dq_list_lock
);
spin_lock
(
&
dq_list_lock
);
}
}
...
@@ -2138,7 +2145,7 @@ int dquot_file_open(struct inode *inode, struct file *file)
...
@@ -2138,7 +2145,7 @@ int dquot_file_open(struct inode *inode, struct file *file)
error
=
generic_file_open
(
inode
,
file
);
error
=
generic_file_open
(
inode
,
file
);
if
(
!
error
&&
(
file
->
f_mode
&
FMODE_WRITE
))
if
(
!
error
&&
(
file
->
f_mode
&
FMODE_WRITE
))
dquot_initialize
(
inode
);
error
=
dquot_initialize
(
inode
);
return
error
;
return
error
;
}
}
EXPORT_SYMBOL
(
dquot_file_open
);
EXPORT_SYMBOL
(
dquot_file_open
);
...
...
fs/udf/balloc.c
浏览文件 @
838bee9e
...
@@ -58,7 +58,7 @@ static int __load_block_bitmap(struct super_block *sb,
...
@@ -58,7 +58,7 @@ static int __load_block_bitmap(struct super_block *sb,
int
nr_groups
=
bitmap
->
s_nr_groups
;
int
nr_groups
=
bitmap
->
s_nr_groups
;
if
(
block_group
>=
nr_groups
)
{
if
(
block_group
>=
nr_groups
)
{
udf_debug
(
"block_group (%
d
) > nr_groups (%d)
\n
"
,
udf_debug
(
"block_group (%
u
) > nr_groups (%d)
\n
"
,
block_group
,
nr_groups
);
block_group
,
nr_groups
);
}
}
...
@@ -122,7 +122,7 @@ static void udf_bitmap_free_blocks(struct super_block *sb,
...
@@ -122,7 +122,7 @@ static void udf_bitmap_free_blocks(struct super_block *sb,
partmap
=
&
sbi
->
s_partmaps
[
bloc
->
partitionReferenceNum
];
partmap
=
&
sbi
->
s_partmaps
[
bloc
->
partitionReferenceNum
];
if
(
bloc
->
logicalBlockNum
+
count
<
count
||
if
(
bloc
->
logicalBlockNum
+
count
<
count
||
(
bloc
->
logicalBlockNum
+
count
)
>
partmap
->
s_partition_len
)
{
(
bloc
->
logicalBlockNum
+
count
)
>
partmap
->
s_partition_len
)
{
udf_debug
(
"%
d < %d || %d + %d > %d
\n
"
,
udf_debug
(
"%
u < %d || %u + %u > %u
\n
"
,
bloc
->
logicalBlockNum
,
0
,
bloc
->
logicalBlockNum
,
0
,
bloc
->
logicalBlockNum
,
count
,
bloc
->
logicalBlockNum
,
count
,
partmap
->
s_partition_len
);
partmap
->
s_partition_len
);
...
@@ -151,9 +151,9 @@ static void udf_bitmap_free_blocks(struct super_block *sb,
...
@@ -151,9 +151,9 @@ static void udf_bitmap_free_blocks(struct super_block *sb,
bh
=
bitmap
->
s_block_bitmap
[
bitmap_nr
];
bh
=
bitmap
->
s_block_bitmap
[
bitmap_nr
];
for
(
i
=
0
;
i
<
count
;
i
++
)
{
for
(
i
=
0
;
i
<
count
;
i
++
)
{
if
(
udf_set_bit
(
bit
+
i
,
bh
->
b_data
))
{
if
(
udf_set_bit
(
bit
+
i
,
bh
->
b_data
))
{
udf_debug
(
"bit %l
d
already set
\n
"
,
bit
+
i
);
udf_debug
(
"bit %l
u
already set
\n
"
,
bit
+
i
);
udf_debug
(
"byte=%2x
\n
"
,
udf_debug
(
"byte=%2x
\n
"
,
((
char
*
)
bh
->
b_data
)[(
bit
+
i
)
>>
3
]);
((
__u8
*
)
bh
->
b_data
)[(
bit
+
i
)
>>
3
]);
}
}
}
}
udf_add_free_space
(
sb
,
sbi
->
s_partition
,
count
);
udf_add_free_space
(
sb
,
sbi
->
s_partition
,
count
);
...
@@ -218,16 +218,18 @@ static int udf_bitmap_prealloc_blocks(struct super_block *sb,
...
@@ -218,16 +218,18 @@ static int udf_bitmap_prealloc_blocks(struct super_block *sb,
return
alloc_count
;
return
alloc_count
;
}
}
static
in
t
udf_bitmap_new_block
(
struct
super_block
*
sb
,
static
udf_pblk_
t
udf_bitmap_new_block
(
struct
super_block
*
sb
,
struct
udf_bitmap
*
bitmap
,
uint16_t
partition
,
struct
udf_bitmap
*
bitmap
,
uint16_t
partition
,
uint32_t
goal
,
int
*
err
)
uint32_t
goal
,
int
*
err
)
{
{
struct
udf_sb_info
*
sbi
=
UDF_SB
(
sb
);
struct
udf_sb_info
*
sbi
=
UDF_SB
(
sb
);
int
newbit
,
bit
=
0
,
block
,
block_group
,
group_start
;
int
newbit
,
bit
=
0
;
udf_pblk_t
block
;
int
block_group
,
group_start
;
int
end_goal
,
nr_groups
,
bitmap_nr
,
i
;
int
end_goal
,
nr_groups
,
bitmap_nr
,
i
;
struct
buffer_head
*
bh
=
NULL
;
struct
buffer_head
*
bh
=
NULL
;
char
*
ptr
;
char
*
ptr
;
in
t
newblock
=
0
;
udf_pblk_
t
newblock
=
0
;
*
err
=
-
ENOSPC
;
*
err
=
-
ENOSPC
;
mutex_lock
(
&
sbi
->
s_alloc_mutex
);
mutex_lock
(
&
sbi
->
s_alloc_mutex
);
...
@@ -362,7 +364,7 @@ static void udf_table_free_blocks(struct super_block *sb,
...
@@ -362,7 +364,7 @@ static void udf_table_free_blocks(struct super_block *sb,
partmap
=
&
sbi
->
s_partmaps
[
bloc
->
partitionReferenceNum
];
partmap
=
&
sbi
->
s_partmaps
[
bloc
->
partitionReferenceNum
];
if
(
bloc
->
logicalBlockNum
+
count
<
count
||
if
(
bloc
->
logicalBlockNum
+
count
<
count
||
(
bloc
->
logicalBlockNum
+
count
)
>
partmap
->
s_partition_len
)
{
(
bloc
->
logicalBlockNum
+
count
)
>
partmap
->
s_partition_len
)
{
udf_debug
(
"%
d < %d || %d + %d > %d
\n
"
,
udf_debug
(
"%
u < %d || %u + %u > %u
\n
"
,
bloc
->
logicalBlockNum
,
0
,
bloc
->
logicalBlockNum
,
0
,
bloc
->
logicalBlockNum
,
count
,
bloc
->
logicalBlockNum
,
count
,
partmap
->
s_partition_len
);
partmap
->
s_partition_len
);
...
@@ -515,7 +517,7 @@ static int udf_table_prealloc_blocks(struct super_block *sb,
...
@@ -515,7 +517,7 @@ static int udf_table_prealloc_blocks(struct super_block *sb,
while
(
first_block
!=
eloc
.
logicalBlockNum
&&
while
(
first_block
!=
eloc
.
logicalBlockNum
&&
(
etype
=
udf_next_aext
(
table
,
&
epos
,
&
eloc
,
&
elen
,
1
))
!=
-
1
)
{
(
etype
=
udf_next_aext
(
table
,
&
epos
,
&
eloc
,
&
elen
,
1
))
!=
-
1
)
{
udf_debug
(
"eloc=%
d, elen=%d, first_block=%d
\n
"
,
udf_debug
(
"eloc=%
u, elen=%u, first_block=%u
\n
"
,
eloc
.
logicalBlockNum
,
elen
,
first_block
);
eloc
.
logicalBlockNum
,
elen
,
first_block
);
;
/* empty loop body */
;
/* empty loop body */
}
}
...
@@ -545,13 +547,14 @@ static int udf_table_prealloc_blocks(struct super_block *sb,
...
@@ -545,13 +547,14 @@ static int udf_table_prealloc_blocks(struct super_block *sb,
return
alloc_count
;
return
alloc_count
;
}
}
static
in
t
udf_table_new_block
(
struct
super_block
*
sb
,
static
udf_pblk_
t
udf_table_new_block
(
struct
super_block
*
sb
,
struct
inode
*
table
,
uint16_t
partition
,
struct
inode
*
table
,
uint16_t
partition
,
uint32_t
goal
,
int
*
err
)
uint32_t
goal
,
int
*
err
)
{
{
struct
udf_sb_info
*
sbi
=
UDF_SB
(
sb
);
struct
udf_sb_info
*
sbi
=
UDF_SB
(
sb
);
uint32_t
spread
=
0xFFFFFFFF
,
nspread
=
0xFFFFFFFF
;
uint32_t
spread
=
0xFFFFFFFF
,
nspread
=
0xFFFFFFFF
;
uint32_t
newblock
=
0
,
adsize
;
udf_pblk_t
newblock
=
0
;
uint32_t
adsize
;
uint32_t
elen
,
goal_elen
=
0
;
uint32_t
elen
,
goal_elen
=
0
;
struct
kernel_lb_addr
eloc
,
uninitialized_var
(
goal_eloc
);
struct
kernel_lb_addr
eloc
,
uninitialized_var
(
goal_eloc
);
struct
extent_position
epos
,
goal_epos
;
struct
extent_position
epos
,
goal_epos
;
...
@@ -700,12 +703,12 @@ inline int udf_prealloc_blocks(struct super_block *sb,
...
@@ -700,12 +703,12 @@ inline int udf_prealloc_blocks(struct super_block *sb,
return
allocated
;
return
allocated
;
}
}
inline
in
t
udf_new_block
(
struct
super_block
*
sb
,
inline
udf_pblk_
t
udf_new_block
(
struct
super_block
*
sb
,
struct
inode
*
inode
,
struct
inode
*
inode
,
uint16_t
partition
,
uint32_t
goal
,
int
*
err
)
uint16_t
partition
,
uint32_t
goal
,
int
*
err
)
{
{
struct
udf_part_map
*
map
=
&
UDF_SB
(
sb
)
->
s_partmaps
[
partition
];
struct
udf_part_map
*
map
=
&
UDF_SB
(
sb
)
->
s_partmaps
[
partition
];
in
t
block
;
udf_pblk_
t
block
;
if
(
map
->
s_partition_flags
&
UDF_PART_FLAG_UNALLOC_BITMAP
)
if
(
map
->
s_partition_flags
&
UDF_PART_FLAG_UNALLOC_BITMAP
)
block
=
udf_bitmap_new_block
(
sb
,
block
=
udf_bitmap_new_block
(
sb
,
...
...
fs/udf/dir.c
浏览文件 @
838bee9e
...
@@ -43,7 +43,7 @@ static int udf_readdir(struct file *file, struct dir_context *ctx)
...
@@ -43,7 +43,7 @@ static int udf_readdir(struct file *file, struct dir_context *ctx)
struct
udf_fileident_bh
fibh
=
{
.
sbh
=
NULL
,
.
ebh
=
NULL
};
struct
udf_fileident_bh
fibh
=
{
.
sbh
=
NULL
,
.
ebh
=
NULL
};
struct
fileIdentDesc
*
fi
=
NULL
;
struct
fileIdentDesc
*
fi
=
NULL
;
struct
fileIdentDesc
cfi
;
struct
fileIdentDesc
cfi
;
in
t
block
,
iblock
;
udf_pblk_
t
block
,
iblock
;
loff_t
nf_pos
;
loff_t
nf_pos
;
int
flen
;
int
flen
;
unsigned
char
*
fname
=
NULL
,
*
copy_name
=
NULL
;
unsigned
char
*
fname
=
NULL
,
*
copy_name
=
NULL
;
...
...
fs/udf/directory.c
浏览文件 @
838bee9e
...
@@ -26,7 +26,8 @@ struct fileIdentDesc *udf_fileident_read(struct inode *dir, loff_t *nf_pos,
...
@@ -26,7 +26,8 @@ struct fileIdentDesc *udf_fileident_read(struct inode *dir, loff_t *nf_pos,
sector_t
*
offset
)
sector_t
*
offset
)
{
{
struct
fileIdentDesc
*
fi
;
struct
fileIdentDesc
*
fi
;
int
i
,
num
,
block
;
int
i
,
num
;
udf_pblk_t
block
;
struct
buffer_head
*
tmp
,
*
bha
[
16
];
struct
buffer_head
*
tmp
,
*
bha
[
16
];
struct
udf_inode_info
*
iinfo
=
UDF_I
(
dir
);
struct
udf_inode_info
*
iinfo
=
UDF_I
(
dir
);
...
@@ -51,7 +52,7 @@ struct fileIdentDesc *udf_fileident_read(struct inode *dir, loff_t *nf_pos,
...
@@ -51,7 +52,7 @@ struct fileIdentDesc *udf_fileident_read(struct inode *dir, loff_t *nf_pos,
}
}
if
(
fibh
->
eoffset
==
dir
->
i_sb
->
s_blocksize
)
{
if
(
fibh
->
eoffset
==
dir
->
i_sb
->
s_blocksize
)
{
in
t
lextoffset
=
epos
->
offset
;
uint32_
t
lextoffset
=
epos
->
offset
;
unsigned
char
blocksize_bits
=
dir
->
i_sb
->
s_blocksize_bits
;
unsigned
char
blocksize_bits
=
dir
->
i_sb
->
s_blocksize_bits
;
if
(
udf_next_aext
(
dir
,
epos
,
eloc
,
elen
,
1
)
!=
if
(
udf_next_aext
(
dir
,
epos
,
eloc
,
elen
,
1
)
!=
...
@@ -110,7 +111,7 @@ struct fileIdentDesc *udf_fileident_read(struct inode *dir, loff_t *nf_pos,
...
@@ -110,7 +111,7 @@ struct fileIdentDesc *udf_fileident_read(struct inode *dir, loff_t *nf_pos,
memcpy
((
uint8_t
*
)
cfi
,
(
uint8_t
*
)
fi
,
memcpy
((
uint8_t
*
)
cfi
,
(
uint8_t
*
)
fi
,
sizeof
(
struct
fileIdentDesc
));
sizeof
(
struct
fileIdentDesc
));
}
else
if
(
fibh
->
eoffset
>
dir
->
i_sb
->
s_blocksize
)
{
}
else
if
(
fibh
->
eoffset
>
dir
->
i_sb
->
s_blocksize
)
{
in
t
lextoffset
=
epos
->
offset
;
uint32_
t
lextoffset
=
epos
->
offset
;
if
(
udf_next_aext
(
dir
,
epos
,
eloc
,
elen
,
1
)
!=
if
(
udf_next_aext
(
dir
,
epos
,
eloc
,
elen
,
1
)
!=
(
EXT_RECORDED_ALLOCATED
>>
30
))
(
EXT_RECORDED_ALLOCATED
>>
30
))
...
@@ -175,7 +176,7 @@ struct fileIdentDesc *udf_get_fileident(void *buffer, int bufsize, int *offset)
...
@@ -175,7 +176,7 @@ struct fileIdentDesc *udf_get_fileident(void *buffer, int bufsize, int *offset)
if
(
fi
->
descTag
.
tagIdent
!=
cpu_to_le16
(
TAG_IDENT_FID
))
{
if
(
fi
->
descTag
.
tagIdent
!=
cpu_to_le16
(
TAG_IDENT_FID
))
{
udf_debug
(
"0x%x != TAG_IDENT_FID
\n
"
,
udf_debug
(
"0x%x != TAG_IDENT_FID
\n
"
,
le16_to_cpu
(
fi
->
descTag
.
tagIdent
));
le16_to_cpu
(
fi
->
descTag
.
tagIdent
));
udf_debug
(
"offset: %
u sizeof: %lu bufsize: %u
\n
"
,
udf_debug
(
"offset: %
d sizeof: %lu bufsize: %d
\n
"
,
*
offset
,
(
unsigned
long
)
sizeof
(
struct
fileIdentDesc
),
*
offset
,
(
unsigned
long
)
sizeof
(
struct
fileIdentDesc
),
bufsize
);
bufsize
);
return
NULL
;
return
NULL
;
...
...
fs/udf/ialloc.c
浏览文件 @
838bee9e
...
@@ -50,7 +50,7 @@ struct inode *udf_new_inode(struct inode *dir, umode_t mode)
...
@@ -50,7 +50,7 @@ struct inode *udf_new_inode(struct inode *dir, umode_t mode)
struct
super_block
*
sb
=
dir
->
i_sb
;
struct
super_block
*
sb
=
dir
->
i_sb
;
struct
udf_sb_info
*
sbi
=
UDF_SB
(
sb
);
struct
udf_sb_info
*
sbi
=
UDF_SB
(
sb
);
struct
inode
*
inode
;
struct
inode
*
inode
;
in
t
block
;
udf_pblk_
t
block
;
uint32_t
start
=
UDF_I
(
dir
)
->
i_location
.
logicalBlockNum
;
uint32_t
start
=
UDF_I
(
dir
)
->
i_location
.
logicalBlockNum
;
struct
udf_inode_info
*
iinfo
;
struct
udf_inode_info
*
iinfo
;
struct
udf_inode_info
*
dinfo
=
UDF_I
(
dir
);
struct
udf_inode_info
*
dinfo
=
UDF_I
(
dir
);
...
...
fs/udf/inode.c
浏览文件 @
838bee9e
...
@@ -52,7 +52,7 @@ static int udf_alloc_i_data(struct inode *inode, size_t size);
...
@@ -52,7 +52,7 @@ static int udf_alloc_i_data(struct inode *inode, size_t size);
static
sector_t
inode_getblk
(
struct
inode
*
,
sector_t
,
int
*
,
int
*
);
static
sector_t
inode_getblk
(
struct
inode
*
,
sector_t
,
int
*
,
int
*
);
static
int8_t
udf_insert_aext
(
struct
inode
*
,
struct
extent_position
,
static
int8_t
udf_insert_aext
(
struct
inode
*
,
struct
extent_position
,
struct
kernel_lb_addr
,
uint32_t
);
struct
kernel_lb_addr
,
uint32_t
);
static
void
udf_split_extents
(
struct
inode
*
,
int
*
,
int
,
in
t
,
static
void
udf_split_extents
(
struct
inode
*
,
int
*
,
int
,
udf_pblk_
t
,
struct
kernel_long_ad
*
,
int
*
);
struct
kernel_long_ad
*
,
int
*
);
static
void
udf_prealloc_extents
(
struct
inode
*
,
int
,
int
,
static
void
udf_prealloc_extents
(
struct
inode
*
,
int
,
int
,
struct
kernel_long_ad
*
,
int
*
);
struct
kernel_long_ad
*
,
int
*
);
...
@@ -316,10 +316,10 @@ int udf_expand_file_adinicb(struct inode *inode)
...
@@ -316,10 +316,10 @@ int udf_expand_file_adinicb(struct inode *inode)
return
err
;
return
err
;
}
}
struct
buffer_head
*
udf_expand_dir_adinicb
(
struct
inode
*
inode
,
int
*
block
,
struct
buffer_head
*
udf_expand_dir_adinicb
(
struct
inode
*
inode
,
int
*
err
)
udf_pblk_t
*
block
,
int
*
err
)
{
{
in
t
newblock
;
udf_pblk_
t
newblock
;
struct
buffer_head
*
dbh
=
NULL
;
struct
buffer_head
*
dbh
=
NULL
;
struct
kernel_lb_addr
eloc
;
struct
kernel_lb_addr
eloc
;
uint8_t
alloctype
;
uint8_t
alloctype
;
...
@@ -446,7 +446,7 @@ static int udf_get_block(struct inode *inode, sector_t block,
...
@@ -446,7 +446,7 @@ static int udf_get_block(struct inode *inode, sector_t block,
return
err
;
return
err
;
}
}
static
struct
buffer_head
*
udf_getblk
(
struct
inode
*
inode
,
long
block
,
static
struct
buffer_head
*
udf_getblk
(
struct
inode
*
inode
,
udf_pblk_t
block
,
int
create
,
int
*
err
)
int
create
,
int
*
err
)
{
{
struct
buffer_head
*
bh
;
struct
buffer_head
*
bh
;
...
@@ -480,7 +480,7 @@ static int udf_do_extend_file(struct inode *inode,
...
@@ -480,7 +480,7 @@ static int udf_do_extend_file(struct inode *inode,
int
count
=
0
,
fake
=
!
(
last_ext
->
extLength
&
UDF_EXTENT_LENGTH_MASK
);
int
count
=
0
,
fake
=
!
(
last_ext
->
extLength
&
UDF_EXTENT_LENGTH_MASK
);
struct
super_block
*
sb
=
inode
->
i_sb
;
struct
super_block
*
sb
=
inode
->
i_sb
;
struct
kernel_lb_addr
prealloc_loc
=
{};
struct
kernel_lb_addr
prealloc_loc
=
{};
in
t
prealloc_len
=
0
;
uint32_
t
prealloc_len
=
0
;
struct
udf_inode_info
*
iinfo
;
struct
udf_inode_info
*
iinfo
;
int
err
;
int
err
;
...
@@ -663,11 +663,11 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
...
@@ -663,11 +663,11 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
struct
kernel_lb_addr
eloc
,
tmpeloc
;
struct
kernel_lb_addr
eloc
,
tmpeloc
;
int
c
=
1
;
int
c
=
1
;
loff_t
lbcount
=
0
,
b_off
=
0
;
loff_t
lbcount
=
0
,
b_off
=
0
;
u
int32
_t
newblocknum
,
newblock
;
u
df_pblk
_t
newblocknum
,
newblock
;
sector_t
offset
=
0
;
sector_t
offset
=
0
;
int8_t
etype
;
int8_t
etype
;
struct
udf_inode_info
*
iinfo
=
UDF_I
(
inode
);
struct
udf_inode_info
*
iinfo
=
UDF_I
(
inode
);
in
t
goal
=
0
,
pgoal
=
iinfo
->
i_location
.
logicalBlockNum
;
udf_pblk_
t
goal
=
0
,
pgoal
=
iinfo
->
i_location
.
logicalBlockNum
;
int
lastblock
=
0
;
int
lastblock
=
0
;
bool
isBeyondEOF
;
bool
isBeyondEOF
;
...
@@ -879,8 +879,8 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
...
@@ -879,8 +879,8 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
}
}
static
void
udf_split_extents
(
struct
inode
*
inode
,
int
*
c
,
int
offset
,
static
void
udf_split_extents
(
struct
inode
*
inode
,
int
*
c
,
int
offset
,
int
newblocknum
,
struct
kernel_long_ad
*
laarr
,
udf_pblk_t
newblocknum
,
int
*
endnum
)
struct
kernel_long_ad
*
laarr
,
int
*
endnum
)
{
{
unsigned
long
blocksize
=
inode
->
i_sb
->
s_blocksize
;
unsigned
long
blocksize
=
inode
->
i_sb
->
s_blocksize
;
unsigned
char
blocksize_bits
=
inode
->
i_sb
->
s_blocksize_bits
;
unsigned
char
blocksize_bits
=
inode
->
i_sb
->
s_blocksize_bits
;
...
@@ -1166,7 +1166,7 @@ static void udf_update_extents(struct inode *inode, struct kernel_long_ad *laarr
...
@@ -1166,7 +1166,7 @@ static void udf_update_extents(struct inode *inode, struct kernel_long_ad *laarr
}
}
}
}
struct
buffer_head
*
udf_bread
(
struct
inode
*
inode
,
in
t
block
,
struct
buffer_head
*
udf_bread
(
struct
inode
*
inode
,
udf_pblk_
t
block
,
int
create
,
int
*
err
)
int
create
,
int
*
err
)
{
{
struct
buffer_head
*
bh
=
NULL
;
struct
buffer_head
*
bh
=
NULL
;
...
@@ -1193,7 +1193,7 @@ int udf_setsize(struct inode *inode, loff_t newsize)
...
@@ -1193,7 +1193,7 @@ int udf_setsize(struct inode *inode, loff_t newsize)
{
{
int
err
;
int
err
;
struct
udf_inode_info
*
iinfo
;
struct
udf_inode_info
*
iinfo
;
int
bsize
=
i_blocksize
(
inode
);
unsigned
int
bsize
=
i_blocksize
(
inode
);
if
(
!
(
S_ISREG
(
inode
->
i_mode
)
||
S_ISDIR
(
inode
->
i_mode
)
||
if
(
!
(
S_ISREG
(
inode
->
i_mode
)
||
S_ISDIR
(
inode
->
i_mode
)
||
S_ISLNK
(
inode
->
i_mode
)))
S_ISLNK
(
inode
->
i_mode
)))
...
@@ -1278,14 +1278,14 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode)
...
@@ -1278,14 +1278,14 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode)
reread:
reread:
if
(
iloc
->
partitionReferenceNum
>=
sbi
->
s_partitions
)
{
if
(
iloc
->
partitionReferenceNum
>=
sbi
->
s_partitions
)
{
udf_debug
(
"partition reference: %
d > logical volume partitions: %d
\n
"
,
udf_debug
(
"partition reference: %
u > logical volume partitions: %u
\n
"
,
iloc
->
partitionReferenceNum
,
sbi
->
s_partitions
);
iloc
->
partitionReferenceNum
,
sbi
->
s_partitions
);
return
-
EIO
;
return
-
EIO
;
}
}
if
(
iloc
->
logicalBlockNum
>=
if
(
iloc
->
logicalBlockNum
>=
sbi
->
s_partmaps
[
iloc
->
partitionReferenceNum
].
s_partition_len
)
{
sbi
->
s_partmaps
[
iloc
->
partitionReferenceNum
].
s_partition_len
)
{
udf_debug
(
"block=%
d, partition=%d
out of range
\n
"
,
udf_debug
(
"block=%
u, partition=%u
out of range
\n
"
,
iloc
->
logicalBlockNum
,
iloc
->
partitionReferenceNum
);
iloc
->
logicalBlockNum
,
iloc
->
partitionReferenceNum
);
return
-
EIO
;
return
-
EIO
;
}
}
...
@@ -1304,13 +1304,13 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode)
...
@@ -1304,13 +1304,13 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode)
*/
*/
bh
=
udf_read_ptagged
(
inode
->
i_sb
,
iloc
,
0
,
&
ident
);
bh
=
udf_read_ptagged
(
inode
->
i_sb
,
iloc
,
0
,
&
ident
);
if
(
!
bh
)
{
if
(
!
bh
)
{
udf_err
(
inode
->
i_sb
,
"(ino %l
d
) failed !bh
\n
"
,
inode
->
i_ino
);
udf_err
(
inode
->
i_sb
,
"(ino %l
u
) failed !bh
\n
"
,
inode
->
i_ino
);
return
-
EIO
;
return
-
EIO
;
}
}
if
(
ident
!=
TAG_IDENT_FE
&&
ident
!=
TAG_IDENT_EFE
&&
if
(
ident
!=
TAG_IDENT_FE
&&
ident
!=
TAG_IDENT_EFE
&&
ident
!=
TAG_IDENT_USE
)
{
ident
!=
TAG_IDENT_USE
)
{
udf_err
(
inode
->
i_sb
,
"(ino %l
d) failed ident=%d
\n
"
,
udf_err
(
inode
->
i_sb
,
"(ino %l
u) failed ident=%u
\n
"
,
inode
->
i_ino
,
ident
);
inode
->
i_ino
,
ident
);
goto
out
;
goto
out
;
}
}
...
@@ -1346,7 +1346,7 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode)
...
@@ -1346,7 +1346,7 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode)
}
}
brelse
(
ibh
);
brelse
(
ibh
);
}
else
if
(
fe
->
icbTag
.
strategyType
!=
cpu_to_le16
(
4
))
{
}
else
if
(
fe
->
icbTag
.
strategyType
!=
cpu_to_le16
(
4
))
{
udf_err
(
inode
->
i_sb
,
"unsupported strategy type: %
d
\n
"
,
udf_err
(
inode
->
i_sb
,
"unsupported strategy type: %
u
\n
"
,
le16_to_cpu
(
fe
->
icbTag
.
strategyType
));
le16_to_cpu
(
fe
->
icbTag
.
strategyType
));
goto
out
;
goto
out
;
}
}
...
@@ -1547,7 +1547,7 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode)
...
@@ -1547,7 +1547,7 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode)
udf_debug
(
"METADATA BITMAP FILE-----
\n
"
);
udf_debug
(
"METADATA BITMAP FILE-----
\n
"
);
break
;
break
;
default:
default:
udf_err
(
inode
->
i_sb
,
"(ino %l
d) failed unknown file type=%d
\n
"
,
udf_err
(
inode
->
i_sb
,
"(ino %l
u) failed unknown file type=%u
\n
"
,
inode
->
i_ino
,
fe
->
icbTag
.
fileType
);
inode
->
i_ino
,
fe
->
icbTag
.
fileType
);
goto
out
;
goto
out
;
}
}
...
@@ -1852,7 +1852,7 @@ struct inode *__udf_iget(struct super_block *sb, struct kernel_lb_addr *ino,
...
@@ -1852,7 +1852,7 @@ struct inode *__udf_iget(struct super_block *sb, struct kernel_lb_addr *ino,
return
inode
;
return
inode
;
}
}
int
udf_setup_indirect_aext
(
struct
inode
*
inode
,
in
t
block
,
int
udf_setup_indirect_aext
(
struct
inode
*
inode
,
udf_pblk_
t
block
,
struct
extent_position
*
epos
)
struct
extent_position
*
epos
)
{
{
struct
super_block
*
sb
=
inode
->
i_sb
;
struct
super_block
*
sb
=
inode
->
i_sb
;
...
@@ -1994,7 +1994,7 @@ int udf_add_aext(struct inode *inode, struct extent_position *epos,
...
@@ -1994,7 +1994,7 @@ int udf_add_aext(struct inode *inode, struct extent_position *epos,
if
(
epos
->
offset
+
(
2
*
adsize
)
>
sb
->
s_blocksize
)
{
if
(
epos
->
offset
+
(
2
*
adsize
)
>
sb
->
s_blocksize
)
{
int
err
;
int
err
;
in
t
new_block
;
udf_pblk_
t
new_block
;
new_block
=
udf_new_block
(
sb
,
NULL
,
new_block
=
udf_new_block
(
sb
,
NULL
,
epos
->
block
.
partitionReferenceNum
,
epos
->
block
.
partitionReferenceNum
,
...
@@ -2076,7 +2076,7 @@ int8_t udf_next_aext(struct inode *inode, struct extent_position *epos,
...
@@ -2076,7 +2076,7 @@ int8_t udf_next_aext(struct inode *inode, struct extent_position *epos,
while
((
etype
=
udf_current_aext
(
inode
,
epos
,
eloc
,
elen
,
inc
))
==
while
((
etype
=
udf_current_aext
(
inode
,
epos
,
eloc
,
elen
,
inc
))
==
(
EXT_NEXT_EXTENT_ALLOCDECS
>>
30
))
{
(
EXT_NEXT_EXTENT_ALLOCDECS
>>
30
))
{
in
t
block
;
udf_pblk_
t
block
;
if
(
++
indirections
>
UDF_MAX_INDIR_EXTS
)
{
if
(
++
indirections
>
UDF_MAX_INDIR_EXTS
)
{
udf_err
(
inode
->
i_sb
,
udf_err
(
inode
->
i_sb
,
...
@@ -2091,7 +2091,7 @@ int8_t udf_next_aext(struct inode *inode, struct extent_position *epos,
...
@@ -2091,7 +2091,7 @@ int8_t udf_next_aext(struct inode *inode, struct extent_position *epos,
block
=
udf_get_lb_pblock
(
inode
->
i_sb
,
&
epos
->
block
,
0
);
block
=
udf_get_lb_pblock
(
inode
->
i_sb
,
&
epos
->
block
,
0
);
epos
->
bh
=
udf_tread
(
inode
->
i_sb
,
block
);
epos
->
bh
=
udf_tread
(
inode
->
i_sb
,
block
);
if
(
!
epos
->
bh
)
{
if
(
!
epos
->
bh
)
{
udf_debug
(
"reading block %
d
failed!
\n
"
,
block
);
udf_debug
(
"reading block %
u
failed!
\n
"
,
block
);
return
-
1
;
return
-
1
;
}
}
}
}
...
@@ -2146,7 +2146,7 @@ int8_t udf_current_aext(struct inode *inode, struct extent_position *epos,
...
@@ -2146,7 +2146,7 @@ int8_t udf_current_aext(struct inode *inode, struct extent_position *epos,
*
elen
=
le32_to_cpu
(
lad
->
extLength
)
&
UDF_EXTENT_LENGTH_MASK
;
*
elen
=
le32_to_cpu
(
lad
->
extLength
)
&
UDF_EXTENT_LENGTH_MASK
;
break
;
break
;
default:
default:
udf_debug
(
"alloc_type = %
d
unsupported
\n
"
,
iinfo
->
i_alloc_type
);
udf_debug
(
"alloc_type = %
u
unsupported
\n
"
,
iinfo
->
i_alloc_type
);
return
-
1
;
return
-
1
;
}
}
...
@@ -2289,13 +2289,13 @@ int8_t inode_bmap(struct inode *inode, sector_t block,
...
@@ -2289,13 +2289,13 @@ int8_t inode_bmap(struct inode *inode, sector_t block,
return
etype
;
return
etype
;
}
}
long
udf_block_map
(
struct
inode
*
inode
,
sector_t
block
)
udf_pblk_t
udf_block_map
(
struct
inode
*
inode
,
sector_t
block
)
{
{
struct
kernel_lb_addr
eloc
;
struct
kernel_lb_addr
eloc
;
uint32_t
elen
;
uint32_t
elen
;
sector_t
offset
;
sector_t
offset
;
struct
extent_position
epos
=
{};
struct
extent_position
epos
=
{};
in
t
ret
;
udf_pblk_
t
ret
;
down_read
(
&
UDF_I
(
inode
)
->
i_data_sem
);
down_read
(
&
UDF_I
(
inode
)
->
i_data_sem
);
...
...
fs/udf/misc.c
浏览文件 @
838bee9e
...
@@ -28,7 +28,7 @@
...
@@ -28,7 +28,7 @@
#include "udf_i.h"
#include "udf_i.h"
#include "udf_sb.h"
#include "udf_sb.h"
struct
buffer_head
*
udf_tgetblk
(
struct
super_block
*
sb
,
in
t
block
)
struct
buffer_head
*
udf_tgetblk
(
struct
super_block
*
sb
,
udf_pblk_
t
block
)
{
{
if
(
UDF_QUERY_FLAG
(
sb
,
UDF_FLAG_VARCONV
))
if
(
UDF_QUERY_FLAG
(
sb
,
UDF_FLAG_VARCONV
))
return
sb_getblk
(
sb
,
udf_fixed_to_variable
(
block
));
return
sb_getblk
(
sb
,
udf_fixed_to_variable
(
block
));
...
@@ -36,7 +36,7 @@ struct buffer_head *udf_tgetblk(struct super_block *sb, int block)
...
@@ -36,7 +36,7 @@ struct buffer_head *udf_tgetblk(struct super_block *sb, int block)
return
sb_getblk
(
sb
,
block
);
return
sb_getblk
(
sb
,
block
);
}
}
struct
buffer_head
*
udf_tread
(
struct
super_block
*
sb
,
in
t
block
)
struct
buffer_head
*
udf_tread
(
struct
super_block
*
sb
,
udf_pblk_
t
block
)
{
{
if
(
UDF_QUERY_FLAG
(
sb
,
UDF_FLAG_VARCONV
))
if
(
UDF_QUERY_FLAG
(
sb
,
UDF_FLAG_VARCONV
))
return
sb_bread
(
sb
,
udf_fixed_to_variable
(
block
));
return
sb_bread
(
sb
,
udf_fixed_to_variable
(
block
));
...
@@ -209,7 +209,7 @@ struct buffer_head *udf_read_tagged(struct super_block *sb, uint32_t block,
...
@@ -209,7 +209,7 @@ struct buffer_head *udf_read_tagged(struct super_block *sb, uint32_t block,
bh
=
udf_tread
(
sb
,
block
);
bh
=
udf_tread
(
sb
,
block
);
if
(
!
bh
)
{
if
(
!
bh
)
{
udf_err
(
sb
,
"read failed, block=%u, location=%
d
\n
"
,
udf_err
(
sb
,
"read failed, block=%u, location=%
u
\n
"
,
block
,
location
);
block
,
location
);
return
NULL
;
return
NULL
;
}
}
...
@@ -247,7 +247,7 @@ struct buffer_head *udf_read_tagged(struct super_block *sb, uint32_t block,
...
@@ -247,7 +247,7 @@ struct buffer_head *udf_read_tagged(struct super_block *sb, uint32_t block,
le16_to_cpu
(
tag_p
->
descCRCLength
)))
le16_to_cpu
(
tag_p
->
descCRCLength
)))
return
bh
;
return
bh
;
udf_debug
(
"Crc failure block %
d: crc = %d, crclen = %d
\n
"
,
block
,
udf_debug
(
"Crc failure block %
u: crc = %u, crclen = %u
\n
"
,
block
,
le16_to_cpu
(
tag_p
->
descCRC
),
le16_to_cpu
(
tag_p
->
descCRC
),
le16_to_cpu
(
tag_p
->
descCRCLength
));
le16_to_cpu
(
tag_p
->
descCRCLength
));
error_out:
error_out:
...
...
fs/udf/namei.c
浏览文件 @
838bee9e
...
@@ -164,7 +164,8 @@ static struct fileIdentDesc *udf_find_entry(struct inode *dir,
...
@@ -164,7 +164,8 @@ static struct fileIdentDesc *udf_find_entry(struct inode *dir,
{
{
struct
fileIdentDesc
*
fi
=
NULL
;
struct
fileIdentDesc
*
fi
=
NULL
;
loff_t
f_pos
;
loff_t
f_pos
;
int
block
,
flen
;
udf_pblk_t
block
;
int
flen
;
unsigned
char
*
fname
=
NULL
,
*
copy_name
=
NULL
;
unsigned
char
*
fname
=
NULL
,
*
copy_name
=
NULL
;
unsigned
char
*
nameptr
;
unsigned
char
*
nameptr
;
uint8_t
lfi
;
uint8_t
lfi
;
...
@@ -352,7 +353,7 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir,
...
@@ -352,7 +353,7 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir,
int
nfidlen
;
int
nfidlen
;
uint8_t
lfi
;
uint8_t
lfi
;
uint16_t
liu
;
uint16_t
liu
;
in
t
block
;
udf_pblk_
t
block
;
struct
kernel_lb_addr
eloc
;
struct
kernel_lb_addr
eloc
;
uint32_t
elen
=
0
;
uint32_t
elen
=
0
;
sector_t
offset
;
sector_t
offset
;
...
@@ -749,7 +750,7 @@ static int empty_dir(struct inode *dir)
...
@@ -749,7 +750,7 @@ static int empty_dir(struct inode *dir)
struct
udf_fileident_bh
fibh
;
struct
udf_fileident_bh
fibh
;
loff_t
f_pos
;
loff_t
f_pos
;
loff_t
size
=
udf_ext0_offset
(
dir
)
+
dir
->
i_size
;
loff_t
size
=
udf_ext0_offset
(
dir
)
+
dir
->
i_size
;
in
t
block
;
udf_pblk_
t
block
;
struct
kernel_lb_addr
eloc
;
struct
kernel_lb_addr
eloc
;
uint32_t
elen
;
uint32_t
elen
;
sector_t
offset
;
sector_t
offset
;
...
@@ -839,7 +840,7 @@ static int udf_rmdir(struct inode *dir, struct dentry *dentry)
...
@@ -839,7 +840,7 @@ static int udf_rmdir(struct inode *dir, struct dentry *dentry)
if
(
retval
)
if
(
retval
)
goto
end_rmdir
;
goto
end_rmdir
;
if
(
inode
->
i_nlink
!=
2
)
if
(
inode
->
i_nlink
!=
2
)
udf_warn
(
inode
->
i_sb
,
"empty directory has nlink != 2 (%
d
)
\n
"
,
udf_warn
(
inode
->
i_sb
,
"empty directory has nlink != 2 (%
u
)
\n
"
,
inode
->
i_nlink
);
inode
->
i_nlink
);
clear_nlink
(
inode
);
clear_nlink
(
inode
);
inode
->
i_size
=
0
;
inode
->
i_size
=
0
;
...
@@ -881,7 +882,7 @@ static int udf_unlink(struct inode *dir, struct dentry *dentry)
...
@@ -881,7 +882,7 @@ static int udf_unlink(struct inode *dir, struct dentry *dentry)
goto
end_unlink
;
goto
end_unlink
;
if
(
!
inode
->
i_nlink
)
{
if
(
!
inode
->
i_nlink
)
{
udf_debug
(
"Deleting nonexistent file (%lu), %
d
\n
"
,
udf_debug
(
"Deleting nonexistent file (%lu), %
u
\n
"
,
inode
->
i_ino
,
inode
->
i_nlink
);
inode
->
i_ino
,
inode
->
i_nlink
);
set_nlink
(
inode
,
1
);
set_nlink
(
inode
,
1
);
}
}
...
@@ -913,7 +914,7 @@ static int udf_symlink(struct inode *dir, struct dentry *dentry,
...
@@ -913,7 +914,7 @@ static int udf_symlink(struct inode *dir, struct dentry *dentry,
int
eoffset
,
elen
=
0
;
int
eoffset
,
elen
=
0
;
uint8_t
*
ea
;
uint8_t
*
ea
;
int
err
;
int
err
;
in
t
block
;
udf_pblk_
t
block
;
unsigned
char
*
name
=
NULL
;
unsigned
char
*
name
=
NULL
;
int
namelen
;
int
namelen
;
struct
udf_inode_info
*
iinfo
;
struct
udf_inode_info
*
iinfo
;
...
...
fs/udf/partition.c
浏览文件 @
838bee9e
...
@@ -32,7 +32,7 @@ uint32_t udf_get_pblock(struct super_block *sb, uint32_t block,
...
@@ -32,7 +32,7 @@ uint32_t udf_get_pblock(struct super_block *sb, uint32_t block,
struct
udf_sb_info
*
sbi
=
UDF_SB
(
sb
);
struct
udf_sb_info
*
sbi
=
UDF_SB
(
sb
);
struct
udf_part_map
*
map
;
struct
udf_part_map
*
map
;
if
(
partition
>=
sbi
->
s_partitions
)
{
if
(
partition
>=
sbi
->
s_partitions
)
{
udf_debug
(
"block=%
d, partition=%d, offset=%d
: invalid partition
\n
"
,
udf_debug
(
"block=%
u, partition=%u, offset=%u
: invalid partition
\n
"
,
block
,
partition
,
offset
);
block
,
partition
,
offset
);
return
0xFFFFFFFF
;
return
0xFFFFFFFF
;
}
}
...
@@ -59,7 +59,7 @@ uint32_t udf_get_pblock_virt15(struct super_block *sb, uint32_t block,
...
@@ -59,7 +59,7 @@ uint32_t udf_get_pblock_virt15(struct super_block *sb, uint32_t block,
vdata
=
&
map
->
s_type_specific
.
s_virtual
;
vdata
=
&
map
->
s_type_specific
.
s_virtual
;
if
(
block
>
vdata
->
s_num_entries
)
{
if
(
block
>
vdata
->
s_num_entries
)
{
udf_debug
(
"Trying to access block beyond end of VAT (%
d max %d
)
\n
"
,
udf_debug
(
"Trying to access block beyond end of VAT (%
u max %u
)
\n
"
,
block
,
vdata
->
s_num_entries
);
block
,
vdata
->
s_num_entries
);
return
0xFFFFFFFF
;
return
0xFFFFFFFF
;
}
}
...
@@ -83,7 +83,7 @@ uint32_t udf_get_pblock_virt15(struct super_block *sb, uint32_t block,
...
@@ -83,7 +83,7 @@ uint32_t udf_get_pblock_virt15(struct super_block *sb, uint32_t block,
bh
=
sb_bread
(
sb
,
loc
);
bh
=
sb_bread
(
sb
,
loc
);
if
(
!
bh
)
{
if
(
!
bh
)
{
udf_debug
(
"get_pblock(UDF_VIRTUAL_MAP:%p,%
d,%d) VAT: %d[%d
]
\n
"
,
udf_debug
(
"get_pblock(UDF_VIRTUAL_MAP:%p,%
u,%u) VAT: %u[%u
]
\n
"
,
sb
,
block
,
partition
,
loc
,
index
);
sb
,
block
,
partition
,
loc
,
index
);
return
0xFFFFFFFF
;
return
0xFFFFFFFF
;
}
}
...
...
fs/udf/super.c
浏览文件 @
838bee9e
...
@@ -366,7 +366,7 @@ static int udf_show_options(struct seq_file *seq, struct dentry *root)
...
@@ -366,7 +366,7 @@ static int udf_show_options(struct seq_file *seq, struct dentry *root)
if
(
sbi
->
s_dmode
!=
UDF_INVALID_MODE
)
if
(
sbi
->
s_dmode
!=
UDF_INVALID_MODE
)
seq_printf
(
seq
,
",dmode=%ho"
,
sbi
->
s_dmode
);
seq_printf
(
seq
,
",dmode=%ho"
,
sbi
->
s_dmode
);
if
(
UDF_QUERY_FLAG
(
sb
,
UDF_FLAG_SESSION_SET
))
if
(
UDF_QUERY_FLAG
(
sb
,
UDF_FLAG_SESSION_SET
))
seq_printf
(
seq
,
",session=%
u
"
,
sbi
->
s_session
);
seq_printf
(
seq
,
",session=%
d
"
,
sbi
->
s_session
);
if
(
UDF_QUERY_FLAG
(
sb
,
UDF_FLAG_LASTBLOCK_SET
))
if
(
UDF_QUERY_FLAG
(
sb
,
UDF_FLAG_LASTBLOCK_SET
))
seq_printf
(
seq
,
",lastblock=%u"
,
sbi
->
s_last_block
);
seq_printf
(
seq
,
",lastblock=%u"
,
sbi
->
s_last_block
);
if
(
sbi
->
s_anchor
!=
0
)
if
(
sbi
->
s_anchor
!=
0
)
...
@@ -703,9 +703,9 @@ static loff_t udf_check_vsd(struct super_block *sb)
...
@@ -703,9 +703,9 @@ static loff_t udf_check_vsd(struct super_block *sb)
else
else
sectorsize
=
sb
->
s_blocksize
;
sectorsize
=
sb
->
s_blocksize
;
sector
+=
(
sbi
->
s_session
<<
sb
->
s_blocksize_bits
);
sector
+=
(
((
loff_t
)
sbi
->
s_session
)
<<
sb
->
s_blocksize_bits
);
udf_debug
(
"Starting at sector %u (%l
d
byte sectors)
\n
"
,
udf_debug
(
"Starting at sector %u (%l
u
byte sectors)
\n
"
,
(
unsigned
int
)(
sector
>>
sb
->
s_blocksize_bits
),
(
unsigned
int
)(
sector
>>
sb
->
s_blocksize_bits
),
sb
->
s_blocksize
);
sb
->
s_blocksize
);
/* Process the sequence (if applicable). The hard limit on the sector
/* Process the sequence (if applicable). The hard limit on the sector
...
@@ -868,7 +868,7 @@ static int udf_find_fileset(struct super_block *sb,
...
@@ -868,7 +868,7 @@ static int udf_find_fileset(struct super_block *sb,
if
((
fileset
->
logicalBlockNum
!=
0xFFFFFFFF
||
if
((
fileset
->
logicalBlockNum
!=
0xFFFFFFFF
||
fileset
->
partitionReferenceNum
!=
0xFFFF
)
&&
bh
)
{
fileset
->
partitionReferenceNum
!=
0xFFFF
)
&&
bh
)
{
udf_debug
(
"Fileset at block=%
d, partition=%d
\n
"
,
udf_debug
(
"Fileset at block=%
u, partition=%u
\n
"
,
fileset
->
logicalBlockNum
,
fileset
->
logicalBlockNum
,
fileset
->
partitionReferenceNum
);
fileset
->
partitionReferenceNum
);
...
@@ -981,14 +981,14 @@ static int udf_load_metadata_files(struct super_block *sb, int partition,
...
@@ -981,14 +981,14 @@ static int udf_load_metadata_files(struct super_block *sb, int partition,
mdata
->
s_phys_partition_ref
=
type1_index
;
mdata
->
s_phys_partition_ref
=
type1_index
;
/* metadata address */
/* metadata address */
udf_debug
(
"Metadata file location: block = %
d part = %d
\n
"
,
udf_debug
(
"Metadata file location: block = %
u part = %u
\n
"
,
mdata
->
s_meta_file_loc
,
mdata
->
s_phys_partition_ref
);
mdata
->
s_meta_file_loc
,
mdata
->
s_phys_partition_ref
);
fe
=
udf_find_metadata_inode_efe
(
sb
,
mdata
->
s_meta_file_loc
,
fe
=
udf_find_metadata_inode_efe
(
sb
,
mdata
->
s_meta_file_loc
,
mdata
->
s_phys_partition_ref
);
mdata
->
s_phys_partition_ref
);
if
(
IS_ERR
(
fe
))
{
if
(
IS_ERR
(
fe
))
{
/* mirror file entry */
/* mirror file entry */
udf_debug
(
"Mirror metadata file location: block = %
d part = %d
\n
"
,
udf_debug
(
"Mirror metadata file location: block = %
u part = %u
\n
"
,
mdata
->
s_mirror_file_loc
,
mdata
->
s_phys_partition_ref
);
mdata
->
s_mirror_file_loc
,
mdata
->
s_phys_partition_ref
);
fe
=
udf_find_metadata_inode_efe
(
sb
,
mdata
->
s_mirror_file_loc
,
fe
=
udf_find_metadata_inode_efe
(
sb
,
mdata
->
s_mirror_file_loc
,
...
@@ -1012,7 +1012,7 @@ static int udf_load_metadata_files(struct super_block *sb, int partition,
...
@@ -1012,7 +1012,7 @@ static int udf_load_metadata_files(struct super_block *sb, int partition,
addr
.
logicalBlockNum
=
mdata
->
s_bitmap_file_loc
;
addr
.
logicalBlockNum
=
mdata
->
s_bitmap_file_loc
;
addr
.
partitionReferenceNum
=
mdata
->
s_phys_partition_ref
;
addr
.
partitionReferenceNum
=
mdata
->
s_phys_partition_ref
;
udf_debug
(
"Bitmap file location: block = %
d part = %d
\n
"
,
udf_debug
(
"Bitmap file location: block = %
u part = %u
\n
"
,
addr
.
logicalBlockNum
,
addr
.
partitionReferenceNum
);
addr
.
logicalBlockNum
,
addr
.
partitionReferenceNum
);
fe
=
udf_iget_special
(
sb
,
&
addr
);
fe
=
udf_iget_special
(
sb
,
&
addr
);
...
@@ -1042,7 +1042,7 @@ static void udf_load_fileset(struct super_block *sb, struct buffer_head *bh,
...
@@ -1042,7 +1042,7 @@ static void udf_load_fileset(struct super_block *sb, struct buffer_head *bh,
UDF_SB
(
sb
)
->
s_serial_number
=
le16_to_cpu
(
fset
->
descTag
.
tagSerialNum
);
UDF_SB
(
sb
)
->
s_serial_number
=
le16_to_cpu
(
fset
->
descTag
.
tagSerialNum
);
udf_debug
(
"Rootdir at block=%
d, partition=%d
\n
"
,
udf_debug
(
"Rootdir at block=%
u, partition=%u
\n
"
,
root
->
logicalBlockNum
,
root
->
partitionReferenceNum
);
root
->
logicalBlockNum
,
root
->
partitionReferenceNum
);
}
}
...
@@ -1097,7 +1097,7 @@ static int udf_fill_partdesc_info(struct super_block *sb,
...
@@ -1097,7 +1097,7 @@ static int udf_fill_partdesc_info(struct super_block *sb,
if
(
p
->
accessType
==
cpu_to_le32
(
PD_ACCESS_TYPE_OVERWRITABLE
))
if
(
p
->
accessType
==
cpu_to_le32
(
PD_ACCESS_TYPE_OVERWRITABLE
))
map
->
s_partition_flags
|=
UDF_PART_FLAG_OVERWRITABLE
;
map
->
s_partition_flags
|=
UDF_PART_FLAG_OVERWRITABLE
;
udf_debug
(
"Partition (%d type %x) starts at physical %
d, block length %d
\n
"
,
udf_debug
(
"Partition (%d type %x) starts at physical %
u, block length %u
\n
"
,
p_index
,
map
->
s_partition_type
,
p_index
,
map
->
s_partition_type
,
map
->
s_partition_root
,
map
->
s_partition_len
);
map
->
s_partition_root
,
map
->
s_partition_len
);
...
@@ -1122,7 +1122,7 @@ static int udf_fill_partdesc_info(struct super_block *sb,
...
@@ -1122,7 +1122,7 @@ static int udf_fill_partdesc_info(struct super_block *sb,
}
}
map
->
s_uspace
.
s_table
=
inode
;
map
->
s_uspace
.
s_table
=
inode
;
map
->
s_partition_flags
|=
UDF_PART_FLAG_UNALLOC_TABLE
;
map
->
s_partition_flags
|=
UDF_PART_FLAG_UNALLOC_TABLE
;
udf_debug
(
"unallocSpaceTable (part %d) @ %l
d
\n
"
,
udf_debug
(
"unallocSpaceTable (part %d) @ %l
u
\n
"
,
p_index
,
map
->
s_uspace
.
s_table
->
i_ino
);
p_index
,
map
->
s_uspace
.
s_table
->
i_ino
);
}
}
...
@@ -1134,7 +1134,7 @@ static int udf_fill_partdesc_info(struct super_block *sb,
...
@@ -1134,7 +1134,7 @@ static int udf_fill_partdesc_info(struct super_block *sb,
bitmap
->
s_extPosition
=
le32_to_cpu
(
bitmap
->
s_extPosition
=
le32_to_cpu
(
phd
->
unallocSpaceBitmap
.
extPosition
);
phd
->
unallocSpaceBitmap
.
extPosition
);
map
->
s_partition_flags
|=
UDF_PART_FLAG_UNALLOC_BITMAP
;
map
->
s_partition_flags
|=
UDF_PART_FLAG_UNALLOC_BITMAP
;
udf_debug
(
"unallocSpaceBitmap (part %d) @ %
d
\n
"
,
udf_debug
(
"unallocSpaceBitmap (part %d) @ %
u
\n
"
,
p_index
,
bitmap
->
s_extPosition
);
p_index
,
bitmap
->
s_extPosition
);
}
}
...
@@ -1157,7 +1157,7 @@ static int udf_fill_partdesc_info(struct super_block *sb,
...
@@ -1157,7 +1157,7 @@ static int udf_fill_partdesc_info(struct super_block *sb,
}
}
map
->
s_fspace
.
s_table
=
inode
;
map
->
s_fspace
.
s_table
=
inode
;
map
->
s_partition_flags
|=
UDF_PART_FLAG_FREED_TABLE
;
map
->
s_partition_flags
|=
UDF_PART_FLAG_FREED_TABLE
;
udf_debug
(
"freedSpaceTable (part %d) @ %l
d
\n
"
,
udf_debug
(
"freedSpaceTable (part %d) @ %l
u
\n
"
,
p_index
,
map
->
s_fspace
.
s_table
->
i_ino
);
p_index
,
map
->
s_fspace
.
s_table
->
i_ino
);
}
}
...
@@ -1169,7 +1169,7 @@ static int udf_fill_partdesc_info(struct super_block *sb,
...
@@ -1169,7 +1169,7 @@ static int udf_fill_partdesc_info(struct super_block *sb,
bitmap
->
s_extPosition
=
le32_to_cpu
(
bitmap
->
s_extPosition
=
le32_to_cpu
(
phd
->
freedSpaceBitmap
.
extPosition
);
phd
->
freedSpaceBitmap
.
extPosition
);
map
->
s_partition_flags
|=
UDF_PART_FLAG_FREED_BITMAP
;
map
->
s_partition_flags
|=
UDF_PART_FLAG_FREED_BITMAP
;
udf_debug
(
"freedSpaceBitmap (part %d) @ %
d
\n
"
,
udf_debug
(
"freedSpaceBitmap (part %d) @ %
u
\n
"
,
p_index
,
bitmap
->
s_extPosition
);
p_index
,
bitmap
->
s_extPosition
);
}
}
return
0
;
return
0
;
...
@@ -1282,7 +1282,7 @@ static int udf_load_partdesc(struct super_block *sb, sector_t block)
...
@@ -1282,7 +1282,7 @@ static int udf_load_partdesc(struct super_block *sb, sector_t block)
/* First scan for TYPE1 and SPARABLE partitions */
/* First scan for TYPE1 and SPARABLE partitions */
for
(
i
=
0
;
i
<
sbi
->
s_partitions
;
i
++
)
{
for
(
i
=
0
;
i
<
sbi
->
s_partitions
;
i
++
)
{
map
=
&
sbi
->
s_partmaps
[
i
];
map
=
&
sbi
->
s_partmaps
[
i
];
udf_debug
(
"Searching map: (%
d == %d
)
\n
"
,
udf_debug
(
"Searching map: (%
u == %u
)
\n
"
,
map
->
s_partition_num
,
partitionNumber
);
map
->
s_partition_num
,
partitionNumber
);
if
(
map
->
s_partition_num
==
partitionNumber
&&
if
(
map
->
s_partition_num
==
partitionNumber
&&
(
map
->
s_partition_type
==
UDF_TYPE1_MAP15
||
(
map
->
s_partition_type
==
UDF_TYPE1_MAP15
||
...
@@ -1291,7 +1291,7 @@ static int udf_load_partdesc(struct super_block *sb, sector_t block)
...
@@ -1291,7 +1291,7 @@ static int udf_load_partdesc(struct super_block *sb, sector_t block)
}
}
if
(
i
>=
sbi
->
s_partitions
)
{
if
(
i
>=
sbi
->
s_partitions
)
{
udf_debug
(
"Partition (%
d
) not found in partition map
\n
"
,
udf_debug
(
"Partition (%
u
) not found in partition map
\n
"
,
partitionNumber
);
partitionNumber
);
ret
=
0
;
ret
=
0
;
goto
out_bh
;
goto
out_bh
;
...
@@ -1483,7 +1483,7 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block,
...
@@ -1483,7 +1483,7 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block,
struct
metadataPartitionMap
*
mdm
=
struct
metadataPartitionMap
*
mdm
=
(
struct
metadataPartitionMap
*
)
(
struct
metadataPartitionMap
*
)
&
(
lvd
->
partitionMaps
[
offset
]);
&
(
lvd
->
partitionMaps
[
offset
]);
udf_debug
(
"Parsing Logical vol part %d type %
d
id=%s
\n
"
,
udf_debug
(
"Parsing Logical vol part %d type %
u
id=%s
\n
"
,
i
,
type
,
UDF_ID_METADATA
);
i
,
type
,
UDF_ID_METADATA
);
map
->
s_partition_type
=
UDF_METADATA_MAP25
;
map
->
s_partition_type
=
UDF_METADATA_MAP25
;
...
@@ -1505,17 +1505,17 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block,
...
@@ -1505,17 +1505,17 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block,
udf_debug
(
"Metadata Ident suffix=0x%x
\n
"
,
udf_debug
(
"Metadata Ident suffix=0x%x
\n
"
,
le16_to_cpu
(
*
(
__le16
*
)
le16_to_cpu
(
*
(
__le16
*
)
mdm
->
partIdent
.
identSuffix
));
mdm
->
partIdent
.
identSuffix
));
udf_debug
(
"Metadata part num=%
d
\n
"
,
udf_debug
(
"Metadata part num=%
u
\n
"
,
le16_to_cpu
(
mdm
->
partitionNum
));
le16_to_cpu
(
mdm
->
partitionNum
));
udf_debug
(
"Metadata part alloc unit size=%
d
\n
"
,
udf_debug
(
"Metadata part alloc unit size=%
u
\n
"
,
le32_to_cpu
(
mdm
->
allocUnitSize
));
le32_to_cpu
(
mdm
->
allocUnitSize
));
udf_debug
(
"Metadata file loc=%
d
\n
"
,
udf_debug
(
"Metadata file loc=%
u
\n
"
,
le32_to_cpu
(
mdm
->
metadataFileLoc
));
le32_to_cpu
(
mdm
->
metadataFileLoc
));
udf_debug
(
"Mirror file loc=%
d
\n
"
,
udf_debug
(
"Mirror file loc=%
u
\n
"
,
le32_to_cpu
(
mdm
->
metadataMirrorFileLoc
));
le32_to_cpu
(
mdm
->
metadataMirrorFileLoc
));
udf_debug
(
"Bitmap file loc=%
d
\n
"
,
udf_debug
(
"Bitmap file loc=%
u
\n
"
,
le32_to_cpu
(
mdm
->
metadataBitmapFileLoc
));
le32_to_cpu
(
mdm
->
metadataBitmapFileLoc
));
udf_debug
(
"Flags: %d %
d
\n
"
,
udf_debug
(
"Flags: %d %
u
\n
"
,
mdata
->
s_flags
,
mdm
->
flags
);
mdata
->
s_flags
,
mdm
->
flags
);
}
else
{
}
else
{
udf_debug
(
"Unknown ident: %s
\n
"
,
udf_debug
(
"Unknown ident: %s
\n
"
,
...
@@ -1525,7 +1525,7 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block,
...
@@ -1525,7 +1525,7 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block,
map
->
s_volumeseqnum
=
le16_to_cpu
(
upm2
->
volSeqNum
);
map
->
s_volumeseqnum
=
le16_to_cpu
(
upm2
->
volSeqNum
);
map
->
s_partition_num
=
le16_to_cpu
(
upm2
->
partitionNum
);
map
->
s_partition_num
=
le16_to_cpu
(
upm2
->
partitionNum
);
}
}
udf_debug
(
"Partition (%d:%
d) type %d on volume %d
\n
"
,
udf_debug
(
"Partition (%d:%
u) type %u on volume %u
\n
"
,
i
,
map
->
s_partition_num
,
type
,
map
->
s_volumeseqnum
);
i
,
map
->
s_partition_num
,
type
,
map
->
s_volumeseqnum
);
}
}
...
@@ -1533,7 +1533,7 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block,
...
@@ -1533,7 +1533,7 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block,
struct
long_ad
*
la
=
(
struct
long_ad
*
)
&
(
lvd
->
logicalVolContentsUse
[
0
]);
struct
long_ad
*
la
=
(
struct
long_ad
*
)
&
(
lvd
->
logicalVolContentsUse
[
0
]);
*
fileset
=
lelb_to_cpu
(
la
->
extLocation
);
*
fileset
=
lelb_to_cpu
(
la
->
extLocation
);
udf_debug
(
"FileSet found in LogicalVolDesc at block=%
d, partition=%d
\n
"
,
udf_debug
(
"FileSet found in LogicalVolDesc at block=%
u, partition=%u
\n
"
,
fileset
->
logicalBlockNum
,
fileset
->
logicalBlockNum
,
fileset
->
partitionReferenceNum
);
fileset
->
partitionReferenceNum
);
}
}
...
@@ -2159,7 +2159,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
...
@@ -2159,7 +2159,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
ret
=
udf_load_vrs
(
sb
,
&
uopt
,
silent
,
&
fileset
);
ret
=
udf_load_vrs
(
sb
,
&
uopt
,
silent
,
&
fileset
);
if
(
ret
<
0
)
{
if
(
ret
<
0
)
{
if
(
!
silent
&&
ret
!=
-
EACCES
)
{
if
(
!
silent
&&
ret
!=
-
EACCES
)
{
pr_notice
(
"Scanning with blocksize %
d
failed
\n
"
,
pr_notice
(
"Scanning with blocksize %
u
failed
\n
"
,
uopt
.
blocksize
);
uopt
.
blocksize
);
}
}
brelse
(
sbi
->
s_lvid_bh
);
brelse
(
sbi
->
s_lvid_bh
);
...
@@ -2184,7 +2184,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
...
@@ -2184,7 +2184,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
goto
error_out
;
goto
error_out
;
}
}
udf_debug
(
"Lastblock=%
d
\n
"
,
sbi
->
s_last_block
);
udf_debug
(
"Lastblock=%
u
\n
"
,
sbi
->
s_last_block
);
if
(
sbi
->
s_lvid_bh
)
{
if
(
sbi
->
s_lvid_bh
)
{
struct
logicalVolIntegrityDescImpUse
*
lvidiu
=
struct
logicalVolIntegrityDescImpUse
*
lvidiu
=
...
@@ -2255,7 +2255,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
...
@@ -2255,7 +2255,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
/* perhaps it's not extensible enough, but for now ... */
/* perhaps it's not extensible enough, but for now ... */
inode
=
udf_iget
(
sb
,
&
rootdir
);
inode
=
udf_iget
(
sb
,
&
rootdir
);
if
(
IS_ERR
(
inode
))
{
if
(
IS_ERR
(
inode
))
{
udf_err
(
sb
,
"Error in udf_iget, block=%
d, partition=%d
\n
"
,
udf_err
(
sb
,
"Error in udf_iget, block=%
u, partition=%u
\n
"
,
rootdir
.
logicalBlockNum
,
rootdir
.
partitionReferenceNum
);
rootdir
.
logicalBlockNum
,
rootdir
.
partitionReferenceNum
);
ret
=
PTR_ERR
(
inode
);
ret
=
PTR_ERR
(
inode
);
goto
error_out
;
goto
error_out
;
...
@@ -2389,7 +2389,7 @@ static unsigned int udf_count_free_bitmap(struct super_block *sb,
...
@@ -2389,7 +2389,7 @@ static unsigned int udf_count_free_bitmap(struct super_block *sb,
struct
buffer_head
*
bh
=
NULL
;
struct
buffer_head
*
bh
=
NULL
;
unsigned
int
accum
=
0
;
unsigned
int
accum
=
0
;
int
index
;
int
index
;
in
t
block
=
0
,
newblock
;
udf_pblk_
t
block
=
0
,
newblock
;
struct
kernel_lb_addr
loc
;
struct
kernel_lb_addr
loc
;
uint32_t
bytes
;
uint32_t
bytes
;
uint8_t
*
ptr
;
uint8_t
*
ptr
;
...
...
fs/udf/truncate.c
浏览文件 @
838bee9e
...
@@ -48,7 +48,7 @@ static void extent_trunc(struct inode *inode, struct extent_position *epos,
...
@@ -48,7 +48,7 @@ static void extent_trunc(struct inode *inode, struct extent_position *epos,
if
(
elen
!=
nelen
)
{
if
(
elen
!=
nelen
)
{
udf_write_aext
(
inode
,
epos
,
&
neloc
,
nelen
,
0
);
udf_write_aext
(
inode
,
epos
,
&
neloc
,
nelen
,
0
);
if
(
last_block
-
first_block
>
0
)
{
if
(
last_block
>
first_block
)
{
if
(
etype
==
(
EXT_RECORDED_ALLOCATED
>>
30
))
if
(
etype
==
(
EXT_RECORDED_ALLOCATED
>>
30
))
mark_inode_dirty
(
inode
);
mark_inode_dirty
(
inode
);
...
...
fs/udf/udfdecl.h
浏览文件 @
838bee9e
...
@@ -73,6 +73,8 @@ static inline size_t udf_ext0_offset(struct inode *inode)
...
@@ -73,6 +73,8 @@ static inline size_t udf_ext0_offset(struct inode *inode)
/* computes tag checksum */
/* computes tag checksum */
u8
udf_tag_checksum
(
const
struct
tag
*
t
);
u8
udf_tag_checksum
(
const
struct
tag
*
t
);
typedef
uint32_t
udf_pblk_t
;
struct
dentry
;
struct
dentry
;
struct
inode
;
struct
inode
;
struct
task_struct
;
struct
task_struct
;
...
@@ -144,15 +146,17 @@ static inline struct inode *udf_iget(struct super_block *sb,
...
@@ -144,15 +146,17 @@ static inline struct inode *udf_iget(struct super_block *sb,
return
__udf_iget
(
sb
,
ino
,
false
);
return
__udf_iget
(
sb
,
ino
,
false
);
}
}
extern
int
udf_expand_file_adinicb
(
struct
inode
*
);
extern
int
udf_expand_file_adinicb
(
struct
inode
*
);
extern
struct
buffer_head
*
udf_expand_dir_adinicb
(
struct
inode
*
,
int
*
,
int
*
);
extern
struct
buffer_head
*
udf_expand_dir_adinicb
(
struct
inode
*
inode
,
extern
struct
buffer_head
*
udf_bread
(
struct
inode
*
,
int
,
int
,
int
*
);
udf_pblk_t
*
block
,
int
*
err
);
extern
struct
buffer_head
*
udf_bread
(
struct
inode
*
inode
,
udf_pblk_t
block
,
int
create
,
int
*
err
);
extern
int
udf_setsize
(
struct
inode
*
,
loff_t
);
extern
int
udf_setsize
(
struct
inode
*
,
loff_t
);
extern
void
udf_evict_inode
(
struct
inode
*
);
extern
void
udf_evict_inode
(
struct
inode
*
);
extern
int
udf_write_inode
(
struct
inode
*
,
struct
writeback_control
*
wbc
);
extern
int
udf_write_inode
(
struct
inode
*
,
struct
writeback_control
*
wbc
);
extern
long
udf_block_map
(
struct
inode
*
,
sector_t
);
extern
udf_pblk_t
udf_block_map
(
struct
inode
*
inode
,
sector_t
block
);
extern
int8_t
inode_bmap
(
struct
inode
*
,
sector_t
,
struct
extent_position
*
,
extern
int8_t
inode_bmap
(
struct
inode
*
,
sector_t
,
struct
extent_position
*
,
struct
kernel_lb_addr
*
,
uint32_t
*
,
sector_t
*
);
struct
kernel_lb_addr
*
,
uint32_t
*
,
sector_t
*
);
extern
int
udf_setup_indirect_aext
(
struct
inode
*
inode
,
in
t
block
,
extern
int
udf_setup_indirect_aext
(
struct
inode
*
inode
,
udf_pblk_
t
block
,
struct
extent_position
*
epos
);
struct
extent_position
*
epos
);
extern
int
__udf_add_aext
(
struct
inode
*
inode
,
struct
extent_position
*
epos
,
extern
int
__udf_add_aext
(
struct
inode
*
inode
,
struct
extent_position
*
epos
,
struct
kernel_lb_addr
*
eloc
,
uint32_t
elen
,
int
inc
);
struct
kernel_lb_addr
*
eloc
,
uint32_t
elen
,
int
inc
);
...
@@ -168,8 +172,9 @@ extern int8_t udf_current_aext(struct inode *, struct extent_position *,
...
@@ -168,8 +172,9 @@ extern int8_t udf_current_aext(struct inode *, struct extent_position *,
struct
kernel_lb_addr
*
,
uint32_t
*
,
int
);
struct
kernel_lb_addr
*
,
uint32_t
*
,
int
);
/* misc.c */
/* misc.c */
extern
struct
buffer_head
*
udf_tgetblk
(
struct
super_block
*
,
int
);
extern
struct
buffer_head
*
udf_tgetblk
(
struct
super_block
*
sb
,
extern
struct
buffer_head
*
udf_tread
(
struct
super_block
*
,
int
);
udf_pblk_t
block
);
extern
struct
buffer_head
*
udf_tread
(
struct
super_block
*
sb
,
udf_pblk_t
block
);
extern
struct
genericFormat
*
udf_add_extendedattr
(
struct
inode
*
,
uint32_t
,
extern
struct
genericFormat
*
udf_add_extendedattr
(
struct
inode
*
,
uint32_t
,
uint32_t
,
uint8_t
);
uint32_t
,
uint8_t
);
extern
struct
genericFormat
*
udf_get_extendedattr
(
struct
inode
*
,
uint32_t
,
extern
struct
genericFormat
*
udf_get_extendedattr
(
struct
inode
*
,
uint32_t
,
...
@@ -228,8 +233,8 @@ extern void udf_free_blocks(struct super_block *, struct inode *,
...
@@ -228,8 +233,8 @@ extern void udf_free_blocks(struct super_block *, struct inode *,
struct
kernel_lb_addr
*
,
uint32_t
,
uint32_t
);
struct
kernel_lb_addr
*
,
uint32_t
,
uint32_t
);
extern
int
udf_prealloc_blocks
(
struct
super_block
*
,
struct
inode
*
,
uint16_t
,
extern
int
udf_prealloc_blocks
(
struct
super_block
*
,
struct
inode
*
,
uint16_t
,
uint32_t
,
uint32_t
);
uint32_t
,
uint32_t
);
extern
int
udf_new_block
(
struct
super_block
*
,
struct
inode
*
,
uint16_t
,
extern
udf_pblk_t
udf_new_block
(
struct
super_block
*
sb
,
struct
inode
*
inode
,
uint32_t
,
int
*
);
uint16_t
partition
,
uint32_t
goal
,
int
*
err
);
/* directory.c */
/* directory.c */
extern
struct
fileIdentDesc
*
udf_fileident_read
(
struct
inode
*
,
loff_t
*
,
extern
struct
fileIdentDesc
*
udf_fileident_read
(
struct
inode
*
,
loff_t
*
,
...
...
fs/udf/unicode.c
浏览文件 @
838bee9e
...
@@ -200,7 +200,7 @@ static int udf_name_from_CS0(uint8_t *str_o, int str_max_len,
...
@@ -200,7 +200,7 @@ static int udf_name_from_CS0(uint8_t *str_o, int str_max_len,
cmp_id
=
ocu
[
0
];
cmp_id
=
ocu
[
0
];
if
(
cmp_id
!=
8
&&
cmp_id
!=
16
)
{
if
(
cmp_id
!=
8
&&
cmp_id
!=
16
)
{
memset
(
str_o
,
0
,
str_max_len
);
memset
(
str_o
,
0
,
str_max_len
);
pr_err
(
"unknown compression code (%
d
)
\n
"
,
cmp_id
);
pr_err
(
"unknown compression code (%
u
)
\n
"
,
cmp_id
);
return
-
EINVAL
;
return
-
EINVAL
;
}
}
u_ch
=
cmp_id
>>
3
;
u_ch
=
cmp_id
>>
3
;
...
...
include/linux/audit.h
浏览文件 @
838bee9e
...
@@ -356,6 +356,7 @@ extern int __audit_log_bprm_fcaps(struct linux_binprm *bprm,
...
@@ -356,6 +356,7 @@ extern int __audit_log_bprm_fcaps(struct linux_binprm *bprm,
extern
void
__audit_log_capset
(
const
struct
cred
*
new
,
const
struct
cred
*
old
);
extern
void
__audit_log_capset
(
const
struct
cred
*
new
,
const
struct
cred
*
old
);
extern
void
__audit_mmap_fd
(
int
fd
,
int
flags
);
extern
void
__audit_mmap_fd
(
int
fd
,
int
flags
);
extern
void
__audit_log_kern_module
(
char
*
name
);
extern
void
__audit_log_kern_module
(
char
*
name
);
extern
void
__audit_fanotify
(
unsigned
int
response
);
static
inline
void
audit_ipc_obj
(
struct
kern_ipc_perm
*
ipcp
)
static
inline
void
audit_ipc_obj
(
struct
kern_ipc_perm
*
ipcp
)
{
{
...
@@ -452,6 +453,12 @@ static inline void audit_log_kern_module(char *name)
...
@@ -452,6 +453,12 @@ static inline void audit_log_kern_module(char *name)
__audit_log_kern_module
(
name
);
__audit_log_kern_module
(
name
);
}
}
static
inline
void
audit_fanotify
(
unsigned
int
response
)
{
if
(
!
audit_dummy_context
())
__audit_fanotify
(
response
);
}
extern
int
audit_n_rules
;
extern
int
audit_n_rules
;
extern
int
audit_signals
;
extern
int
audit_signals
;
#else
/* CONFIG_AUDITSYSCALL */
#else
/* CONFIG_AUDITSYSCALL */
...
@@ -568,6 +575,9 @@ static inline void audit_log_kern_module(char *name)
...
@@ -568,6 +575,9 @@ static inline void audit_log_kern_module(char *name)
{
{
}
}
static
inline
void
audit_fanotify
(
unsigned
int
response
)
{
}
static
inline
void
audit_ptrace
(
struct
task_struct
*
t
)
static
inline
void
audit_ptrace
(
struct
task_struct
*
t
)
{
}
{
}
#define audit_n_rules 0
#define audit_n_rules 0
...
...
include/linux/fsnotify_backend.h
浏览文件 @
838bee9e
...
@@ -190,6 +190,7 @@ struct fsnotify_group {
...
@@ -190,6 +190,7 @@ struct fsnotify_group {
int
f_flags
;
int
f_flags
;
unsigned
int
max_marks
;
unsigned
int
max_marks
;
struct
user_struct
*
user
;
struct
user_struct
*
user
;
bool
audit
;
}
fanotify_data
;
}
fanotify_data
;
#endif
/* CONFIG_FANOTIFY */
#endif
/* CONFIG_FANOTIFY */
};
};
...
...
include/uapi/linux/audit.h
浏览文件 @
838bee9e
...
@@ -112,6 +112,7 @@
...
@@ -112,6 +112,7 @@
#define AUDIT_FEATURE_CHANGE 1328
/* audit log listing feature changes */
#define AUDIT_FEATURE_CHANGE 1328
/* audit log listing feature changes */
#define AUDIT_REPLACE 1329
/* Replace auditd if this packet unanswerd */
#define AUDIT_REPLACE 1329
/* Replace auditd if this packet unanswerd */
#define AUDIT_KERN_MODULE 1330
/* Kernel Module events */
#define AUDIT_KERN_MODULE 1330
/* Kernel Module events */
#define AUDIT_FANOTIFY 1331
/* Fanotify access decision */
#define AUDIT_AVC 1400
/* SE Linux avc denial or grant */
#define AUDIT_AVC 1400
/* SE Linux avc denial or grant */
#define AUDIT_SELINUX_ERR 1401
/* Internal SE Linux Errors */
#define AUDIT_SELINUX_ERR 1401
/* Internal SE Linux Errors */
...
...
include/uapi/linux/fanotify.h
浏览文件 @
838bee9e
...
@@ -35,6 +35,7 @@
...
@@ -35,6 +35,7 @@
#define FAN_UNLIMITED_QUEUE 0x00000010
#define FAN_UNLIMITED_QUEUE 0x00000010
#define FAN_UNLIMITED_MARKS 0x00000020
#define FAN_UNLIMITED_MARKS 0x00000020
#define FAN_ENABLE_AUDIT 0x00000040
#define FAN_ALL_INIT_FLAGS (FAN_CLOEXEC | FAN_NONBLOCK | \
#define FAN_ALL_INIT_FLAGS (FAN_CLOEXEC | FAN_NONBLOCK | \
FAN_ALL_CLASS_BITS | FAN_UNLIMITED_QUEUE |\
FAN_ALL_CLASS_BITS | FAN_UNLIMITED_QUEUE |\
...
@@ -99,6 +100,8 @@ struct fanotify_response {
...
@@ -99,6 +100,8 @@ struct fanotify_response {
/* Legit userspace responses to a _PERM event */
/* Legit userspace responses to a _PERM event */
#define FAN_ALLOW 0x01
#define FAN_ALLOW 0x01
#define FAN_DENY 0x02
#define FAN_DENY 0x02
#define FAN_AUDIT 0x10
/* Bit mask to create audit record for result */
/* No fd set in event */
/* No fd set in event */
#define FAN_NOFD -1
#define FAN_NOFD -1
...
...
include/uapi/linux/iso_fs.h
浏览文件 @
838bee9e
...
@@ -12,10 +12,10 @@
...
@@ -12,10 +12,10 @@
#define ISODCL(from, to) (to - from + 1)
#define ISODCL(from, to) (to - from + 1)
struct
iso_volume_descriptor
{
struct
iso_volume_descriptor
{
char
type
[
ISODCL
(
1
,
1
)];
/* 711 */
__u8
type
[
ISODCL
(
1
,
1
)];
/* 711 */
char
id
[
ISODCL
(
2
,
6
)];
char
id
[
ISODCL
(
2
,
6
)];
char
version
[
ISODCL
(
7
,
7
)];
__u8
version
[
ISODCL
(
7
,
7
)];
char
data
[
ISODCL
(
8
,
2048
)];
__u8
data
[
ISODCL
(
8
,
2048
)];
};
};
/* volume descriptor types */
/* volume descriptor types */
...
@@ -26,24 +26,24 @@ struct iso_volume_descriptor {
...
@@ -26,24 +26,24 @@ struct iso_volume_descriptor {
#define ISO_STANDARD_ID "CD001"
#define ISO_STANDARD_ID "CD001"
struct
iso_primary_descriptor
{
struct
iso_primary_descriptor
{
char
type
[
ISODCL
(
1
,
1
)];
/* 711 */
__u8
type
[
ISODCL
(
1
,
1
)];
/* 711 */
char
id
[
ISODCL
(
2
,
6
)];
char
id
[
ISODCL
(
2
,
6
)];
char
version
[
ISODCL
(
7
,
7
)];
/* 711 */
__u8
version
[
ISODCL
(
7
,
7
)];
/* 711 */
char
unused1
[
ISODCL
(
8
,
8
)];
__u8
unused1
[
ISODCL
(
8
,
8
)];
char
system_id
[
ISODCL
(
9
,
40
)];
/* achars */
char
system_id
[
ISODCL
(
9
,
40
)];
/* achars */
char
volume_id
[
ISODCL
(
41
,
72
)];
/* dchars */
char
volume_id
[
ISODCL
(
41
,
72
)];
/* dchars */
char
unused2
[
ISODCL
(
73
,
80
)];
__u8
unused2
[
ISODCL
(
73
,
80
)];
char
volume_space_size
[
ISODCL
(
81
,
88
)];
/* 733 */
__u8
volume_space_size
[
ISODCL
(
81
,
88
)];
/* 733 */
char
unused3
[
ISODCL
(
89
,
120
)];
__u8
unused3
[
ISODCL
(
89
,
120
)];
char
volume_set_size
[
ISODCL
(
121
,
124
)];
/* 723 */
__u8
volume_set_size
[
ISODCL
(
121
,
124
)];
/* 723 */
char
volume_sequence_number
[
ISODCL
(
125
,
128
)];
/* 723 */
__u8
volume_sequence_number
[
ISODCL
(
125
,
128
)];
/* 723 */
char
logical_block_size
[
ISODCL
(
129
,
132
)];
/* 723 */
__u8
logical_block_size
[
ISODCL
(
129
,
132
)];
/* 723 */
char
path_table_size
[
ISODCL
(
133
,
140
)];
/* 733 */
__u8
path_table_size
[
ISODCL
(
133
,
140
)];
/* 733 */
char
type_l_path_table
[
ISODCL
(
141
,
144
)];
/* 731 */
__u8
type_l_path_table
[
ISODCL
(
141
,
144
)];
/* 731 */
char
opt_type_l_path_table
[
ISODCL
(
145
,
148
)];
/* 731 */
__u8
opt_type_l_path_table
[
ISODCL
(
145
,
148
)];
/* 731 */
char
type_m_path_table
[
ISODCL
(
149
,
152
)];
/* 732 */
__u8
type_m_path_table
[
ISODCL
(
149
,
152
)];
/* 732 */
char
opt_type_m_path_table
[
ISODCL
(
153
,
156
)];
/* 732 */
__u8
opt_type_m_path_table
[
ISODCL
(
153
,
156
)];
/* 732 */
char
root_directory_record
[
ISODCL
(
157
,
190
)];
/* 9.1 */
__u8
root_directory_record
[
ISODCL
(
157
,
190
)];
/* 9.1 */
char
volume_set_id
[
ISODCL
(
191
,
318
)];
/* dchars */
char
volume_set_id
[
ISODCL
(
191
,
318
)];
/* dchars */
char
publisher_id
[
ISODCL
(
319
,
446
)];
/* achars */
char
publisher_id
[
ISODCL
(
319
,
446
)];
/* achars */
char
preparer_id
[
ISODCL
(
447
,
574
)];
/* achars */
char
preparer_id
[
ISODCL
(
447
,
574
)];
/* achars */
...
@@ -51,36 +51,36 @@ struct iso_primary_descriptor {
...
@@ -51,36 +51,36 @@ struct iso_primary_descriptor {
char
copyright_file_id
[
ISODCL
(
703
,
739
)];
/* 7.5 dchars */
char
copyright_file_id
[
ISODCL
(
703
,
739
)];
/* 7.5 dchars */
char
abstract_file_id
[
ISODCL
(
740
,
776
)];
/* 7.5 dchars */
char
abstract_file_id
[
ISODCL
(
740
,
776
)];
/* 7.5 dchars */
char
bibliographic_file_id
[
ISODCL
(
777
,
813
)];
/* 7.5 dchars */
char
bibliographic_file_id
[
ISODCL
(
777
,
813
)];
/* 7.5 dchars */
char
creation_date
[
ISODCL
(
814
,
830
)];
/* 8.4.26.1 */
__u8
creation_date
[
ISODCL
(
814
,
830
)];
/* 8.4.26.1 */
char
modification_date
[
ISODCL
(
831
,
847
)];
/* 8.4.26.1 */
__u8
modification_date
[
ISODCL
(
831
,
847
)];
/* 8.4.26.1 */
char
expiration_date
[
ISODCL
(
848
,
864
)];
/* 8.4.26.1 */
__u8
expiration_date
[
ISODCL
(
848
,
864
)];
/* 8.4.26.1 */
char
effective_date
[
ISODCL
(
865
,
881
)];
/* 8.4.26.1 */
__u8
effective_date
[
ISODCL
(
865
,
881
)];
/* 8.4.26.1 */
char
file_structure_version
[
ISODCL
(
882
,
882
)];
/* 711 */
__u8
file_structure_version
[
ISODCL
(
882
,
882
)];
/* 711 */
char
unused4
[
ISODCL
(
883
,
883
)];
__u8
unused4
[
ISODCL
(
883
,
883
)];
char
application_data
[
ISODCL
(
884
,
1395
)];
__u8
application_data
[
ISODCL
(
884
,
1395
)];
char
unused5
[
ISODCL
(
1396
,
2048
)];
__u8
unused5
[
ISODCL
(
1396
,
2048
)];
};
};
/* Almost the same as the primary descriptor but two fields are specified */
/* Almost the same as the primary descriptor but two fields are specified */
struct
iso_supplementary_descriptor
{
struct
iso_supplementary_descriptor
{
char
type
[
ISODCL
(
1
,
1
)];
/* 711 */
__u8
type
[
ISODCL
(
1
,
1
)];
/* 711 */
char
id
[
ISODCL
(
2
,
6
)];
char
id
[
ISODCL
(
2
,
6
)];
char
version
[
ISODCL
(
7
,
7
)];
/* 711 */
__u8
version
[
ISODCL
(
7
,
7
)];
/* 711 */
char
flags
[
ISODCL
(
8
,
8
)];
/* 853 */
__u8
flags
[
ISODCL
(
8
,
8
)];
/* 853 */
char
system_id
[
ISODCL
(
9
,
40
)];
/* achars */
char
system_id
[
ISODCL
(
9
,
40
)];
/* achars */
char
volume_id
[
ISODCL
(
41
,
72
)];
/* dchars */
char
volume_id
[
ISODCL
(
41
,
72
)];
/* dchars */
char
unused2
[
ISODCL
(
73
,
80
)];
__u8
unused2
[
ISODCL
(
73
,
80
)];
char
volume_space_size
[
ISODCL
(
81
,
88
)];
/* 733 */
__u8
volume_space_size
[
ISODCL
(
81
,
88
)];
/* 733 */
char
escape
[
ISODCL
(
89
,
120
)];
/* 856 */
__u8
escape
[
ISODCL
(
89
,
120
)];
/* 856 */
char
volume_set_size
[
ISODCL
(
121
,
124
)];
/* 723 */
__u8
volume_set_size
[
ISODCL
(
121
,
124
)];
/* 723 */
char
volume_sequence_number
[
ISODCL
(
125
,
128
)];
/* 723 */
__u8
volume_sequence_number
[
ISODCL
(
125
,
128
)];
/* 723 */
char
logical_block_size
[
ISODCL
(
129
,
132
)];
/* 723 */
__u8
logical_block_size
[
ISODCL
(
129
,
132
)];
/* 723 */
char
path_table_size
[
ISODCL
(
133
,
140
)];
/* 733 */
__u8
path_table_size
[
ISODCL
(
133
,
140
)];
/* 733 */
char
type_l_path_table
[
ISODCL
(
141
,
144
)];
/* 731 */
__u8
type_l_path_table
[
ISODCL
(
141
,
144
)];
/* 731 */
char
opt_type_l_path_table
[
ISODCL
(
145
,
148
)];
/* 731 */
__u8
opt_type_l_path_table
[
ISODCL
(
145
,
148
)];
/* 731 */
char
type_m_path_table
[
ISODCL
(
149
,
152
)];
/* 732 */
__u8
type_m_path_table
[
ISODCL
(
149
,
152
)];
/* 732 */
char
opt_type_m_path_table
[
ISODCL
(
153
,
156
)];
/* 732 */
__u8
opt_type_m_path_table
[
ISODCL
(
153
,
156
)];
/* 732 */
char
root_directory_record
[
ISODCL
(
157
,
190
)];
/* 9.1 */
__u8
root_directory_record
[
ISODCL
(
157
,
190
)];
/* 9.1 */
char
volume_set_id
[
ISODCL
(
191
,
318
)];
/* dchars */
char
volume_set_id
[
ISODCL
(
191
,
318
)];
/* dchars */
char
publisher_id
[
ISODCL
(
319
,
446
)];
/* achars */
char
publisher_id
[
ISODCL
(
319
,
446
)];
/* achars */
char
preparer_id
[
ISODCL
(
447
,
574
)];
/* achars */
char
preparer_id
[
ISODCL
(
447
,
574
)];
/* achars */
...
@@ -88,54 +88,54 @@ struct iso_supplementary_descriptor {
...
@@ -88,54 +88,54 @@ struct iso_supplementary_descriptor {
char
copyright_file_id
[
ISODCL
(
703
,
739
)];
/* 7.5 dchars */
char
copyright_file_id
[
ISODCL
(
703
,
739
)];
/* 7.5 dchars */
char
abstract_file_id
[
ISODCL
(
740
,
776
)];
/* 7.5 dchars */
char
abstract_file_id
[
ISODCL
(
740
,
776
)];
/* 7.5 dchars */
char
bibliographic_file_id
[
ISODCL
(
777
,
813
)];
/* 7.5 dchars */
char
bibliographic_file_id
[
ISODCL
(
777
,
813
)];
/* 7.5 dchars */
char
creation_date
[
ISODCL
(
814
,
830
)];
/* 8.4.26.1 */
__u8
creation_date
[
ISODCL
(
814
,
830
)];
/* 8.4.26.1 */
char
modification_date
[
ISODCL
(
831
,
847
)];
/* 8.4.26.1 */
__u8
modification_date
[
ISODCL
(
831
,
847
)];
/* 8.4.26.1 */
char
expiration_date
[
ISODCL
(
848
,
864
)];
/* 8.4.26.1 */
__u8
expiration_date
[
ISODCL
(
848
,
864
)];
/* 8.4.26.1 */
char
effective_date
[
ISODCL
(
865
,
881
)];
/* 8.4.26.1 */
__u8
effective_date
[
ISODCL
(
865
,
881
)];
/* 8.4.26.1 */
char
file_structure_version
[
ISODCL
(
882
,
882
)];
/* 711 */
__u8
file_structure_version
[
ISODCL
(
882
,
882
)];
/* 711 */
char
unused4
[
ISODCL
(
883
,
883
)];
__u8
unused4
[
ISODCL
(
883
,
883
)];
char
application_data
[
ISODCL
(
884
,
1395
)];
__u8
application_data
[
ISODCL
(
884
,
1395
)];
char
unused5
[
ISODCL
(
1396
,
2048
)];
__u8
unused5
[
ISODCL
(
1396
,
2048
)];
};
};
#define HS_STANDARD_ID "CDROM"
#define HS_STANDARD_ID "CDROM"
struct
hs_volume_descriptor
{
struct
hs_volume_descriptor
{
char
foo
[
ISODCL
(
1
,
8
)];
/* 733 */
__u8
foo
[
ISODCL
(
1
,
8
)];
/* 733 */
char
type
[
ISODCL
(
9
,
9
)];
/* 711 */
__u8
type
[
ISODCL
(
9
,
9
)];
/* 711 */
char
id
[
ISODCL
(
10
,
14
)];
char
id
[
ISODCL
(
10
,
14
)];
char
version
[
ISODCL
(
15
,
15
)];
/* 711 */
__u8
version
[
ISODCL
(
15
,
15
)];
/* 711 */
char
data
[
ISODCL
(
16
,
2048
)];
__u8
data
[
ISODCL
(
16
,
2048
)];
};
};
struct
hs_primary_descriptor
{
struct
hs_primary_descriptor
{
char
foo
[
ISODCL
(
1
,
8
)];
/* 733 */
__u8
foo
[
ISODCL
(
1
,
8
)];
/* 733 */
char
type
[
ISODCL
(
9
,
9
)];
/* 711 */
__u8
type
[
ISODCL
(
9
,
9
)];
/* 711 */
char
id
[
ISODCL
(
10
,
14
)];
__u8
id
[
ISODCL
(
10
,
14
)];
char
version
[
ISODCL
(
15
,
15
)];
/* 711 */
__u8
version
[
ISODCL
(
15
,
15
)];
/* 711 */
char
unused1
[
ISODCL
(
16
,
16
)];
/* 711 */
__u8
unused1
[
ISODCL
(
16
,
16
)];
/* 711 */
char
system_id
[
ISODCL
(
17
,
48
)];
/* achars */
char
system_id
[
ISODCL
(
17
,
48
)];
/* achars */
char
volume_id
[
ISODCL
(
49
,
80
)];
/* dchars */
char
volume_id
[
ISODCL
(
49
,
80
)];
/* dchars */
char
unused2
[
ISODCL
(
81
,
88
)];
/* 733 */
__u8
unused2
[
ISODCL
(
81
,
88
)];
/* 733 */
char
volume_space_size
[
ISODCL
(
89
,
96
)];
/* 733 */
__u8
volume_space_size
[
ISODCL
(
89
,
96
)];
/* 733 */
char
unused3
[
ISODCL
(
97
,
128
)];
/* 733 */
__u8
unused3
[
ISODCL
(
97
,
128
)];
/* 733 */
char
volume_set_size
[
ISODCL
(
129
,
132
)];
/* 723 */
__u8
volume_set_size
[
ISODCL
(
129
,
132
)];
/* 723 */
char
volume_sequence_number
[
ISODCL
(
133
,
136
)];
/* 723 */
__u8
volume_sequence_number
[
ISODCL
(
133
,
136
)];
/* 723 */
char
logical_block_size
[
ISODCL
(
137
,
140
)];
/* 723 */
__u8
logical_block_size
[
ISODCL
(
137
,
140
)];
/* 723 */
char
path_table_size
[
ISODCL
(
141
,
148
)];
/* 733 */
__u8
path_table_size
[
ISODCL
(
141
,
148
)];
/* 733 */
char
type_l_path_table
[
ISODCL
(
149
,
152
)];
/* 731 */
__u8
type_l_path_table
[
ISODCL
(
149
,
152
)];
/* 731 */
char
unused4
[
ISODCL
(
153
,
180
)];
/* 733 */
__u8
unused4
[
ISODCL
(
153
,
180
)];
/* 733 */
char
root_directory_record
[
ISODCL
(
181
,
214
)];
/* 9.1 */
__u8
root_directory_record
[
ISODCL
(
181
,
214
)];
/* 9.1 */
};
};
/* We use this to help us look up the parent inode numbers. */
/* We use this to help us look up the parent inode numbers. */
struct
iso_path_table
{
struct
iso_path_table
{
unsigned
char
name_len
[
2
];
/* 721 */
__u8
name_len
[
2
];
/* 721 */
char
extent
[
4
];
/* 731 */
__u8
extent
[
4
];
/* 731 */
char
parent
[
2
];
/* 721 */
__u8
parent
[
2
];
/* 721 */
char
name
[
0
];
char
name
[
0
];
}
__attribute__
((
packed
));
}
__attribute__
((
packed
));
...
@@ -143,16 +143,16 @@ struct iso_path_table{
...
@@ -143,16 +143,16 @@ struct iso_path_table{
there is an extra reserved byte after the flags */
there is an extra reserved byte after the flags */
struct
iso_directory_record
{
struct
iso_directory_record
{
char
length
[
ISODCL
(
1
,
1
)];
/* 711 */
__u8
length
[
ISODCL
(
1
,
1
)];
/* 711 */
char
ext_attr_length
[
ISODCL
(
2
,
2
)];
/* 711 */
__u8
ext_attr_length
[
ISODCL
(
2
,
2
)];
/* 711 */
char
extent
[
ISODCL
(
3
,
10
)];
/* 733 */
__u8
extent
[
ISODCL
(
3
,
10
)];
/* 733 */
char
size
[
ISODCL
(
11
,
18
)];
/* 733 */
__u8
size
[
ISODCL
(
11
,
18
)];
/* 733 */
char
date
[
ISODCL
(
19
,
25
)];
/* 7 by 711 */
__u8
date
[
ISODCL
(
19
,
25
)];
/* 7 by 711 */
char
flags
[
ISODCL
(
26
,
26
)];
__u8
flags
[
ISODCL
(
26
,
26
)];
char
file_unit_size
[
ISODCL
(
27
,
27
)];
/* 711 */
__u8
file_unit_size
[
ISODCL
(
27
,
27
)];
/* 711 */
char
interleave
[
ISODCL
(
28
,
28
)];
/* 711 */
__u8
interleave
[
ISODCL
(
28
,
28
)];
/* 711 */
char
volume_sequence_number
[
ISODCL
(
29
,
32
)];
/* 723 */
__u8
volume_sequence_number
[
ISODCL
(
29
,
32
)];
/* 723 */
unsigned
char
name_len
[
ISODCL
(
33
,
33
)];
/* 711 */
__u8
name_len
[
ISODCL
(
33
,
33
)];
/* 711 */
char
name
[
0
];
char
name
[
0
];
}
__attribute__
((
packed
));
}
__attribute__
((
packed
));
...
...
kernel/auditsc.c
浏览文件 @
838bee9e
...
@@ -2390,6 +2390,12 @@ void __audit_log_kern_module(char *name)
...
@@ -2390,6 +2390,12 @@ void __audit_log_kern_module(char *name)
context
->
type
=
AUDIT_KERN_MODULE
;
context
->
type
=
AUDIT_KERN_MODULE
;
}
}
void
__audit_fanotify
(
unsigned
int
response
)
{
audit_log
(
current
->
audit_context
,
GFP_KERNEL
,
AUDIT_FANOTIFY
,
"resp=%u"
,
response
);
}
static
void
audit_log_task
(
struct
audit_buffer
*
ab
)
static
void
audit_log_task
(
struct
audit_buffer
*
ab
)
{
{
kuid_t
auid
,
uid
;
kuid_t
auid
,
uid
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录