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