- if (4*2 + 4*2 + bm_space + array_size
- > dsize)
- bm_space = dsize - array_size
- - 4*2 - 4*2;
-
- reserved = bm_space + 4*2 + 4*2;
- if (reserved < headroom)
- reserved = headroom;
- if (reserved + array_size > dsize)
- reserved = dsize - array_size;
- /* Try for multiple of 1Meg so it is nicely aligned */
- #define ONE_MEG (2*1024)
- if (reserved > ONE_MEG)
- reserved = (reserved/ONE_MEG) * ONE_MEG;
-
- /* force 4K alignment */
- reserved &= ~7ULL;
+ data_offset = __le64_to_cpu(sb->data_offset);
+ if (data_offset == INVALID_SECTORS) {
+ if (4*2 + 4*2 + bm_space + array_size
+ > dsize)
+ bm_space = dsize - array_size
+ - 4*2 - 4*2;
+
+ reserved = bm_space + 4*2 + 4*2;
+ if (reserved < headroom)
+ reserved = headroom;
+ if (reserved + array_size > dsize)
+ reserved = dsize - array_size;
+ /* Try for multiple of 1Meg so it is nicely aligned */
+ #define ONE_MEG (2*1024)
+ if (reserved > ONE_MEG)
+ reserved = (reserved/ONE_MEG) * ONE_MEG;
+
+ /* force 4K alignment */
+ reserved &= ~7ULL;
+
+ } else
+ reserved = data_offset;