Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
838bee9e
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
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
*
UDF Filesystem version 0.9.8.1
If you encounter problems with reading UDF discs using this driver,
please report them to linux_udf@hpesjro.fc.hp.com, which is the
developer's list.
please report them according to MAINTAINERS file.
Write support requires a block driver which supports writing. Currently
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.
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:
http://www.osta.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 = {
{
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
;
struct
ext2_sb_info
*
sbi
=
EXT2_SB
(
sb
);
substring_t
args
[
MAX_OPT_ARGS
];
int
option
;
kuid_t
uid
;
...
...
@@ -499,16 +499,16 @@ static int parse_options(char *options, struct super_block *sb)
token
=
match_token
(
p
,
tokens
,
args
);
switch
(
token
)
{
case
Opt_bsd_df
:
clear_opt
(
sbi
->
s_mount_opt
,
MINIX_DF
);
clear_opt
(
opts
->
s_mount_opt
,
MINIX_DF
);
break
;
case
Opt_minix_df
:
set_opt
(
sbi
->
s_mount_opt
,
MINIX_DF
);
set_opt
(
opts
->
s_mount_opt
,
MINIX_DF
);
break
;
case
Opt_grpid
:
set_opt
(
sbi
->
s_mount_opt
,
GRPID
);
set_opt
(
opts
->
s_mount_opt
,
GRPID
);
break
;
case
Opt_nogrpid
:
clear_opt
(
sbi
->
s_mount_opt
,
GRPID
);
clear_opt
(
opts
->
s_mount_opt
,
GRPID
);
break
;
case
Opt_resuid
:
if
(
match_int
(
&
args
[
0
],
&
option
))
...
...
@@ -519,7 +519,7 @@ static int parse_options(char *options, struct super_block *sb)
return
0
;
}
sbi
->
s_resuid
=
uid
;
opts
->
s_resuid
=
uid
;
break
;
case
Opt_resgid
:
if
(
match_int
(
&
args
[
0
],
&
option
))
...
...
@@ -529,51 +529,51 @@ static int parse_options(char *options, struct super_block *sb)
ext2_msg
(
sb
,
KERN_ERR
,
"Invalid gid value %d"
,
option
);
return
0
;
}
sbi
->
s_resgid
=
gid
;
opts
->
s_resgid
=
gid
;
break
;
case
Opt_sb
:
/* handled by get_sb_block() instead of here */
/* *sb_block = match_int(&args[0]); */
break
;
case
Opt_err_panic
:
clear_opt
(
sbi
->
s_mount_opt
,
ERRORS_CONT
);
clear_opt
(
sbi
->
s_mount_opt
,
ERRORS_RO
);
set_opt
(
sbi
->
s_mount_opt
,
ERRORS_PANIC
);
clear_opt
(
opts
->
s_mount_opt
,
ERRORS_CONT
);
clear_opt
(
opts
->
s_mount_opt
,
ERRORS_RO
);
set_opt
(
opts
->
s_mount_opt
,
ERRORS_PANIC
);
break
;
case
Opt_err_ro
:
clear_opt
(
sbi
->
s_mount_opt
,
ERRORS_CONT
);
clear_opt
(
sbi
->
s_mount_opt
,
ERRORS_PANIC
);
set_opt
(
sbi
->
s_mount_opt
,
ERRORS_RO
);
clear_opt
(
opts
->
s_mount_opt
,
ERRORS_CONT
);
clear_opt
(
opts
->
s_mount_opt
,
ERRORS_PANIC
);
set_opt
(
opts
->
s_mount_opt
,
ERRORS_RO
);
break
;
case
Opt_err_cont
:
clear_opt
(
sbi
->
s_mount_opt
,
ERRORS_RO
);
clear_opt
(
sbi
->
s_mount_opt
,
ERRORS_PANIC
);
set_opt
(
sbi
->
s_mount_opt
,
ERRORS_CONT
);
clear_opt
(
opts
->
s_mount_opt
,
ERRORS_RO
);
clear_opt
(
opts
->
s_mount_opt
,
ERRORS_PANIC
);
set_opt
(
opts
->
s_mount_opt
,
ERRORS_CONT
);
break
;
case
Opt_nouid32
:
set_opt
(
sbi
->
s_mount_opt
,
NO_UID32
);
set_opt
(
opts
->
s_mount_opt
,
NO_UID32
);
break
;
case
Opt_nocheck
:
clear_opt
(
sbi
->
s_mount_opt
,
CHECK
);
clear_opt
(
opts
->
s_mount_opt
,
CHECK
);
break
;
case
Opt_debug
:
set_opt
(
sbi
->
s_mount_opt
,
DEBUG
);
set_opt
(
opts
->
s_mount_opt
,
DEBUG
);
break
;
case
Opt_oldalloc
:
set_opt
(
sbi
->
s_mount_opt
,
OLDALLOC
);
set_opt
(
opts
->
s_mount_opt
,
OLDALLOC
);
break
;
case
Opt_orlov
:
clear_opt
(
sbi
->
s_mount_opt
,
OLDALLOC
);
clear_opt
(
opts
->
s_mount_opt
,
OLDALLOC
);
break
;
case
Opt_nobh
:
set_opt
(
sbi
->
s_mount_opt
,
NOBH
);
set_opt
(
opts
->
s_mount_opt
,
NOBH
);
break
;
#ifdef CONFIG_EXT2_FS_XATTR
case
Opt_user_xattr
:
set_opt
(
sbi
->
s_mount_opt
,
XATTR_USER
);
set_opt
(
opts
->
s_mount_opt
,
XATTR_USER
);
break
;
case
Opt_nouser_xattr
:
clear_opt
(
sbi
->
s_mount_opt
,
XATTR_USER
);
clear_opt
(
opts
->
s_mount_opt
,
XATTR_USER
);
break
;
#else
case
Opt_user_xattr
:
...
...
@@ -584,10 +584,10 @@ static int parse_options(char *options, struct super_block *sb)
#endif
#ifdef CONFIG_EXT2_FS_POSIX_ACL
case
Opt_acl
:
set_opt
(
sbi
->
s_mount_opt
,
POSIX_ACL
);
set_opt
(
opts
->
s_mount_opt
,
POSIX_ACL
);
break
;
case
Opt_noacl
:
clear_opt
(
sbi
->
s_mount_opt
,
POSIX_ACL
);
clear_opt
(
opts
->
s_mount_opt
,
POSIX_ACL
);
break
;
#else
case
Opt_acl
:
...
...
@@ -598,13 +598,13 @@ static int parse_options(char *options, struct super_block *sb)
#endif
case
Opt_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 */
case
Opt_dax
:
#ifdef CONFIG_FS_DAX
ext2_msg
(
sb
,
KERN_WARNING
,
"DAX enabled. Warning: EXPERIMENTAL, use at your own risk"
);
set_opt
(
sbi
->
s_mount_opt
,
DAX
);
set_opt
(
opts
->
s_mount_opt
,
DAX
);
#else
ext2_msg
(
sb
,
KERN_INFO
,
"dax option not supported"
);
#endif
...
...
@@ -613,11 +613,11 @@ static int parse_options(char *options, struct super_block *sb)
#if defined(CONFIG_QUOTA)
case
Opt_quota
:
case
Opt_usrquota
:
set_opt
(
sbi
->
s_mount_opt
,
USRQUOTA
);
set_opt
(
opts
->
s_mount_opt
,
USRQUOTA
);
break
;
case
Opt_grpquota
:
set_opt
(
sbi
->
s_mount_opt
,
GRPQUOTA
);
set_opt
(
opts
->
s_mount_opt
,
GRPQUOTA
);
break
;
#else
case
Opt_quota
:
...
...
@@ -629,11 +629,11 @@ static int parse_options(char *options, struct super_block *sb)
#endif
case
Opt_reservation
:
set_opt
(
sbi
->
s_mount_opt
,
RESERVATION
);
set_opt
(
opts
->
s_mount_opt
,
RESERVATION
);
ext2_msg
(
sb
,
KERN_INFO
,
"reservations ON"
);
break
;
case
Opt_noreservation
:
clear_opt
(
sbi
->
s_mount_opt
,
RESERVATION
);
clear_opt
(
opts
->
s_mount_opt
,
RESERVATION
);
ext2_msg
(
sb
,
KERN_INFO
,
"reservations OFF"
);
break
;
case
Opt_ignore
:
...
...
@@ -830,6 +830,7 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)
int
i
,
j
;
__le32
features
;
int
err
;
struct
ext2_mount_options
opts
;
err
=
-
ENOMEM
;
sbi
=
kzalloc
(
sizeof
(
*
sbi
),
GFP_KERNEL
);
...
...
@@ -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 */
def_mount_opts
=
le32_to_cpu
(
es
->
s_default_mount_opts
);
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
)
set_opt
(
sbi
->
s_mount_opt
,
GRPID
);
set_opt
(
opts
.
s_mount_opt
,
GRPID
);
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
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
#ifdef CONFIG_EXT2_FS_POSIX_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
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
)
set_opt
(
sbi
->
s_mount_opt
,
ERRORS_CONT
);
set_opt
(
opts
.
s_mount_opt
,
ERRORS_CONT
);
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
));
sbi
->
s_resgid
=
make_kgid
(
&
init_user_ns
,
le16_to_cpu
(
es
->
s_def_resgid
));
opts
.
s_resuid
=
make_kuid
(
&
init_user_ns
,
le16_to_cpu
(
es
->
s_def_resuid
));
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
;
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
)
|
((
EXT2_SB
(
sb
)
->
s_mount_opt
&
EXT2_MOUNT_POSIX_ACL
)
?
MS_POSIXACL
:
0
);
...
...
@@ -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_super_block
*
es
;
struct
ext2_mount_options
old_opts
;
unsigned
long
old_sb_flags
;
struct
ext2_mount_options
new_opts
;
int
err
;
sync_filesystem
(
sb
);
spin_lock
(
&
sbi
->
s_lock
);
/* Store the old options */
old_sb_flags
=
sb
->
s_flags
;
old_opts
.
s_mount_opt
=
sbi
->
s_mount_opt
;
old_opts
.
s_resuid
=
sbi
->
s_resu
id
;
old_opts
.
s_resgid
=
sbi
->
s_resgid
;
spin_lock
(
&
sbi
->
s_lock
);
new_opts
.
s_mount_opt
=
sbi
->
s_mount_opt
;
new_opts
.
s_resuid
=
sbi
->
s_resuid
;
new_opts
.
s_resgid
=
sbi
->
s_resg
id
;
spin_unlock
(
&
sbi
->
s_lock
)
;
/*
* Allow the "check" option to be passed as a remount option.
*/
if
(
!
parse_options
(
data
,
sb
))
{
err
=
-
EINVAL
;
goto
restore_opts
;
}
sb
->
s_flags
=
(
sb
->
s_flags
&
~
MS_POSIXACL
)
|
((
sbi
->
s_mount_opt
&
EXT2_MOUNT_POSIX_ACL
)
?
MS_POSIXACL
:
0
);
if
(
!
parse_options
(
data
,
sb
,
&
new_opts
))
return
-
EINVAL
;
spin_lock
(
&
sbi
->
s_lock
);
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 "
"dax flag with busy inodes while remounting"
);
sbi
->
s_mount_opt
^=
EXT2_MOUNT_DAX
;
}
if
((
bool
)(
*
flags
&
MS_RDONLY
)
==
sb_rdonly
(
sb
))
{
spin_unlock
(
&
sbi
->
s_lock
);
return
0
;
new_opts
.
s_mount_opt
^=
EXT2_MOUNT_DAX
;
}
if
((
bool
)(
*
flags
&
MS_RDONLY
)
==
sb_rdonly
(
sb
))
goto
out_set
;
if
(
*
flags
&
MS_RDONLY
)
{
if
(
le16_to_cpu
(
es
->
s_state
)
&
EXT2_VALID_FS
||
!
(
sbi
->
s_mount_state
&
EXT2_VALID_FS
))
{
spin_unlock
(
&
sbi
->
s_lock
);
return
0
;
}
!
(
sbi
->
s_mount_state
&
EXT2_VALID_FS
))
goto
out_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)
spin_unlock
(
&
sbi
->
s_lock
);
err
=
dquot_suspend
(
sb
,
-
1
);
if
(
err
<
0
)
{
spin_lock
(
&
sbi
->
s_lock
);
goto
restore_opts
;
}
if
(
err
<
0
)
return
err
;
ext2_sync_super
(
sb
,
es
,
1
);
}
else
{
__le32
ret
=
EXT2_HAS_RO_COMPAT_FEATURE
(
sb
,
~
EXT2_FEATURE_RO_COMPAT_SUPP
);
if
(
ret
)
{
spin_unlock
(
&
sbi
->
s_lock
);
ext2_msg
(
sb
,
KERN_WARNING
,
"warning: couldn't remount RDWR because of "
"unsupported optional features (%x)."
,
le32_to_cpu
(
ret
));
err
=
-
EROFS
;
goto
restore_opts
;
return
-
EROFS
;
}
/*
* 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)
dquot_resume
(
sb
,
-
1
);
}
return
0
;
restore_opts:
sbi
->
s_mount_opt
=
old_opts
.
s_mount_opt
;
sbi
->
s_resuid
=
old_opts
.
s_resuid
;
sbi
->
s_resgid
=
old_opts
.
s_resgid
;
sb
->
s_flags
=
old_sb_flags
;
spin_lock
(
&
sbi
->
s_lock
);
out_set:
sbi
->
s_mount_opt
=
new_opts
.
s_mount_opt
;
sbi
->
s_resuid
=
new_opts
.
s_resuid
;
sbi
->
s_resgid
=
new_opts
.
s_resgid
;
sb
->
s_flags
=
(
sb
->
s_flags
&
~
MS_POSIXACL
)
|
((
sbi
->
s_mount_opt
&
EXT2_MOUNT_POSIX_ACL
)
?
MS_POSIXACL
:
0
);
spin_unlock
(
&
sbi
->
s_lock
);
return
err
;
return
0
;
}
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)
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
);
}
static
inline
unsigned
int
isonum_722
(
char
*
p
)
static
inline
unsigned
int
isonum_722
(
u8
*
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 */
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
);
}
static
inline
unsigned
int
isonum_732
(
char
*
p
)
static
inline
unsigned
int
isonum_732
(
u8
*
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 */
return
get_unaligned_le32
(
p
);
}
extern
int
iso_date
(
char
*
,
int
);
extern
int
iso_date
(
u8
*
,
int
);
struct
inode
;
/* To make gcc happy */
...
...
fs/isofs/rock.h
浏览文件 @
838bee9e
...
...
@@ -6,78 +6,78 @@
*/
struct
SU_SP_s
{
unsigned
char
magic
[
2
];
unsigned
char
skip
;
__u8
magic
[
2
];
__u8
skip
;
}
__attribute__
((
packed
));
struct
SU_CE_s
{
char
extent
[
8
];
char
offset
[
8
];
char
size
[
8
];
__u8
extent
[
8
];
__u8
offset
[
8
];
__u8
size
[
8
];
};
struct
SU_ER_s
{
unsigned
char
len_id
;
unsigned
char
len_des
;
unsigned
char
len_src
;
unsigned
char
ext_ver
;
char
data
[
0
];
__u8
len_id
;
__u8
len_des
;
__u8
len_src
;
__u8
ext_ver
;
__u8
data
[
0
];
}
__attribute__
((
packed
));
struct
RR_RR_s
{
char
flags
[
1
];
__u8
flags
[
1
];
}
__attribute__
((
packed
));
struct
RR_PX_s
{
char
mode
[
8
];
char
n_links
[
8
];
char
uid
[
8
];
char
gid
[
8
];
__u8
mode
[
8
];
__u8
n_links
[
8
];
__u8
uid
[
8
];
__u8
gid
[
8
];
};
struct
RR_PN_s
{
char
dev_high
[
8
];
char
dev_low
[
8
];
__u8
dev_high
[
8
];
__u8
dev_low
[
8
];
};
struct
SL_component
{
unsigned
char
flags
;
unsigned
char
len
;
char
text
[
0
];
__u8
flags
;
__u8
len
;
__u8
text
[
0
];
}
__attribute__
((
packed
));
struct
RR_SL_s
{
unsigned
char
flags
;
__u8
flags
;
struct
SL_component
link
;
}
__attribute__
((
packed
));
struct
RR_NM_s
{
unsigned
char
flags
;
__u8
flags
;
char
name
[
0
];
}
__attribute__
((
packed
));
struct
RR_CL_s
{
char
location
[
8
];
__u8
location
[
8
];
};
struct
RR_PL_s
{
char
location
[
8
];
__u8
location
[
8
];
};
struct
stamp
{
char
time
[
7
];
__u8
time
[
7
];
/* actually 6 unsigned, 1 signed */
}
__attribute__
((
packed
));
struct
RR_TF_s
{
char
flags
;
__u8
flags
;
struct
stamp
times
[
0
];
/* Variable number of these beasts */
}
__attribute__
((
packed
));
/* Linux-specific extension for transparent decompression */
struct
RR_ZF_s
{
char
algorithm
[
2
];
char
parms
[
2
];
char
real_size
[
8
];
__u8
algorithm
[
2
];
__u8
parms
[
2
];
__u8
real_size
[
8
];
};
/*
...
...
@@ -93,9 +93,9 @@ struct RR_ZF_s {
#define TF_LONG_FORM 128
struct
rock_ridge
{
char
signature
[
2
];
unsigned
char
len
;
unsigned
char
version
;
__u8
signature
[
2
];
__u8
len
;
__u8
version
;
union
{
struct
SU_SP_s
SP
;
struct
SU_CE_s
CE
;
...
...
fs/isofs/util.c
浏览文件 @
838bee9e
...
...
@@ -15,7 +15,7 @@
* 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
crtime
;
...
...
fs/notify/fanotify/fanotify.c
浏览文件 @
838bee9e
...
...
@@ -9,6 +9,7 @@
#include <linux/sched/user.h>
#include <linux/types.h>
#include <linux/wait.h>
#include <linux/audit.h>
#include "fanotify.h"
...
...
@@ -78,7 +79,7 @@ static int fanotify_get_response(struct fsnotify_group *group,
fsnotify_finish_user_wait
(
iter_info
);
out:
/* userspace responded, convert to something usable */
switch
(
event
->
response
)
{
switch
(
event
->
response
&
~
FAN_AUDIT
)
{
case
FAN_ALLOW
:
ret
=
0
;
break
;
...
...
@@ -86,6 +87,11 @@ static int fanotify_get_response(struct fsnotify_group *group,
default:
ret
=
-
EPERM
;
}
/* Check if the response should be audited */
if
(
event
->
response
&
FAN_AUDIT
)
audit_fanotify
(
event
->
response
&
~
FAN_AUDIT
);
event
->
response
=
0
;
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,
* userspace can send a valid response or we will clean it up after the
* timeout
*/
switch
(
response
)
{
switch
(
response
&
~
FAN_AUDIT
)
{
case
FAN_ALLOW
:
case
FAN_DENY
:
break
;
...
...
@@ -190,6 +190,9 @@ static int process_access_response(struct fsnotify_group *group,
if
(
fd
<
0
)
return
-
EINVAL
;
if
((
response
&
FAN_AUDIT
)
&&
!
group
->
fanotify_data
.
audit
)
return
-
EINVAL
;
event
=
dequeue_event
(
group
,
fd
);
if
(
!
event
)
return
-
ENOENT
;
...
...
@@ -721,7 +724,11 @@ SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags)
if
(
!
capable
(
CAP_SYS_ADMIN
))
return
-
EPERM
;
#ifdef CONFIG_AUDITSYSCALL
if
(
flags
&
~
(
FAN_ALL_INIT_FLAGS
|
FAN_ENABLE_AUDIT
))
#else
if
(
flags
&
~
FAN_ALL_INIT_FLAGS
)
#endif
return
-
EINVAL
;
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)
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
);
if
(
fd
<
0
)
goto
out_destroy_group
;
...
...
fs/notify/fdinfo.c
浏览文件 @
838bee9e
...
...
@@ -156,6 +156,9 @@ void fanotify_show_fdinfo(struct seq_file *m, struct file *f)
if
(
group
->
fanotify_data
.
max_marks
==
UINT_MAX
)
flags
|=
FAN_UNLIMITED_MARKS
;
if
(
group
->
fanotify_data
.
audit
)
flags
|=
FAN_ENABLE_AUDIT
;
seq_printf
(
m
,
"fanotify flags:%x event-flags:%x
\n
"
,
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)
spin_unlock
(
&
dq_list_lock
);
dqstats_inc
(
DQST_LOOKUPS
);
err
=
sb
->
dq_op
->
write_dquot
(
dquot
);
if
(
!
ret
&&
err
)
ret
=
err
;
if
(
err
)
{
/*
* Clear dirty bit anyway to avoid infinite
* loop here.
*/
clear_dquot_dirty
(
dquot
);
if
(
!
ret
)
ret
=
err
;
}
dqput
(
dquot
);
spin_lock
(
&
dq_list_lock
);
}
...
...
@@ -2138,7 +2145,7 @@ int dquot_file_open(struct inode *inode, struct file *file)
error
=
generic_file_open
(
inode
,
file
);
if
(
!
error
&&
(
file
->
f_mode
&
FMODE_WRITE
))
dquot_initialize
(
inode
);
error
=
dquot_initialize
(
inode
);
return
error
;
}
EXPORT_SYMBOL
(
dquot_file_open
);
...
...
fs/udf/balloc.c
浏览文件 @
838bee9e
...
...
@@ -58,7 +58,7 @@ static int __load_block_bitmap(struct super_block *sb,
int
nr_groups
=
bitmap
->
s_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
);
}
...
...
@@ -122,7 +122,7 @@ static void udf_bitmap_free_blocks(struct super_block *sb,
partmap
=
&
sbi
->
s_partmaps
[
bloc
->
partitionReferenceNum
];
if
(
bloc
->
logicalBlockNum
+
count
<
count
||
(
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
,
count
,
partmap
->
s_partition_len
);
...
...
@@ -151,9 +151,9 @@ static void udf_bitmap_free_blocks(struct super_block *sb,
bh
=
bitmap
->
s_block_bitmap
[
bitmap_nr
];
for
(
i
=
0
;
i
<
count
;
i
++
)
{
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
"
,
((
char
*
)
bh
->
b_data
)[(
bit
+
i
)
>>
3
]);
((
__u8
*
)
bh
->
b_data
)[(
bit
+
i
)
>>
3
]);
}
}
udf_add_free_space
(
sb
,
sbi
->
s_partition
,
count
);
...
...
@@ -218,16 +218,18 @@ static int udf_bitmap_prealloc_blocks(struct super_block *sb,
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
,
uint32_t
goal
,
int
*
err
)
{
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
;
struct
buffer_head
*
bh
=
NULL
;
char
*
ptr
;
in
t
newblock
=
0
;
udf_pblk_
t
newblock
=
0
;
*
err
=
-
ENOSPC
;
mutex_lock
(
&
sbi
->
s_alloc_mutex
);
...
...
@@ -362,7 +364,7 @@ static void udf_table_free_blocks(struct super_block *sb,
partmap
=
&
sbi
->
s_partmaps
[
bloc
->
partitionReferenceNum
];
if
(
bloc
->
logicalBlockNum
+
count
<
count
||
(
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
,
count
,
partmap
->
s_partition_len
);
...
...
@@ -515,7 +517,7 @@ static int udf_table_prealloc_blocks(struct super_block *sb,
while
(
first_block
!=
eloc
.
logicalBlockNum
&&
(
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
);
;
/* empty loop body */
}
...
...
@@ -545,13 +547,14 @@ static int udf_table_prealloc_blocks(struct super_block *sb,
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
,
uint32_t
goal
,
int
*
err
)
{
struct
udf_sb_info
*
sbi
=
UDF_SB
(
sb
);
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
;
struct
kernel_lb_addr
eloc
,
uninitialized_var
(
goal_eloc
);
struct
extent_position
epos
,
goal_epos
;
...
...
@@ -700,12 +703,12 @@ inline int udf_prealloc_blocks(struct super_block *sb,
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
,
uint16_t
partition
,
uint32_t
goal
,
int
*
err
)
{
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
)
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)
struct
udf_fileident_bh
fibh
=
{
.
sbh
=
NULL
,
.
ebh
=
NULL
};
struct
fileIdentDesc
*
fi
=
NULL
;
struct
fileIdentDesc
cfi
;
in
t
block
,
iblock
;
udf_pblk_
t
block
,
iblock
;
loff_t
nf_pos
;
int
flen
;
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,
sector_t
*
offset
)
{
struct
fileIdentDesc
*
fi
;
int
i
,
num
,
block
;
int
i
,
num
;
udf_pblk_t
block
;
struct
buffer_head
*
tmp
,
*
bha
[
16
];
struct
udf_inode_info
*
iinfo
=
UDF_I
(
dir
);
...
...
@@ -51,7 +52,7 @@ struct fileIdentDesc *udf_fileident_read(struct inode *dir, loff_t *nf_pos,
}
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
;
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,
memcpy
((
uint8_t
*
)
cfi
,
(
uint8_t
*
)
fi
,
sizeof
(
struct
fileIdentDesc
));
}
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
)
!=
(
EXT_RECORDED_ALLOCATED
>>
30
))
...
...
@@ -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
))
{
udf_debug
(
"0x%x != TAG_IDENT_FID
\n
"
,
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
),
bufsize
);
return
NULL
;
...
...
fs/udf/ialloc.c
浏览文件 @
838bee9e
...
...
@@ -50,7 +50,7 @@ struct inode *udf_new_inode(struct inode *dir, umode_t mode)
struct
super_block
*
sb
=
dir
->
i_sb
;
struct
udf_sb_info
*
sbi
=
UDF_SB
(
sb
);
struct
inode
*
inode
;
in
t
block
;
udf_pblk_
t
block
;
uint32_t
start
=
UDF_I
(
dir
)
->
i_location
.
logicalBlockNum
;
struct
udf_inode_info
*
iinfo
;
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);
static
sector_t
inode_getblk
(
struct
inode
*
,
sector_t
,
int
*
,
int
*
);
static
int8_t
udf_insert_aext
(
struct
inode
*
,
struct
extent_position
,
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
*
);
static
void
udf_prealloc_extents
(
struct
inode
*
,
int
,
int
,
struct
kernel_long_ad
*
,
int
*
);
...
...
@@ -316,10 +316,10 @@ int udf_expand_file_adinicb(struct inode *inode)
return
err
;
}
struct
buffer_head
*
udf_expand_dir_adinicb
(
struct
inode
*
inode
,
int
*
block
,
int
*
err
)
struct
buffer_head
*
udf_expand_dir_adinicb
(
struct
inode
*
inode
,
udf_pblk_t
*
block
,
int
*
err
)
{
in
t
newblock
;
udf_pblk_
t
newblock
;
struct
buffer_head
*
dbh
=
NULL
;
struct
kernel_lb_addr
eloc
;
uint8_t
alloctype
;
...
...
@@ -446,7 +446,7 @@ static int udf_get_block(struct inode *inode, sector_t block,
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
)
{
struct
buffer_head
*
bh
;
...
...
@@ -480,7 +480,7 @@ static int udf_do_extend_file(struct inode *inode,
int
count
=
0
,
fake
=
!
(
last_ext
->
extLength
&
UDF_EXTENT_LENGTH_MASK
);
struct
super_block
*
sb
=
inode
->
i_sb
;
struct
kernel_lb_addr
prealloc_loc
=
{};
in
t
prealloc_len
=
0
;
uint32_
t
prealloc_len
=
0
;
struct
udf_inode_info
*
iinfo
;
int
err
;
...
...
@@ -663,11 +663,11 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
struct
kernel_lb_addr
eloc
,
tmpeloc
;
int
c
=
1
;
loff_t
lbcount
=
0
,
b_off
=
0
;
u
int32
_t
newblocknum
,
newblock
;
u
df_pblk
_t
newblocknum
,
newblock
;
sector_t
offset
=
0
;
int8_t
etype
;
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
;
bool
isBeyondEOF
;
...
...
@@ -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
,
int
newblocknum
,
struct
kernel_long_ad
*
laarr
,
int
*
endnum
)
udf_pblk_t
newblocknum
,
struct
kernel_long_ad
*
laarr
,
int
*
endnum
)
{
unsigned
long
blocksize
=
inode
->
i_sb
->
s_blocksize
;
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
}
}
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
)
{
struct
buffer_head
*
bh
=
NULL
;
...
...
@@ -1193,7 +1193,7 @@ int udf_setsize(struct inode *inode, loff_t newsize)
{
int
err
;
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
)
||
S_ISLNK
(
inode
->
i_mode
)))
...
...
@@ -1278,14 +1278,14 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode)
reread:
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
);
return
-
EIO
;
}
if
(
iloc
->
logicalBlockNum
>=
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
);
return
-
EIO
;
}
...
...
@@ -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
);
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
;
}
if
(
ident
!=
TAG_IDENT_FE
&&
ident
!=
TAG_IDENT_EFE
&&
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
);
goto
out
;
}
...
...
@@ -1346,7 +1346,7 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode)
}
brelse
(
ibh
);
}
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
));
goto
out
;
}
...
...
@@ -1547,7 +1547,7 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode)
udf_debug
(
"METADATA BITMAP FILE-----
\n
"
);
break
;
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
);
goto
out
;
}
...
...
@@ -1852,7 +1852,7 @@ struct inode *__udf_iget(struct super_block *sb, struct kernel_lb_addr *ino,
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
super_block
*
sb
=
inode
->
i_sb
;
...
...
@@ -1994,7 +1994,7 @@ int udf_add_aext(struct inode *inode, struct extent_position *epos,
if
(
epos
->
offset
+
(
2
*
adsize
)
>
sb
->
s_blocksize
)
{
int
err
;
in
t
new_block
;
udf_pblk_
t
new_block
;
new_block
=
udf_new_block
(
sb
,
NULL
,
epos
->
block
.
partitionReferenceNum
,
...
...
@@ -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
))
==
(
EXT_NEXT_EXTENT_ALLOCDECS
>>
30
))
{
in
t
block
;
udf_pblk_
t
block
;
if
(
++
indirections
>
UDF_MAX_INDIR_EXTS
)
{
udf_err
(
inode
->
i_sb
,
...
...
@@ -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
);
epos
->
bh
=
udf_tread
(
inode
->
i_sb
,
block
);
if
(
!
epos
->
bh
)
{
udf_debug
(
"reading block %
d
failed!
\n
"
,
block
);
udf_debug
(
"reading block %
u
failed!
\n
"
,
block
);
return
-
1
;
}
}
...
...
@@ -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
;
break
;
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
;
}
...
...
@@ -2289,13 +2289,13 @@ int8_t inode_bmap(struct inode *inode, sector_t block,
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
;
uint32_t
elen
;
sector_t
offset
;
struct
extent_position
epos
=
{};
in
t
ret
;
udf_pblk_
t
ret
;
down_read
(
&
UDF_I
(
inode
)
->
i_data_sem
);
...
...
fs/udf/misc.c
浏览文件 @
838bee9e
...
...
@@ -28,7 +28,7 @@
#include "udf_i.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
))
return
sb_getblk
(
sb
,
udf_fixed_to_variable
(
block
));
...
...
@@ -36,7 +36,7 @@ struct buffer_head *udf_tgetblk(struct super_block *sb, int 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
))
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,
bh
=
udf_tread
(
sb
,
block
);
if
(
!
bh
)
{
udf_err
(
sb
,
"read failed, block=%u, location=%
d
\n
"
,
udf_err
(
sb
,
"read failed, block=%u, location=%
u
\n
"
,
block
,
location
);
return
NULL
;
}
...
...
@@ -247,7 +247,7 @@ struct buffer_head *udf_read_tagged(struct super_block *sb, uint32_t block,
le16_to_cpu
(
tag_p
->
descCRCLength
)))
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
->
descCRCLength
));
error_out:
...
...
fs/udf/namei.c
浏览文件 @
838bee9e
...
...
@@ -164,7 +164,8 @@ static struct fileIdentDesc *udf_find_entry(struct inode *dir,
{
struct
fileIdentDesc
*
fi
=
NULL
;
loff_t
f_pos
;
int
block
,
flen
;
udf_pblk_t
block
;
int
flen
;
unsigned
char
*
fname
=
NULL
,
*
copy_name
=
NULL
;
unsigned
char
*
nameptr
;
uint8_t
lfi
;
...
...
@@ -352,7 +353,7 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir,
int
nfidlen
;
uint8_t
lfi
;
uint16_t
liu
;
in
t
block
;
udf_pblk_
t
block
;
struct
kernel_lb_addr
eloc
;
uint32_t
elen
=
0
;
sector_t
offset
;
...
...
@@ -749,7 +750,7 @@ static int empty_dir(struct inode *dir)
struct
udf_fileident_bh
fibh
;
loff_t
f_pos
;
loff_t
size
=
udf_ext0_offset
(
dir
)
+
dir
->
i_size
;
in
t
block
;
udf_pblk_
t
block
;
struct
kernel_lb_addr
eloc
;
uint32_t
elen
;
sector_t
offset
;
...
...
@@ -839,7 +840,7 @@ static int udf_rmdir(struct inode *dir, struct dentry *dentry)
if
(
retval
)
goto
end_rmdir
;
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
);
clear_nlink
(
inode
);
inode
->
i_size
=
0
;
...
...
@@ -881,7 +882,7 @@ static int udf_unlink(struct inode *dir, struct dentry *dentry)
goto
end_unlink
;
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
);
set_nlink
(
inode
,
1
);
}
...
...
@@ -913,7 +914,7 @@ static int udf_symlink(struct inode *dir, struct dentry *dentry,
int
eoffset
,
elen
=
0
;
uint8_t
*
ea
;
int
err
;
in
t
block
;
udf_pblk_
t
block
;
unsigned
char
*
name
=
NULL
;
int
namelen
;
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,
struct
udf_sb_info
*
sbi
=
UDF_SB
(
sb
);
struct
udf_part_map
*
map
;
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
);
return
0xFFFFFFFF
;
}
...
...
@@ -59,7 +59,7 @@ uint32_t udf_get_pblock_virt15(struct super_block *sb, uint32_t block,
vdata
=
&
map
->
s_type_specific
.
s_virtual
;
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
);
return
0xFFFFFFFF
;
}
...
...
@@ -83,7 +83,7 @@ uint32_t udf_get_pblock_virt15(struct super_block *sb, uint32_t block,
bh
=
sb_bread
(
sb
,
loc
);
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
);
return
0xFFFFFFFF
;
}
...
...
fs/udf/super.c
浏览文件 @
838bee9e
...
...
@@ -366,7 +366,7 @@ static int udf_show_options(struct seq_file *seq, struct dentry *root)
if
(
sbi
->
s_dmode
!=
UDF_INVALID_MODE
)
seq_printf
(
seq
,
",dmode=%ho"
,
sbi
->
s_dmode
);
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
))
seq_printf
(
seq
,
",lastblock=%u"
,
sbi
->
s_last_block
);
if
(
sbi
->
s_anchor
!=
0
)
...
...
@@ -703,9 +703,9 @@ static loff_t udf_check_vsd(struct super_block *sb)
else
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
),
sb
->
s_blocksize
);
/* Process the sequence (if applicable). The hard limit on the sector
...
...
@@ -868,7 +868,7 @@ static int udf_find_fileset(struct super_block *sb,
if
((
fileset
->
logicalBlockNum
!=
0xFFFFFFFF
||
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
->
partitionReferenceNum
);
...
...
@@ -981,14 +981,14 @@ static int udf_load_metadata_files(struct super_block *sb, int partition,
mdata
->
s_phys_partition_ref
=
type1_index
;
/* 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
);
fe
=
udf_find_metadata_inode_efe
(
sb
,
mdata
->
s_meta_file_loc
,
mdata
->
s_phys_partition_ref
);
if
(
IS_ERR
(
fe
))
{
/* 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
);
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,
addr
.
logicalBlockNum
=
mdata
->
s_bitmap_file_loc
;
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
);
fe
=
udf_iget_special
(
sb
,
&
addr
);
...
...
@@ -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_debug
(
"Rootdir at block=%
d, partition=%d
\n
"
,
udf_debug
(
"Rootdir at block=%
u, partition=%u
\n
"
,
root
->
logicalBlockNum
,
root
->
partitionReferenceNum
);
}
...
...
@@ -1097,7 +1097,7 @@ static int udf_fill_partdesc_info(struct super_block *sb,
if
(
p
->
accessType
==
cpu_to_le32
(
PD_ACCESS_TYPE_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
,
map
->
s_partition_root
,
map
->
s_partition_len
);
...
...
@@ -1122,7 +1122,7 @@ static int udf_fill_partdesc_info(struct super_block *sb,
}
map
->
s_uspace
.
s_table
=
inode
;
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
);
}
...
...
@@ -1134,7 +1134,7 @@ static int udf_fill_partdesc_info(struct super_block *sb,
bitmap
->
s_extPosition
=
le32_to_cpu
(
phd
->
unallocSpaceBitmap
.
extPosition
);
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
);
}
...
...
@@ -1157,7 +1157,7 @@ static int udf_fill_partdesc_info(struct super_block *sb,
}
map
->
s_fspace
.
s_table
=
inode
;
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
);
}
...
...
@@ -1169,7 +1169,7 @@ static int udf_fill_partdesc_info(struct super_block *sb,
bitmap
->
s_extPosition
=
le32_to_cpu
(
phd
->
freedSpaceBitmap
.
extPosition
);
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
);
}
return
0
;
...
...
@@ -1282,7 +1282,7 @@ static int udf_load_partdesc(struct super_block *sb, sector_t block)
/* First scan for TYPE1 and SPARABLE partitions */
for
(
i
=
0
;
i
<
sbi
->
s_partitions
;
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
);
if
(
map
->
s_partition_num
==
partitionNumber
&&
(
map
->
s_partition_type
==
UDF_TYPE1_MAP15
||
...
...
@@ -1291,7 +1291,7 @@ static int udf_load_partdesc(struct super_block *sb, sector_t block)
}
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
);
ret
=
0
;
goto
out_bh
;
...
...
@@ -1483,7 +1483,7 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block,
struct
metadataPartitionMap
*
mdm
=
(
struct
metadataPartitionMap
*
)
&
(
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
);
map
->
s_partition_type
=
UDF_METADATA_MAP25
;
...
...
@@ -1505,17 +1505,17 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block,
udf_debug
(
"Metadata Ident suffix=0x%x
\n
"
,
le16_to_cpu
(
*
(
__le16
*
)
mdm
->
partIdent
.
identSuffix
));
udf_debug
(
"Metadata part num=%
d
\n
"
,
udf_debug
(
"Metadata part num=%
u
\n
"
,
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
));
udf_debug
(
"Metadata file loc=%
d
\n
"
,
udf_debug
(
"Metadata file loc=%
u
\n
"
,
le32_to_cpu
(
mdm
->
metadataFileLoc
));
udf_debug
(
"Mirror file loc=%
d
\n
"
,
udf_debug
(
"Mirror file loc=%
u
\n
"
,
le32_to_cpu
(
mdm
->
metadataMirrorFileLoc
));
udf_debug
(
"Bitmap file loc=%
d
\n
"
,
udf_debug
(
"Bitmap file loc=%
u
\n
"
,
le32_to_cpu
(
mdm
->
metadataBitmapFileLoc
));
udf_debug
(
"Flags: %d %
d
\n
"
,
udf_debug
(
"Flags: %d %
u
\n
"
,
mdata
->
s_flags
,
mdm
->
flags
);
}
else
{
udf_debug
(
"Unknown ident: %s
\n
"
,
...
...
@@ -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_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
);
}
...
...
@@ -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
]);
*
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
->
partitionReferenceNum
);
}
...
...
@@ -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
);
if
(
ret
<
0
)
{
if
(
!
silent
&&
ret
!=
-
EACCES
)
{
pr_notice
(
"Scanning with blocksize %
d
failed
\n
"
,
pr_notice
(
"Scanning with blocksize %
u
failed
\n
"
,
uopt
.
blocksize
);
}
brelse
(
sbi
->
s_lvid_bh
);
...
...
@@ -2184,7 +2184,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
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
)
{
struct
logicalVolIntegrityDescImpUse
*
lvidiu
=
...
...
@@ -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 ... */
inode
=
udf_iget
(
sb
,
&
rootdir
);
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
);
ret
=
PTR_ERR
(
inode
);
goto
error_out
;
...
...
@@ -2389,7 +2389,7 @@ static unsigned int udf_count_free_bitmap(struct super_block *sb,
struct
buffer_head
*
bh
=
NULL
;
unsigned
int
accum
=
0
;
int
index
;
in
t
block
=
0
,
newblock
;
udf_pblk_
t
block
=
0
,
newblock
;
struct
kernel_lb_addr
loc
;
uint32_t
bytes
;
uint8_t
*
ptr
;
...
...
fs/udf/truncate.c
浏览文件 @
838bee9e
...
...
@@ -48,7 +48,7 @@ static void extent_trunc(struct inode *inode, struct extent_position *epos,
if
(
elen
!=
nelen
)
{
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
))
mark_inode_dirty
(
inode
);
...
...
fs/udf/udfdecl.h
浏览文件 @
838bee9e
...
...
@@ -73,6 +73,8 @@ static inline size_t udf_ext0_offset(struct inode *inode)
/* computes tag checksum */
u8
udf_tag_checksum
(
const
struct
tag
*
t
);
typedef
uint32_t
udf_pblk_t
;
struct
dentry
;
struct
inode
;
struct
task_struct
;
...
...
@@ -144,15 +146,17 @@ static inline struct inode *udf_iget(struct super_block *sb,
return
__udf_iget
(
sb
,
ino
,
false
);
}
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_bread
(
struct
inode
*
,
int
,
int
,
int
*
);
extern
struct
buffer_head
*
udf_expand_dir_adinicb
(
struct
inode
*
inode
,
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
void
udf_evict_inode
(
struct
inode
*
);
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
*
,
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
);
extern
int
__udf_add_aext
(
struct
inode
*
inode
,
struct
extent_position
*
epos
,
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 *,
struct
kernel_lb_addr
*
,
uint32_t
*
,
int
);
/* misc.c */
extern
struct
buffer_head
*
udf_tgetblk
(
struct
super_block
*
,
int
);
extern
struct
buffer_head
*
udf_tread
(
struct
super_block
*
,
int
);
extern
struct
buffer_head
*
udf_tgetblk
(
struct
super_block
*
sb
,
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
,
uint32_t
,
uint8_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 *,
struct
kernel_lb_addr
*
,
uint32_t
,
uint32_t
);
extern
int
udf_prealloc_blocks
(
struct
super_block
*
,
struct
inode
*
,
uint16_t
,
uint32_t
,
uint32_t
);
extern
int
udf_new_block
(
struct
super_block
*
,
struct
inode
*
,
uint16_t
,
uint32_t
,
int
*
);
extern
udf_pblk_t
udf_new_block
(
struct
super_block
*
sb
,
struct
inode
*
inode
,
uint16_t
partition
,
uint32_t
goal
,
int
*
err
);
/* directory.c */
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,
cmp_id
=
ocu
[
0
];
if
(
cmp_id
!=
8
&&
cmp_id
!=
16
)
{
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
;
}
u_ch
=
cmp_id
>>
3
;
...
...
include/linux/audit.h
浏览文件 @
838bee9e
...
...
@@ -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_mmap_fd
(
int
fd
,
int
flags
);
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
)
{
...
...
@@ -452,6 +453,12 @@ static inline void audit_log_kern_module(char *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_signals
;
#else
/* CONFIG_AUDITSYSCALL */
...
...
@@ -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
)
{
}
#define audit_n_rules 0
...
...
include/linux/fsnotify_backend.h
浏览文件 @
838bee9e
...
...
@@ -190,6 +190,7 @@ struct fsnotify_group {
int
f_flags
;
unsigned
int
max_marks
;
struct
user_struct
*
user
;
bool
audit
;
}
fanotify_data
;
#endif
/* CONFIG_FANOTIFY */
};
...
...
include/uapi/linux/audit.h
浏览文件 @
838bee9e
...
...
@@ -112,6 +112,7 @@
#define AUDIT_FEATURE_CHANGE 1328
/* audit log listing feature changes */
#define AUDIT_REPLACE 1329
/* Replace auditd if this packet unanswerd */
#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_SELINUX_ERR 1401
/* Internal SE Linux Errors */
...
...
include/uapi/linux/fanotify.h
浏览文件 @
838bee9e
...
...
@@ -35,6 +35,7 @@
#define FAN_UNLIMITED_QUEUE 0x00000010
#define FAN_UNLIMITED_MARKS 0x00000020
#define FAN_ENABLE_AUDIT 0x00000040
#define FAN_ALL_INIT_FLAGS (FAN_CLOEXEC | FAN_NONBLOCK | \
FAN_ALL_CLASS_BITS | FAN_UNLIMITED_QUEUE |\
...
...
@@ -99,6 +100,8 @@ struct fanotify_response {
/* Legit userspace responses to a _PERM event */
#define FAN_ALLOW 0x01
#define FAN_DENY 0x02
#define FAN_AUDIT 0x10
/* Bit mask to create audit record for result */
/* No fd set in event */
#define FAN_NOFD -1
...
...
include/uapi/linux/iso_fs.h
浏览文件 @
838bee9e
...
...
@@ -12,10 +12,10 @@
#define ISODCL(from, to) (to - from + 1)
struct
iso_volume_descriptor
{
char
type
[
ISODCL
(
1
,
1
)];
/* 711 */
__u8
type
[
ISODCL
(
1
,
1
)];
/* 711 */
char
id
[
ISODCL
(
2
,
6
)];
char
version
[
ISODCL
(
7
,
7
)];
char
data
[
ISODCL
(
8
,
2048
)];
__u8
version
[
ISODCL
(
7
,
7
)];
__u8
data
[
ISODCL
(
8
,
2048
)];
};
/* volume descriptor types */
...
...
@@ -26,24 +26,24 @@ struct iso_volume_descriptor {
#define ISO_STANDARD_ID "CD001"
struct
iso_primary_descriptor
{
char
type
[
ISODCL
(
1
,
1
)];
/* 711 */
__u8
type
[
ISODCL
(
1
,
1
)];
/* 711 */
char
id
[
ISODCL
(
2
,
6
)];
char
version
[
ISODCL
(
7
,
7
)];
/* 711 */
char
unused1
[
ISODCL
(
8
,
8
)];
__u8
version
[
ISODCL
(
7
,
7
)];
/* 711 */
__u8
unused1
[
ISODCL
(
8
,
8
)];
char
system_id
[
ISODCL
(
9
,
40
)];
/* achars */
char
volume_id
[
ISODCL
(
41
,
72
)];
/* dchars */
char
unused2
[
ISODCL
(
73
,
80
)];
char
volume_space_size
[
ISODCL
(
81
,
88
)];
/* 733 */
char
unused3
[
ISODCL
(
89
,
120
)];
char
volume_set_size
[
ISODCL
(
121
,
124
)];
/* 723 */
char
volume_sequence_number
[
ISODCL
(
125
,
128
)];
/* 723 */
char
logical_block_size
[
ISODCL
(
129
,
132
)];
/* 723 */
char
path_table_size
[
ISODCL
(
133
,
140
)];
/* 733 */
char
type_l_path_table
[
ISODCL
(
141
,
144
)];
/* 731 */
char
opt_type_l_path_table
[
ISODCL
(
145
,
148
)];
/* 731 */
char
type_m_path_table
[
ISODCL
(
149
,
152
)];
/* 732 */
char
opt_type_m_path_table
[
ISODCL
(
153
,
156
)];
/* 732 */
char
root_directory_record
[
ISODCL
(
157
,
190
)];
/* 9.1 */
__u8
unused2
[
ISODCL
(
73
,
80
)];
__u8
volume_space_size
[
ISODCL
(
81
,
88
)];
/* 733 */
__u8
unused3
[
ISODCL
(
89
,
120
)];
__u8
volume_set_size
[
ISODCL
(
121
,
124
)];
/* 723 */
__u8
volume_sequence_number
[
ISODCL
(
125
,
128
)];
/* 723 */
__u8
logical_block_size
[
ISODCL
(
129
,
132
)];
/* 723 */
__u8
path_table_size
[
ISODCL
(
133
,
140
)];
/* 733 */
__u8
type_l_path_table
[
ISODCL
(
141
,
144
)];
/* 731 */
__u8
opt_type_l_path_table
[
ISODCL
(
145
,
148
)];
/* 731 */
__u8
type_m_path_table
[
ISODCL
(
149
,
152
)];
/* 732 */
__u8
opt_type_m_path_table
[
ISODCL
(
153
,
156
)];
/* 732 */
__u8
root_directory_record
[
ISODCL
(
157
,
190
)];
/* 9.1 */
char
volume_set_id
[
ISODCL
(
191
,
318
)];
/* dchars */
char
publisher_id
[
ISODCL
(
319
,
446
)];
/* achars */
char
preparer_id
[
ISODCL
(
447
,
574
)];
/* achars */
...
...
@@ -51,36 +51,36 @@ struct iso_primary_descriptor {
char
copyright_file_id
[
ISODCL
(
703
,
739
)];
/* 7.5 dchars */
char
abstract_file_id
[
ISODCL
(
740
,
776
)];
/* 7.5 dchars */
char
bibliographic_file_id
[
ISODCL
(
777
,
813
)];
/* 7.5 dchars */
char
creation_date
[
ISODCL
(
814
,
830
)];
/* 8.4.26.1 */
char
modification_date
[
ISODCL
(
831
,
847
)];
/* 8.4.26.1 */
char
expiration_date
[
ISODCL
(
848
,
864
)];
/* 8.4.26.1 */
char
effective_date
[
ISODCL
(
865
,
881
)];
/* 8.4.26.1 */
char
file_structure_version
[
ISODCL
(
882
,
882
)];
/* 711 */
char
unused4
[
ISODCL
(
883
,
883
)];
char
application_data
[
ISODCL
(
884
,
1395
)];
char
unused5
[
ISODCL
(
1396
,
2048
)];
__u8
creation_date
[
ISODCL
(
814
,
830
)];
/* 8.4.26.1 */
__u8
modification_date
[
ISODCL
(
831
,
847
)];
/* 8.4.26.1 */
__u8
expiration_date
[
ISODCL
(
848
,
864
)];
/* 8.4.26.1 */
__u8
effective_date
[
ISODCL
(
865
,
881
)];
/* 8.4.26.1 */
__u8
file_structure_version
[
ISODCL
(
882
,
882
)];
/* 711 */
__u8
unused4
[
ISODCL
(
883
,
883
)];
__u8
application_data
[
ISODCL
(
884
,
1395
)];
__u8
unused5
[
ISODCL
(
1396
,
2048
)];
};
/* Almost the same as the primary descriptor but two fields are specified */
struct
iso_supplementary_descriptor
{
char
type
[
ISODCL
(
1
,
1
)];
/* 711 */
__u8
type
[
ISODCL
(
1
,
1
)];
/* 711 */
char
id
[
ISODCL
(
2
,
6
)];
char
version
[
ISODCL
(
7
,
7
)];
/* 711 */
char
flags
[
ISODCL
(
8
,
8
)];
/* 853 */
__u8
version
[
ISODCL
(
7
,
7
)];
/* 711 */
__u8
flags
[
ISODCL
(
8
,
8
)];
/* 853 */
char
system_id
[
ISODCL
(
9
,
40
)];
/* achars */
char
volume_id
[
ISODCL
(
41
,
72
)];
/* dchars */
char
unused2
[
ISODCL
(
73
,
80
)];
char
volume_space_size
[
ISODCL
(
81
,
88
)];
/* 733 */
char
escape
[
ISODCL
(
89
,
120
)];
/* 856 */
char
volume_set_size
[
ISODCL
(
121
,
124
)];
/* 723 */
char
volume_sequence_number
[
ISODCL
(
125
,
128
)];
/* 723 */
char
logical_block_size
[
ISODCL
(
129
,
132
)];
/* 723 */
char
path_table_size
[
ISODCL
(
133
,
140
)];
/* 733 */
char
type_l_path_table
[
ISODCL
(
141
,
144
)];
/* 731 */
char
opt_type_l_path_table
[
ISODCL
(
145
,
148
)];
/* 731 */
char
type_m_path_table
[
ISODCL
(
149
,
152
)];
/* 732 */
char
opt_type_m_path_table
[
ISODCL
(
153
,
156
)];
/* 732 */
char
root_directory_record
[
ISODCL
(
157
,
190
)];
/* 9.1 */
__u8
unused2
[
ISODCL
(
73
,
80
)];
__u8
volume_space_size
[
ISODCL
(
81
,
88
)];
/* 733 */
__u8
escape
[
ISODCL
(
89
,
120
)];
/* 856 */
__u8
volume_set_size
[
ISODCL
(
121
,
124
)];
/* 723 */
__u8
volume_sequence_number
[
ISODCL
(
125
,
128
)];
/* 723 */
__u8
logical_block_size
[
ISODCL
(
129
,
132
)];
/* 723 */
__u8
path_table_size
[
ISODCL
(
133
,
140
)];
/* 733 */
__u8
type_l_path_table
[
ISODCL
(
141
,
144
)];
/* 731 */
__u8
opt_type_l_path_table
[
ISODCL
(
145
,
148
)];
/* 731 */
__u8
type_m_path_table
[
ISODCL
(
149
,
152
)];
/* 732 */
__u8
opt_type_m_path_table
[
ISODCL
(
153
,
156
)];
/* 732 */
__u8
root_directory_record
[
ISODCL
(
157
,
190
)];
/* 9.1 */
char
volume_set_id
[
ISODCL
(
191
,
318
)];
/* dchars */
char
publisher_id
[
ISODCL
(
319
,
446
)];
/* achars */
char
preparer_id
[
ISODCL
(
447
,
574
)];
/* achars */
...
...
@@ -88,54 +88,54 @@ struct iso_supplementary_descriptor {
char
copyright_file_id
[
ISODCL
(
703
,
739
)];
/* 7.5 dchars */
char
abstract_file_id
[
ISODCL
(
740
,
776
)];
/* 7.5 dchars */
char
bibliographic_file_id
[
ISODCL
(
777
,
813
)];
/* 7.5 dchars */
char
creation_date
[
ISODCL
(
814
,
830
)];
/* 8.4.26.1 */
char
modification_date
[
ISODCL
(
831
,
847
)];
/* 8.4.26.1 */
char
expiration_date
[
ISODCL
(
848
,
864
)];
/* 8.4.26.1 */
char
effective_date
[
ISODCL
(
865
,
881
)];
/* 8.4.26.1 */
char
file_structure_version
[
ISODCL
(
882
,
882
)];
/* 711 */
char
unused4
[
ISODCL
(
883
,
883
)];
char
application_data
[
ISODCL
(
884
,
1395
)];
char
unused5
[
ISODCL
(
1396
,
2048
)];
__u8
creation_date
[
ISODCL
(
814
,
830
)];
/* 8.4.26.1 */
__u8
modification_date
[
ISODCL
(
831
,
847
)];
/* 8.4.26.1 */
__u8
expiration_date
[
ISODCL
(
848
,
864
)];
/* 8.4.26.1 */
__u8
effective_date
[
ISODCL
(
865
,
881
)];
/* 8.4.26.1 */
__u8
file_structure_version
[
ISODCL
(
882
,
882
)];
/* 711 */
__u8
unused4
[
ISODCL
(
883
,
883
)];
__u8
application_data
[
ISODCL
(
884
,
1395
)];
__u8
unused5
[
ISODCL
(
1396
,
2048
)];
};
#define HS_STANDARD_ID "CDROM"
struct
hs_volume_descriptor
{
char
foo
[
ISODCL
(
1
,
8
)];
/* 733 */
char
type
[
ISODCL
(
9
,
9
)];
/* 711 */
__u8
foo
[
ISODCL
(
1
,
8
)];
/* 733 */
__u8
type
[
ISODCL
(
9
,
9
)];
/* 711 */
char
id
[
ISODCL
(
10
,
14
)];
char
version
[
ISODCL
(
15
,
15
)];
/* 711 */
char
data
[
ISODCL
(
16
,
2048
)];
__u8
version
[
ISODCL
(
15
,
15
)];
/* 711 */
__u8
data
[
ISODCL
(
16
,
2048
)];
};
struct
hs_primary_descriptor
{
char
foo
[
ISODCL
(
1
,
8
)];
/* 733 */
char
type
[
ISODCL
(
9
,
9
)];
/* 711 */
char
id
[
ISODCL
(
10
,
14
)];
char
version
[
ISODCL
(
15
,
15
)];
/* 711 */
char
unused1
[
ISODCL
(
16
,
16
)];
/* 711 */
__u8
foo
[
ISODCL
(
1
,
8
)];
/* 733 */
__u8
type
[
ISODCL
(
9
,
9
)];
/* 711 */
__u8
id
[
ISODCL
(
10
,
14
)];
__u8
version
[
ISODCL
(
15
,
15
)];
/* 711 */
__u8
unused1
[
ISODCL
(
16
,
16
)];
/* 711 */
char
system_id
[
ISODCL
(
17
,
48
)];
/* achars */
char
volume_id
[
ISODCL
(
49
,
80
)];
/* dchars */
char
unused2
[
ISODCL
(
81
,
88
)];
/* 733 */
char
volume_space_size
[
ISODCL
(
89
,
96
)];
/* 733 */
char
unused3
[
ISODCL
(
97
,
128
)];
/* 733 */
char
volume_set_size
[
ISODCL
(
129
,
132
)];
/* 723 */
char
volume_sequence_number
[
ISODCL
(
133
,
136
)];
/* 723 */
char
logical_block_size
[
ISODCL
(
137
,
140
)];
/* 723 */
char
path_table_size
[
ISODCL
(
141
,
148
)];
/* 733 */
char
type_l_path_table
[
ISODCL
(
149
,
152
)];
/* 731 */
char
unused4
[
ISODCL
(
153
,
180
)];
/* 733 */
char
root_directory_record
[
ISODCL
(
181
,
214
)];
/* 9.1 */
__u8
unused2
[
ISODCL
(
81
,
88
)];
/* 733 */
__u8
volume_space_size
[
ISODCL
(
89
,
96
)];
/* 733 */
__u8
unused3
[
ISODCL
(
97
,
128
)];
/* 733 */
__u8
volume_set_size
[
ISODCL
(
129
,
132
)];
/* 723 */
__u8
volume_sequence_number
[
ISODCL
(
133
,
136
)];
/* 723 */
__u8
logical_block_size
[
ISODCL
(
137
,
140
)];
/* 723 */
__u8
path_table_size
[
ISODCL
(
141
,
148
)];
/* 733 */
__u8
type_l_path_table
[
ISODCL
(
149
,
152
)];
/* 731 */
__u8
unused4
[
ISODCL
(
153
,
180
)];
/* 733 */
__u8
root_directory_record
[
ISODCL
(
181
,
214
)];
/* 9.1 */
};
/* We use this to help us look up the parent inode numbers. */
struct
iso_path_table
{
unsigned
char
name_len
[
2
];
/* 721 */
char
extent
[
4
];
/* 731 */
char
parent
[
2
];
/* 721 */
__u8
name_len
[
2
];
/* 721 */
__u8
extent
[
4
];
/* 731 */
__u8
parent
[
2
];
/* 721 */
char
name
[
0
];
}
__attribute__
((
packed
));
...
...
@@ -143,16 +143,16 @@ struct iso_path_table{
there is an extra reserved byte after the flags */
struct
iso_directory_record
{
char
length
[
ISODCL
(
1
,
1
)];
/* 711 */
char
ext_attr_length
[
ISODCL
(
2
,
2
)];
/* 711 */
char
extent
[
ISODCL
(
3
,
10
)];
/* 733 */
char
size
[
ISODCL
(
11
,
18
)];
/* 733 */
char
date
[
ISODCL
(
19
,
25
)];
/* 7 by 711 */
char
flags
[
ISODCL
(
26
,
26
)];
char
file_unit_size
[
ISODCL
(
27
,
27
)];
/* 711 */
char
interleave
[
ISODCL
(
28
,
28
)];
/* 711 */
char
volume_sequence_number
[
ISODCL
(
29
,
32
)];
/* 723 */
unsigned
char
name_len
[
ISODCL
(
33
,
33
)];
/* 711 */
__u8
length
[
ISODCL
(
1
,
1
)];
/* 711 */
__u8
ext_attr_length
[
ISODCL
(
2
,
2
)];
/* 711 */
__u8
extent
[
ISODCL
(
3
,
10
)];
/* 733 */
__u8
size
[
ISODCL
(
11
,
18
)];
/* 733 */
__u8
date
[
ISODCL
(
19
,
25
)];
/* 7 by 711 */
__u8
flags
[
ISODCL
(
26
,
26
)];
__u8
file_unit_size
[
ISODCL
(
27
,
27
)];
/* 711 */
__u8
interleave
[
ISODCL
(
28
,
28
)];
/* 711 */
__u8
volume_sequence_number
[
ISODCL
(
29
,
32
)];
/* 723 */
__u8
name_len
[
ISODCL
(
33
,
33
)];
/* 711 */
char
name
[
0
];
}
__attribute__
((
packed
));
...
...
kernel/auditsc.c
浏览文件 @
838bee9e
...
...
@@ -2390,6 +2390,12 @@ void __audit_log_kern_module(char *name)
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
)
{
kuid_t
auid
,
uid
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录