mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
ext2: annotate block-mapping helpers as requiring truncate_mutex
The indirect-block mapping helpers in inode.c all run under the inode's truncate_mutex. ext2_find_goal(), ext2_alloc_blocks(), ext2_alloc_branch() and ext2_splice_branch() are reached only from ext2_get_blocks() while it holds the mutex. ext2_find_shared(), ext2_free_data() and ext2_free_branches() are called from __ext2_truncate_blocks() while it holds the mutex. Add __must_hold() annotations for the Clang's context analysis to reflect this. Signed-off-by: Timothy Day <timday@thelustrecollective.com> Acked-by: Marco Elver <elver@google.com> Link: https://patch.msgid.link/20260811160336.782342-7-timday@thelustrecollective.com Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
7aa90b3c8e
commit
d8c906454f
|
|
@ -327,6 +327,7 @@ static ext2_fsblk_t ext2_find_near(struct inode *inode, Indirect *ind)
|
|||
|
||||
static inline ext2_fsblk_t ext2_find_goal(struct inode *inode, long block,
|
||||
Indirect *partial)
|
||||
__must_hold(&EXT2_I(inode)->truncate_mutex)
|
||||
{
|
||||
struct ext2_block_alloc_info *block_i;
|
||||
|
||||
|
|
@ -397,6 +398,7 @@ ext2_blks_to_allocate(Indirect * branch, int k, unsigned long blks,
|
|||
static int ext2_alloc_blocks(struct inode *inode,
|
||||
ext2_fsblk_t goal, int indirect_blks, int blks,
|
||||
ext2_fsblk_t new_blocks[4], int *err)
|
||||
__must_hold(&EXT2_I(inode)->truncate_mutex)
|
||||
{
|
||||
int target, i;
|
||||
unsigned long count = 0;
|
||||
|
|
@ -477,6 +479,7 @@ static int ext2_alloc_blocks(struct inode *inode,
|
|||
static int ext2_alloc_branch(struct inode *inode,
|
||||
int indirect_blks, int *blks, ext2_fsblk_t goal,
|
||||
int *offsets, Indirect *branch)
|
||||
__must_hold(&EXT2_I(inode)->truncate_mutex)
|
||||
{
|
||||
int blocksize = inode->i_sb->s_blocksize;
|
||||
int i, n = 0;
|
||||
|
|
@ -558,6 +561,7 @@ static int ext2_alloc_branch(struct inode *inode,
|
|||
*/
|
||||
static void ext2_splice_branch(struct inode *inode,
|
||||
long block, Indirect *where, int num, int blks)
|
||||
__must_hold(&EXT2_I(inode)->truncate_mutex)
|
||||
{
|
||||
int i;
|
||||
struct ext2_block_alloc_info *block_i;
|
||||
|
|
@ -1002,6 +1006,7 @@ static Indirect *ext2_find_shared(struct inode *inode,
|
|||
int offsets[4],
|
||||
Indirect chain[4],
|
||||
__le32 *top)
|
||||
__must_hold(&EXT2_I(inode)->truncate_mutex)
|
||||
{
|
||||
Indirect *partial, *p;
|
||||
int k, err;
|
||||
|
|
@ -1057,6 +1062,7 @@ static Indirect *ext2_find_shared(struct inode *inode,
|
|||
* appropriately.
|
||||
*/
|
||||
static inline void ext2_free_data(struct inode *inode, __le32 *p, __le32 *q)
|
||||
__must_hold(&EXT2_I(inode)->truncate_mutex)
|
||||
{
|
||||
ext2_fsblk_t block_to_free = 0, count = 0;
|
||||
ext2_fsblk_t nr;
|
||||
|
|
@ -1097,6 +1103,7 @@ static inline void ext2_free_data(struct inode *inode, __le32 *p, __le32 *q)
|
|||
* appropriately.
|
||||
*/
|
||||
static void ext2_free_branches(struct inode *inode, __le32 *p, __le32 *q, int depth)
|
||||
__must_hold(&EXT2_I(inode)->truncate_mutex)
|
||||
{
|
||||
struct buffer_head * bh;
|
||||
ext2_fsblk_t nr;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user