6
6
7
7
#include <linux/slab.h>
8
8
#include <linux/iversion.h>
9
+ #include <linux/sched/mm.h>
9
10
#include "misc.h"
10
11
#include "delayed-inode.h"
11
12
#include "disk-io.h"
@@ -805,11 +806,14 @@ static int btrfs_insert_delayed_item(struct btrfs_trans_handle *trans,
805
806
struct btrfs_delayed_item * delayed_item )
806
807
{
807
808
struct extent_buffer * leaf ;
809
+ unsigned int nofs_flag ;
808
810
char * ptr ;
809
811
int ret ;
810
812
813
+ nofs_flag = memalloc_nofs_save ();
811
814
ret = btrfs_insert_empty_item (trans , root , path , & delayed_item -> key ,
812
815
delayed_item -> data_len );
816
+ memalloc_nofs_restore (nofs_flag );
813
817
if (ret < 0 && ret != - EEXIST )
814
818
return ret ;
815
819
@@ -937,6 +941,7 @@ static int btrfs_delete_delayed_items(struct btrfs_trans_handle *trans,
937
941
struct btrfs_delayed_node * node )
938
942
{
939
943
struct btrfs_delayed_item * curr , * prev ;
944
+ unsigned int nofs_flag ;
940
945
int ret = 0 ;
941
946
942
947
do_again :
@@ -945,7 +950,9 @@ static int btrfs_delete_delayed_items(struct btrfs_trans_handle *trans,
945
950
if (!curr )
946
951
goto delete_fail ;
947
952
953
+ nofs_flag = memalloc_nofs_save ();
948
954
ret = btrfs_search_slot (trans , root , & curr -> key , path , -1 , 1 );
955
+ memalloc_nofs_restore (nofs_flag );
949
956
if (ret < 0 )
950
957
goto delete_fail ;
951
958
else if (ret > 0 ) {
@@ -1012,6 +1019,7 @@ static int __btrfs_update_delayed_inode(struct btrfs_trans_handle *trans,
1012
1019
struct btrfs_key key ;
1013
1020
struct btrfs_inode_item * inode_item ;
1014
1021
struct extent_buffer * leaf ;
1022
+ unsigned int nofs_flag ;
1015
1023
int mod ;
1016
1024
int ret ;
1017
1025
@@ -1024,7 +1032,9 @@ static int __btrfs_update_delayed_inode(struct btrfs_trans_handle *trans,
1024
1032
else
1025
1033
mod = 1 ;
1026
1034
1035
+ nofs_flag = memalloc_nofs_save ();
1027
1036
ret = btrfs_lookup_inode (trans , root , path , & key , mod );
1037
+ memalloc_nofs_restore (nofs_flag );
1028
1038
if (ret > 0 ) {
1029
1039
btrfs_release_path (path );
1030
1040
return - ENOENT ;
@@ -1075,7 +1085,10 @@ static int __btrfs_update_delayed_inode(struct btrfs_trans_handle *trans,
1075
1085
1076
1086
key .type = BTRFS_INODE_EXTREF_KEY ;
1077
1087
key .offset = -1 ;
1088
+
1089
+ nofs_flag = memalloc_nofs_save ();
1078
1090
ret = btrfs_search_slot (trans , root , & key , path , -1 , 1 );
1091
+ memalloc_nofs_restore (nofs_flag );
1079
1092
if (ret < 0 )
1080
1093
goto err_out ;
1081
1094
ASSERT (ret );
0 commit comments