浏览代码

btrfs: clone: use vmalloc only as fallback for nodesize bufer

Signed-off-by: David Sterba <dsterba@suse.com>
David Sterba 9 年之前
父节点
当前提交
153519559a
共有 1 个文件被更改,包括 8 次插入5 次删除
  1. 8 5
      fs/btrfs/ioctl.c

+ 8 - 5
fs/btrfs/ioctl.c

@@ -3468,13 +3468,16 @@ static int btrfs_clone(struct inode *src, struct inode *inode,
 	u64 last_dest_end = destoff;
 
 	ret = -ENOMEM;
-	buf = vmalloc(root->nodesize);
-	if (!buf)
-		return ret;
+	buf = kmalloc(root->nodesize, GFP_KERNEL | __GFP_NOWARN);
+	if (!buf) {
+		buf = vmalloc(root->nodesize);
+		if (!buf)
+			return ret;
+	}
 
 	path = btrfs_alloc_path();
 	if (!path) {
-		vfree(buf);
+		kvfree(buf);
 		return ret;
 	}
 
@@ -3775,7 +3778,7 @@ process_slot:
 
 out:
 	btrfs_free_path(path);
-	vfree(buf);
+	kvfree(buf);
 	return ret;
 }