projects
/
deliverable
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Btrfs: fix how we deal with the pages array in the write path
[deliverable/linux.git]
/
fs
/
btrfs
/
volumes.c
diff --git
a/fs/btrfs/volumes.c
b/fs/btrfs/volumes.c
index 2636a051e4b2fd102a436b5f55f8ffb8a6e19f78..dd13eb81ee4011df4d52103665d30465fe696306 100644
(file)
--- a/
fs/btrfs/volumes.c
+++ b/
fs/btrfs/volumes.c
@@
-1338,11
+1338,11
@@
int btrfs_rm_device(struct btrfs_root *root, char *device_path)
ret = btrfs_shrink_device(device, 0);
if (ret)
ret = btrfs_shrink_device(device, 0);
if (ret)
- goto error_
brelse
;
+ goto error_
undo
;
ret = btrfs_rm_dev_item(root->fs_info->chunk_root, device);
if (ret)
ret = btrfs_rm_dev_item(root->fs_info->chunk_root, device);
if (ret)
- goto error_
brelse
;
+ goto error_
undo
;
device->in_fs_metadata = 0;
device->in_fs_metadata = 0;
@@
-1416,6
+1416,13
@@
out:
mutex_unlock(&root->fs_info->volume_mutex);
mutex_unlock(&uuid_mutex);
return ret;
mutex_unlock(&root->fs_info->volume_mutex);
mutex_unlock(&uuid_mutex);
return ret;
+error_undo:
+ if (device->writeable) {
+ list_add(&device->dev_alloc_list,
+ &root->fs_info->fs_devices->alloc_list);
+ root->fs_info->fs_devices->rw_devices++;
+ }
+ goto error_brelse;
}
/*
}
/*
@@
-1605,12
+1612,14
@@
int btrfs_init_new_device(struct btrfs_root *root, char *device_path)
ret = find_next_devid(root, &device->devid);
if (ret) {
ret = find_next_devid(root, &device->devid);
if (ret) {
+ kfree(device->name);
kfree(device);
goto error;
}
trans = btrfs_start_transaction(root, 0);
if (IS_ERR(trans)) {
kfree(device);
goto error;
}
trans = btrfs_start_transaction(root, 0);
if (IS_ERR(trans)) {
+ kfree(device->name);
kfree(device);
ret = PTR_ERR(trans);
goto error;
kfree(device);
ret = PTR_ERR(trans);
goto error;
@@
-1631,7
+1640,7
@@
int btrfs_init_new_device(struct btrfs_root *root, char *device_path)
device->dev_root = root->fs_info->dev_root;
device->bdev = bdev;
device->in_fs_metadata = 1;
device->dev_root = root->fs_info->dev_root;
device->bdev = bdev;
device->in_fs_metadata = 1;
- device->mode =
0
;
+ device->mode =
FMODE_EXCL
;
set_blocksize(device->bdev, 4096);
if (seeding_dev) {
set_blocksize(device->bdev, 4096);
if (seeding_dev) {
This page took
0.02512 seconds
and
5
git commands to generate.