diff options
author | Theodore Ts'o <tytso@mit.edu> | 2013-02-09 15:23:03 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2013-02-09 15:23:03 -0500 |
commit | 95eaefbdececae5e781d76d03fe7472a857c8c7a (patch) | |
tree | abe337e1490ded4166cf4d26f97cd1fe856a84ab /fs/ext4/ext4_jbd2.h | |
parent | 64044abf05d0842a7fed30e102fa411a744c7d9f (diff) |
ext4: fix the number of credits needed for acl ops with inline data
Operations which modify extended attributes may need extra journal
credits if inline data is used, since there is a chance that some
extended attributes may need to get pushed to an external attribute
block.
Changes to reflect this was made in xattr.c, but they were missed in
fs/ext4/acl.c. To fix this, abstract the calculation of the number of
credits needed for xattr operations to an inline function defined in
ext4_jbd2.h, and use it in acl.c and xattr.c.
Also move the function declarations used in inline.c from xattr.h
(where they are non-obviously hidden, and caused problems since
ext4_jbd2.h needs to use the function ext4_has_inline_data), and move
them to ext4.h.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Reviewed-by: Tao Ma <boyu.mt@taobao.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/ext4/ext4_jbd2.h')
-rw-r--r-- | fs/ext4/ext4_jbd2.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/fs/ext4/ext4_jbd2.h b/fs/ext4/ext4_jbd2.h index c1fc2dca14ae..4c216b1bf20c 100644 --- a/fs/ext4/ext4_jbd2.h +++ b/fs/ext4/ext4_jbd2.h | |||
@@ -104,6 +104,20 @@ | |||
104 | #define EXT4_MAXQUOTAS_INIT_BLOCKS(sb) (MAXQUOTAS*EXT4_QUOTA_INIT_BLOCKS(sb)) | 104 | #define EXT4_MAXQUOTAS_INIT_BLOCKS(sb) (MAXQUOTAS*EXT4_QUOTA_INIT_BLOCKS(sb)) |
105 | #define EXT4_MAXQUOTAS_DEL_BLOCKS(sb) (MAXQUOTAS*EXT4_QUOTA_DEL_BLOCKS(sb)) | 105 | #define EXT4_MAXQUOTAS_DEL_BLOCKS(sb) (MAXQUOTAS*EXT4_QUOTA_DEL_BLOCKS(sb)) |
106 | 106 | ||
107 | static inline int ext4_jbd2_credits_xattr(struct inode *inode) | ||
108 | { | ||
109 | int credits = EXT4_DATA_TRANS_BLOCKS(inode->i_sb); | ||
110 | |||
111 | /* | ||
112 | * In case of inline data, we may push out the data to a block, | ||
113 | * so we need to reserve credits for this eventuality | ||
114 | */ | ||
115 | if (ext4_has_inline_data(inode)) | ||
116 | credits += ext4_writepage_trans_blocks(inode) + 1; | ||
117 | return credits; | ||
118 | } | ||
119 | |||
120 | |||
107 | /* | 121 | /* |
108 | * Ext4 handle operation types -- for logging purposes | 122 | * Ext4 handle operation types -- for logging purposes |
109 | */ | 123 | */ |