Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
eb315d2a
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
eb315d2a
编写于
6月 08, 2017
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ufs: restore maintaining ->i_blocks
Cc: stable@vger.kernel.org Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
414cf718
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
26 addition
and
1 deletion
+26
-1
fs/stat.c
fs/stat.c
+1
-0
fs/ufs/balloc.c
fs/ufs/balloc.c
+25
-1
未找到文件。
fs/stat.c
浏览文件 @
eb315d2a
...
@@ -672,6 +672,7 @@ void __inode_add_bytes(struct inode *inode, loff_t bytes)
...
@@ -672,6 +672,7 @@ void __inode_add_bytes(struct inode *inode, loff_t bytes)
inode
->
i_bytes
-=
512
;
inode
->
i_bytes
-=
512
;
}
}
}
}
EXPORT_SYMBOL
(
__inode_add_bytes
);
void
inode_add_bytes
(
struct
inode
*
inode
,
loff_t
bytes
)
void
inode_add_bytes
(
struct
inode
*
inode
,
loff_t
bytes
)
{
{
...
...
fs/ufs/balloc.c
浏览文件 @
eb315d2a
...
@@ -82,7 +82,8 @@ void ufs_free_fragments(struct inode *inode, u64 fragment, unsigned count)
...
@@ -82,7 +82,8 @@ void ufs_free_fragments(struct inode *inode, u64 fragment, unsigned count)
ufs_error
(
sb
,
"ufs_free_fragments"
,
ufs_error
(
sb
,
"ufs_free_fragments"
,
"bit already cleared for fragment %u"
,
i
);
"bit already cleared for fragment %u"
,
i
);
}
}
inode_sub_bytes
(
inode
,
count
<<
uspi
->
s_fshift
);
fs32_add
(
sb
,
&
ucg
->
cg_cs
.
cs_nffree
,
count
);
fs32_add
(
sb
,
&
ucg
->
cg_cs
.
cs_nffree
,
count
);
uspi
->
cs_total
.
cs_nffree
+=
count
;
uspi
->
cs_total
.
cs_nffree
+=
count
;
fs32_add
(
sb
,
&
UFS_SB
(
sb
)
->
fs_cs
(
cgno
).
cs_nffree
,
count
);
fs32_add
(
sb
,
&
UFS_SB
(
sb
)
->
fs_cs
(
cgno
).
cs_nffree
,
count
);
...
@@ -184,6 +185,7 @@ void ufs_free_blocks(struct inode *inode, u64 fragment, unsigned count)
...
@@ -184,6 +185,7 @@ void ufs_free_blocks(struct inode *inode, u64 fragment, unsigned count)
ufs_error
(
sb
,
"ufs_free_blocks"
,
"freeing free fragment"
);
ufs_error
(
sb
,
"ufs_free_blocks"
,
"freeing free fragment"
);
}
}
ubh_setblock
(
UCPI_UBH
(
ucpi
),
ucpi
->
c_freeoff
,
blkno
);
ubh_setblock
(
UCPI_UBH
(
ucpi
),
ucpi
->
c_freeoff
,
blkno
);
inode_sub_bytes
(
inode
,
uspi
->
s_fpb
<<
uspi
->
s_fshift
);
if
((
UFS_SB
(
sb
)
->
s_flags
&
UFS_CG_MASK
)
==
UFS_CG_44BSD
)
if
((
UFS_SB
(
sb
)
->
s_flags
&
UFS_CG_MASK
)
==
UFS_CG_44BSD
)
ufs_clusteracct
(
sb
,
ucpi
,
blkno
,
1
);
ufs_clusteracct
(
sb
,
ucpi
,
blkno
,
1
);
...
@@ -494,6 +496,20 @@ u64 ufs_new_fragments(struct inode *inode, void *p, u64 fragment,
...
@@ -494,6 +496,20 @@ u64 ufs_new_fragments(struct inode *inode, void *p, u64 fragment,
return
0
;
return
0
;
}
}
static
bool
try_add_frags
(
struct
inode
*
inode
,
unsigned
frags
)
{
unsigned
size
=
frags
*
i_blocksize
(
inode
);
spin_lock
(
&
inode
->
i_lock
);
__inode_add_bytes
(
inode
,
size
);
if
(
unlikely
((
u32
)
inode
->
i_blocks
!=
inode
->
i_blocks
))
{
__inode_sub_bytes
(
inode
,
size
);
spin_unlock
(
&
inode
->
i_lock
);
return
false
;
}
spin_unlock
(
&
inode
->
i_lock
);
return
true
;
}
static
u64
ufs_add_fragments
(
struct
inode
*
inode
,
u64
fragment
,
static
u64
ufs_add_fragments
(
struct
inode
*
inode
,
u64
fragment
,
unsigned
oldcount
,
unsigned
newcount
)
unsigned
oldcount
,
unsigned
newcount
)
{
{
...
@@ -530,6 +546,9 @@ static u64 ufs_add_fragments(struct inode *inode, u64 fragment,
...
@@ -530,6 +546,9 @@ static u64 ufs_add_fragments(struct inode *inode, u64 fragment,
for
(
i
=
oldcount
;
i
<
newcount
;
i
++
)
for
(
i
=
oldcount
;
i
<
newcount
;
i
++
)
if
(
ubh_isclr
(
UCPI_UBH
(
ucpi
),
ucpi
->
c_freeoff
,
fragno
+
i
))
if
(
ubh_isclr
(
UCPI_UBH
(
ucpi
),
ucpi
->
c_freeoff
,
fragno
+
i
))
return
0
;
return
0
;
if
(
!
try_add_frags
(
inode
,
count
))
return
0
;
/*
/*
* Block can be extended
* Block can be extended
*/
*/
...
@@ -647,6 +666,7 @@ static u64 ufs_alloc_fragments(struct inode *inode, unsigned cgno,
...
@@ -647,6 +666,7 @@ static u64 ufs_alloc_fragments(struct inode *inode, unsigned cgno,
ubh_setbit
(
UCPI_UBH
(
ucpi
),
ucpi
->
c_freeoff
,
goal
+
i
);
ubh_setbit
(
UCPI_UBH
(
ucpi
),
ucpi
->
c_freeoff
,
goal
+
i
);
i
=
uspi
->
s_fpb
-
count
;
i
=
uspi
->
s_fpb
-
count
;
inode_sub_bytes
(
inode
,
i
<<
uspi
->
s_fshift
);
fs32_add
(
sb
,
&
ucg
->
cg_cs
.
cs_nffree
,
i
);
fs32_add
(
sb
,
&
ucg
->
cg_cs
.
cs_nffree
,
i
);
uspi
->
cs_total
.
cs_nffree
+=
i
;
uspi
->
cs_total
.
cs_nffree
+=
i
;
fs32_add
(
sb
,
&
UFS_SB
(
sb
)
->
fs_cs
(
cgno
).
cs_nffree
,
i
);
fs32_add
(
sb
,
&
UFS_SB
(
sb
)
->
fs_cs
(
cgno
).
cs_nffree
,
i
);
...
@@ -657,6 +677,8 @@ static u64 ufs_alloc_fragments(struct inode *inode, unsigned cgno,
...
@@ -657,6 +677,8 @@ static u64 ufs_alloc_fragments(struct inode *inode, unsigned cgno,
result
=
ufs_bitmap_search
(
sb
,
ucpi
,
goal
,
allocsize
);
result
=
ufs_bitmap_search
(
sb
,
ucpi
,
goal
,
allocsize
);
if
(
result
==
INVBLOCK
)
if
(
result
==
INVBLOCK
)
return
0
;
return
0
;
if
(
!
try_add_frags
(
inode
,
count
))
return
0
;
for
(
i
=
0
;
i
<
count
;
i
++
)
for
(
i
=
0
;
i
<
count
;
i
++
)
ubh_clrbit
(
UCPI_UBH
(
ucpi
),
ucpi
->
c_freeoff
,
result
+
i
);
ubh_clrbit
(
UCPI_UBH
(
ucpi
),
ucpi
->
c_freeoff
,
result
+
i
);
...
@@ -716,6 +738,8 @@ static u64 ufs_alloccg_block(struct inode *inode,
...
@@ -716,6 +738,8 @@ static u64 ufs_alloccg_block(struct inode *inode,
return
INVBLOCK
;
return
INVBLOCK
;
ucpi
->
c_rotor
=
result
;
ucpi
->
c_rotor
=
result
;
gotit:
gotit:
if
(
!
try_add_frags
(
inode
,
uspi
->
s_fpb
))
return
0
;
blkno
=
ufs_fragstoblks
(
result
);
blkno
=
ufs_fragstoblks
(
result
);
ubh_clrblock
(
UCPI_UBH
(
ucpi
),
ucpi
->
c_freeoff
,
blkno
);
ubh_clrblock
(
UCPI_UBH
(
ucpi
),
ucpi
->
c_freeoff
,
blkno
);
if
((
UFS_SB
(
sb
)
->
s_flags
&
UFS_CG_MASK
)
==
UFS_CG_44BSD
)
if
((
UFS_SB
(
sb
)
->
s_flags
&
UFS_CG_MASK
)
==
UFS_CG_44BSD
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录