Refactoring: move code to a new function get_provided_data_sectors.

Signed-off-by: Mikulas Patocka <[email protected]>

---
 drivers/md/dm-integrity.c |   54 +++++++++++++++++++++++++++++++---------------
 1 file changed, 37 insertions(+), 17 deletions(-)

Index: linux-2.6/drivers/md/dm-integrity.c
===================================================================
--- linux-2.6.orig/drivers/md/dm-integrity.c    2020-01-29 15:21:08.000000000 
+0100
+++ linux-2.6/drivers/md/dm-integrity.c 2020-01-29 20:29:32.000000000 +0100
@@ -3086,6 +3093,24 @@ static int calculate_device_limits(struc
        return 0;
 }
 
+static void get_provided_data_sectors(struct dm_integrity_c *ic)
+{
+       if (!ic->meta_dev) {
+               int test_bit;
+               ic->provided_data_sectors = 0;
+               for (test_bit = fls64(ic->meta_device_sectors) - 1; test_bit >= 
3; test_bit--) {
+                       __u64 prev_data_sectors = ic->provided_data_sectors;
+
+                       ic->provided_data_sectors |= (sector_t)1 << test_bit;
+                       if (calculate_device_limits(ic))
+                               ic->provided_data_sectors = prev_data_sectors;
+               }
+       } else {
+               ic->provided_data_sectors = ic->data_device_sectors;
+               ic->provided_data_sectors &= ~(sector_t)(ic->sectors_per_block 
- 1);
+       }
+}
+
 static int initialize_superblock(struct dm_integrity_c *ic, unsigned 
journal_sectors, unsigned interleave_sectors)
 {
        unsigned journal_sections;
@@ -3113,20 +3138,15 @@ static int initialize_superblock(struct
                ic->sb->log2_interleave_sectors = 
max((__u8)MIN_LOG2_INTERLEAVE_SECTORS, ic->sb->log2_interleave_sectors);
                ic->sb->log2_interleave_sectors = 
min((__u8)MAX_LOG2_INTERLEAVE_SECTORS, ic->sb->log2_interleave_sectors);
 
-               ic->provided_data_sectors = 0;
-               for (test_bit = fls64(ic->meta_device_sectors) - 1; test_bit >= 
3; test_bit--) {
-                       __u64 prev_data_sectors = ic->provided_data_sectors;
-
-                       ic->provided_data_sectors |= (sector_t)1 << test_bit;
-                       if (calculate_device_limits(ic))
-                               ic->provided_data_sectors = prev_data_sectors;
-               }
+               get_provided_data_sectors(ic);
                if (!ic->provided_data_sectors)
                        return -EINVAL;
        } else {
                ic->sb->log2_interleave_sectors = 0;
-               ic->provided_data_sectors = ic->data_device_sectors;
-               ic->provided_data_sectors &= ~(sector_t)(ic->sectors_per_block 
- 1);
+
+               get_provided_data_sectors(ic);
+               if (!ic->provided_data_sectors)
+                       return -EINVAL;
 
 try_smaller_buffer:
                ic->sb->journal_sections = cpu_to_le32(0);

--
dm-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/dm-devel

Reply via email to