6
6
7
7
#include <linux/slab.h>
8
8
#include <linux/iversion.h>
9
+ #include <linux/sched/mm.h>
9
10
#include "delayed-inode.h"
10
11
#include "disk-io.h"
11
12
#include "transaction.h"
@@ -801,11 +802,14 @@ static int btrfs_insert_delayed_item(struct btrfs_trans_handle *trans,
801
802
struct btrfs_delayed_item * delayed_item )
802
803
{
803
804
struct extent_buffer * leaf ;
805
+ unsigned int nofs_flag ;
804
806
char * ptr ;
805
807
int ret ;
806
808
809
+ nofs_flag = memalloc_nofs_save ();
807
810
ret = btrfs_insert_empty_item (trans , root , path , & delayed_item -> key ,
808
811
delayed_item -> data_len );
812
+ memalloc_nofs_restore (nofs_flag );
809
813
if (ret < 0 && ret != - EEXIST )
810
814
return ret ;
811
815
@@ -933,6 +937,7 @@ static int btrfs_delete_delayed_items(struct btrfs_trans_handle *trans,
933
937
struct btrfs_delayed_node * node )
934
938
{
935
939
struct btrfs_delayed_item * curr , * prev ;
940
+ unsigned int nofs_flag ;
936
941
int ret = 0 ;
937
942
938
943
do_again :
@@ -941,7 +946,9 @@ static int btrfs_delete_delayed_items(struct btrfs_trans_handle *trans,
941
946
if (!curr )
942
947
goto delete_fail ;
943
948
949
+ nofs_flag = memalloc_nofs_save ();
944
950
ret = btrfs_search_slot (trans , root , & curr -> key , path , -1 , 1 );
951
+ memalloc_nofs_restore (nofs_flag );
945
952
if (ret < 0 )
946
953
goto delete_fail ;
947
954
else if (ret > 0 ) {
@@ -1008,6 +1015,7 @@ static int __btrfs_update_delayed_inode(struct btrfs_trans_handle *trans,
1008
1015
struct btrfs_key key ;
1009
1016
struct btrfs_inode_item * inode_item ;
1010
1017
struct extent_buffer * leaf ;
1018
+ unsigned int nofs_flag ;
1011
1019
int mod ;
1012
1020
int ret ;
1013
1021
@@ -1020,7 +1028,9 @@ static int __btrfs_update_delayed_inode(struct btrfs_trans_handle *trans,
1020
1028
else
1021
1029
mod = 1 ;
1022
1030
1031
+ nofs_flag = memalloc_nofs_save ();
1023
1032
ret = btrfs_lookup_inode (trans , root , path , & key , mod );
1033
+ memalloc_nofs_restore (nofs_flag );
1024
1034
if (ret > 0 ) {
1025
1035
btrfs_release_path (path );
1026
1036
return - ENOENT ;
@@ -1071,7 +1081,10 @@ static int __btrfs_update_delayed_inode(struct btrfs_trans_handle *trans,
1071
1081
1072
1082
key .type = BTRFS_INODE_EXTREF_KEY ;
1073
1083
key .offset = -1 ;
1084
+
1085
+ nofs_flag = memalloc_nofs_save ();
1074
1086
ret = btrfs_search_slot (trans , root , & key , path , -1 , 1 );
1087
+ memalloc_nofs_restore (nofs_flag );
1075
1088
if (ret < 0 )
1076
1089
goto err_out ;
1077
1090
ASSERT (ret );
0 commit comments