diff options
| author | Alasdair G Kergon <agk@redhat.com> | 2005-05-05 19:16:04 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-05-05 19:36:45 -0400 |
| commit | dfbe03f6d09fcebf85ae2a2cbb4ceee9b0985e67 (patch) | |
| tree | 81fda9aa4042682a8559269aab315199a5330016 | |
| parent | 3dcee8064bd36c547b45514dfd33df4c12695428 (diff) | |
[PATCH] device-mapper: let freeze_bdev return error
Allow freeze_bdev() to return an error.
Signed-Off-By: Alasdair G Kergon <agk@redhat.com>
From: Christoph Hellwig <hch@lst.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
| -rw-r--r-- | drivers/md/dm.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 0e4c8d3ca9fb..9687a084b5ff 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c | |||
| @@ -991,22 +991,38 @@ int dm_swap_table(struct mapped_device *md, struct dm_table *table) | |||
| 991 | */ | 991 | */ |
| 992 | static int __lock_fs(struct mapped_device *md) | 992 | static int __lock_fs(struct mapped_device *md) |
| 993 | { | 993 | { |
| 994 | int error = -ENOMEM; | ||
| 995 | |||
| 994 | if (test_and_set_bit(DMF_FS_LOCKED, &md->flags)) | 996 | if (test_and_set_bit(DMF_FS_LOCKED, &md->flags)) |
| 995 | return 0; | 997 | return 0; |
| 996 | 998 | ||
| 997 | md->frozen_bdev = bdget_disk(md->disk, 0); | 999 | md->frozen_bdev = bdget_disk(md->disk, 0); |
| 998 | if (!md->frozen_bdev) { | 1000 | if (!md->frozen_bdev) { |
| 999 | DMWARN("bdget failed in __lock_fs"); | 1001 | DMWARN("bdget failed in __lock_fs"); |
| 1000 | return -ENOMEM; | 1002 | goto out; |
| 1001 | } | 1003 | } |
| 1002 | 1004 | ||
| 1003 | WARN_ON(md->frozen_sb); | 1005 | WARN_ON(md->frozen_sb); |
| 1006 | |||
| 1004 | md->frozen_sb = freeze_bdev(md->frozen_bdev); | 1007 | md->frozen_sb = freeze_bdev(md->frozen_bdev); |
| 1008 | if (IS_ERR(md->frozen_sb)) { | ||
| 1009 | error = PTR_ERR(md->frozen_sb); | ||
| 1010 | goto out_bdput; | ||
| 1011 | } | ||
| 1012 | |||
| 1005 | /* don't bdput right now, we don't want the bdev | 1013 | /* don't bdput right now, we don't want the bdev |
| 1006 | * to go away while it is locked. We'll bdput | 1014 | * to go away while it is locked. We'll bdput |
| 1007 | * in __unlock_fs | 1015 | * in __unlock_fs |
| 1008 | */ | 1016 | */ |
| 1009 | return 0; | 1017 | return 0; |
| 1018 | |||
| 1019 | out_bdput: | ||
| 1020 | bdput(md->frozen_bdev); | ||
| 1021 | md->frozen_sb = NULL; | ||
| 1022 | md->frozen_bdev = NULL; | ||
| 1023 | out: | ||
| 1024 | clear_bit(DMF_FS_LOCKED, &md->flags); | ||
| 1025 | return error; | ||
| 1010 | } | 1026 | } |
| 1011 | 1027 | ||
| 1012 | static void __unlock_fs(struct mapped_device *md) | 1028 | static void __unlock_fs(struct mapped_device *md) |
