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