Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] device-mapper: rename frozen_bdev

Rename frozen_bdev to suspended_bdev and move the bdget outside lockfs. (This
prepares for making lockfs optional.)

Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Alasdair G Kergon and committed by
Linus Torvalds
e39e2e95 a1a19080

+25 -26
+25 -26
drivers/md/dm.c
··· 97 97 * freeze/thaw support require holding onto a super block 98 98 */ 99 99 struct super_block *frozen_sb; 100 - struct block_device *frozen_bdev; 100 + struct block_device *suspended_bdev; 101 101 }; 102 102 103 103 #define MIN_IOS 256 ··· 836 836 { 837 837 set_capacity(md->disk, size); 838 838 839 - down(&md->frozen_bdev->bd_inode->i_sem); 840 - i_size_write(md->frozen_bdev->bd_inode, (loff_t)size << SECTOR_SHIFT); 841 - up(&md->frozen_bdev->bd_inode->i_sem); 839 + down(&md->suspended_bdev->bd_inode->i_sem); 840 + i_size_write(md->suspended_bdev->bd_inode, (loff_t)size << SECTOR_SHIFT); 841 + up(&md->suspended_bdev->bd_inode->i_sem); 842 842 } 843 843 844 844 static int __bind(struct mapped_device *md, struct dm_table *t) ··· 1010 1010 */ 1011 1011 static int lock_fs(struct mapped_device *md) 1012 1012 { 1013 - int r = -ENOMEM; 1014 - 1015 - md->frozen_bdev = bdget_disk(md->disk, 0); 1016 - if (!md->frozen_bdev) { 1017 - DMWARN("bdget failed in lock_fs"); 1018 - goto out; 1019 - } 1013 + int r; 1020 1014 1021 1015 WARN_ON(md->frozen_sb); 1022 1016 1023 - md->frozen_sb = freeze_bdev(md->frozen_bdev); 1017 + md->frozen_sb = freeze_bdev(md->suspended_bdev); 1024 1018 if (IS_ERR(md->frozen_sb)) { 1025 1019 r = PTR_ERR(md->frozen_sb); 1026 - goto out_bdput; 1020 + md->frozen_sb = NULL; 1021 + return r; 1027 1022 } 1028 1023 1029 1024 /* don't bdput right now, we don't want the bdev 1030 - * to go away while it is locked. We'll bdput 1031 - * in unlock_fs 1025 + * to go away while it is locked. 1032 1026 */ 1033 1027 return 0; 1034 - 1035 - out_bdput: 1036 - bdput(md->frozen_bdev); 1037 - md->frozen_sb = NULL; 1038 - md->frozen_bdev = NULL; 1039 - out: 1040 - return r; 1041 1028 } 1042 1029 1043 1030 static void unlock_fs(struct mapped_device *md) 1044 1031 { 1045 - thaw_bdev(md->frozen_bdev, md->frozen_sb); 1046 - bdput(md->frozen_bdev); 1047 - 1032 + thaw_bdev(md->suspended_bdev, md->frozen_sb); 1048 1033 md->frozen_sb = NULL; 1049 - md->frozen_bdev = NULL; 1050 1034 } 1051 1035 1052 1036 /* ··· 1055 1071 1056 1072 /* This does not get reverted if there's an error later. */ 1057 1073 dm_table_presuspend_targets(map); 1074 + 1075 + md->suspended_bdev = bdget_disk(md->disk, 0); 1076 + if (!md->suspended_bdev) { 1077 + DMWARN("bdget failed in dm_suspend"); 1078 + r = -ENOMEM; 1079 + goto out; 1080 + } 1058 1081 1059 1082 /* Flush I/O to the device. */ 1060 1083 r = lock_fs(md); ··· 1115 1124 r = 0; 1116 1125 1117 1126 out: 1127 + if (r && md->suspended_bdev) { 1128 + bdput(md->suspended_bdev); 1129 + md->suspended_bdev = NULL; 1130 + } 1131 + 1118 1132 dm_table_put(map); 1119 1133 up(&md->suspend_lock); 1120 1134 return r; ··· 1149 1153 up_write(&md->io_lock); 1150 1154 1151 1155 unlock_fs(md); 1156 + 1157 + bdput(md->suspended_bdev); 1158 + md->suspended_bdev = NULL; 1152 1159 1153 1160 clear_bit(DMF_SUSPENDED, &md->flags); 1154 1161