diff options
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r-- | fs/btrfs/inode.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 1922c7004bf5..4254c3c7b9f7 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -7588,9 +7588,15 @@ static int btrfs_dio_iomap_begin(struct inode *inode, loff_t start, } } - dio_data = kzalloc(sizeof(*dio_data), GFP_NOFS); - if (!dio_data) - return -ENOMEM; + if (flags & IOMAP_NOWAIT) { + dio_data = kzalloc(sizeof(*dio_data), GFP_NOWAIT); + if (!dio_data) + return -EAGAIN; + } else { + dio_data = kzalloc(sizeof(*dio_data), GFP_NOFS); + if (!dio_data) + return -ENOMEM; + } iomap->private = dio_data; |