From: Flex Liu <f...@suse.com> In fs/btrfs/volumes.c:2328
if (seeding_dev) { sb->s_flags &= ~MS_RDONLY; ret = btrfs_prepare_sprout(root); BUG_ON(ret); /* -ENOMEM */ } the error code would be return from: fs_devs = kzalloc(sizeof(*fs_devs), GFP_NOFS); if (!fs_devs) return ERR_PTR(-ENOMEM); Insufficient memory in btrfs would let the kernel panic, it suboptimal. instead, we should return the error code in btrfs_init_new_device to btrfs_ioctl. Hello kernel list. This is my first patch for kernel, so if I missed some of the guidelines, please be patient :) I hope everything is explained in the commit message. Signed-off-by: Flex Liu <f...@suse.com> --- fs/btrfs/volumes.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 366b335..5c16f04 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -2325,7 +2325,10 @@ int btrfs_init_new_device(struct btrfs_root *root, char *device_path) if (seeding_dev) { sb->s_flags &= ~MS_RDONLY; ret = btrfs_prepare_sprout(root); - BUG_ON(ret); /* -ENOMEM */ + if (ret) { + btrfs_abort_transaction(trans, root, ret); + goto error_trans; + } } device->fs_devices = root->fs_info->fs_devices; -- 2.1.4