Skip to content

Commit 3fbe5c0

Browse files
jeffmahoneykdave
authored andcommitted
btrfs: split extent_state ops
set_extent_bit can do exclusive locking but only when called by lock_extent*, Drop the exclusive bits argument except when called by lock_extent. Signed-off-by: Jeff Mahoney <[email protected]>
1 parent d008237 commit 3fbe5c0

File tree

3 files changed

+25
-15
lines changed

3 files changed

+25
-15
lines changed

fs/btrfs/extent_io.c

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -721,9 +721,10 @@ static void uncache_state(struct extent_state **cached_ptr)
721721
* [start, end] is inclusive This takes the tree lock.
722722
*/
723723

724-
int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
725-
int bits, int exclusive_bits, u64 *failed_start,
726-
struct extent_state **cached_state, gfp_t mask)
724+
static int __must_check
725+
__set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
726+
int bits, int exclusive_bits, u64 *failed_start,
727+
struct extent_state **cached_state, gfp_t mask)
727728
{
728729
struct extent_state *state;
729730
struct extent_state *prealloc = NULL;
@@ -917,6 +918,15 @@ int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
917918
goto again;
918919
}
919920

921+
int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, int bits,
922+
u64 *failed_start, struct extent_state **cached_state,
923+
gfp_t mask)
924+
{
925+
return __set_extent_bit(tree, start, end, bits, 0, failed_start,
926+
cached_state, mask);
927+
}
928+
929+
920930
/**
921931
* convert_extent - convert all bits in a given range from one bit to another
922932
* @tree: the io tree to search
@@ -1111,14 +1121,14 @@ int convert_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
11111121
int set_extent_dirty(struct extent_io_tree *tree, u64 start, u64 end,
11121122
gfp_t mask)
11131123
{
1114-
return set_extent_bit(tree, start, end, EXTENT_DIRTY, 0, NULL,
1124+
return set_extent_bit(tree, start, end, EXTENT_DIRTY, NULL,
11151125
NULL, mask);
11161126
}
11171127

11181128
int set_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
11191129
int bits, gfp_t mask)
11201130
{
1121-
return set_extent_bit(tree, start, end, bits, 0, NULL,
1131+
return set_extent_bit(tree, start, end, bits, NULL,
11221132
NULL, mask);
11231133
}
11241134

@@ -1133,7 +1143,7 @@ int set_extent_delalloc(struct extent_io_tree *tree, u64 start, u64 end,
11331143
{
11341144
return set_extent_bit(tree, start, end,
11351145
EXTENT_DELALLOC | EXTENT_UPTODATE,
1136-
0, NULL, cached_state, mask);
1146+
NULL, cached_state, mask);
11371147
}
11381148

11391149
int clear_extent_dirty(struct extent_io_tree *tree, u64 start, u64 end,
@@ -1147,15 +1157,15 @@ int clear_extent_dirty(struct extent_io_tree *tree, u64 start, u64 end,
11471157
int set_extent_new(struct extent_io_tree *tree, u64 start, u64 end,
11481158
gfp_t mask)
11491159
{
1150-
return set_extent_bit(tree, start, end, EXTENT_NEW, 0, NULL,
1160+
return set_extent_bit(tree, start, end, EXTENT_NEW, NULL,
11511161
NULL, mask);
11521162
}
11531163

11541164
int set_extent_uptodate(struct extent_io_tree *tree, u64 start, u64 end,
11551165
struct extent_state **cached_state, gfp_t mask)
11561166
{
11571167
return set_extent_bit(tree, start, end, EXTENT_UPTODATE, 0,
1158-
NULL, cached_state, mask);
1168+
cached_state, mask);
11591169
}
11601170

11611171
static int clear_extent_uptodate(struct extent_io_tree *tree, u64 start,
@@ -1176,9 +1186,9 @@ int lock_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
11761186
int err;
11771187
u64 failed_start;
11781188
while (1) {
1179-
err = set_extent_bit(tree, start, end, EXTENT_LOCKED | bits,
1180-
EXTENT_LOCKED, &failed_start,
1181-
cached_state, GFP_NOFS);
1189+
err = __set_extent_bit(tree, start, end, EXTENT_LOCKED | bits,
1190+
EXTENT_LOCKED, &failed_start,
1191+
cached_state, GFP_NOFS);
11821192
if (err == -EEXIST) {
11831193
wait_extent_bit(tree, failed_start, end, EXTENT_LOCKED);
11841194
start = failed_start;
@@ -1199,8 +1209,8 @@ int try_lock_extent(struct extent_io_tree *tree, u64 start, u64 end)
11991209
int err;
12001210
u64 failed_start;
12011211

1202-
err = set_extent_bit(tree, start, end, EXTENT_LOCKED, EXTENT_LOCKED,
1203-
&failed_start, NULL, GFP_NOFS);
1212+
err = __set_extent_bit(tree, start, end, EXTENT_LOCKED, EXTENT_LOCKED,
1213+
&failed_start, NULL, GFP_NOFS);
12041214
if (err == -EEXIST) {
12051215
if (failed_start > start)
12061216
clear_extent_bit(tree, start, failed_start - 1,

fs/btrfs/extent_io.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ int clear_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
209209
int set_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
210210
int bits, gfp_t mask);
211211
int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
212-
int bits, int exclusive_bits, u64 *failed_start,
212+
int bits, u64 *failed_start,
213213
struct extent_state **cached_state, gfp_t mask);
214214
int set_extent_uptodate(struct extent_io_tree *tree, u64 start, u64 end,
215215
struct extent_state **cached_state, gfp_t mask);

fs/btrfs/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6233,7 +6233,7 @@ static ssize_t btrfs_direct_IO(int rw, struct kiocb *iocb,
62336233
if (writing) {
62346234
write_bits = EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING;
62356235
ret = set_extent_bit(&BTRFS_I(inode)->io_tree, lockstart, lockend,
6236-
EXTENT_DELALLOC, 0, NULL, &cached_state,
6236+
EXTENT_DELALLOC, NULL, &cached_state,
62376237
GFP_NOFS);
62386238
if (ret) {
62396239
clear_extent_bit(&BTRFS_I(inode)->io_tree, lockstart,

0 commit comments

Comments
 (0)