File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -1646,6 +1646,7 @@ static int super_1_validate(struct mddev *mddev, struct md_rdev *rdev)
16461646 return - EINVAL ;
16471647 }
16481648 set_bit (Journal , & rdev -> flags );
1649+ rdev -> journal_tail = le64_to_cpu (sb -> journal_tail );
16491650 break ;
16501651 default :
16511652 rdev -> saved_raid_disk = role ;
@@ -1721,6 +1722,9 @@ static void super_1_sync(struct mddev *mddev, struct md_rdev *rdev)
17211722 sb -> feature_map |=
17221723 cpu_to_le32 (MD_FEATURE_RECOVERY_BITMAP );
17231724 }
1725+ /* Note: recovery_offset and journal_tail share space */
1726+ if (test_bit (Journal , & rdev -> flags ))
1727+ sb -> journal_tail = cpu_to_le64 (rdev -> journal_tail );
17241728 if (test_bit (Replacement , & rdev -> flags ))
17251729 sb -> feature_map |=
17261730 cpu_to_le32 (MD_FEATURE_REPLACEMENT );
@@ -8097,6 +8101,8 @@ static int remove_and_add_spares(struct mddev *mddev,
80978101 continue ;
80988102 if (test_bit (Faulty , & rdev -> flags ))
80998103 continue ;
8104+ if (test_bit (Journal , & rdev -> flags ))
8105+ continue ;
81008106 if (mddev -> ro &&
81018107 ! (rdev -> saved_raid_disk >= 0 &&
81028108 !test_bit (Bitmap_sync , & rdev -> flags )))
Original file line number Diff line number Diff line change @@ -87,10 +87,16 @@ struct md_rdev {
8787 * array and could again if we did a partial
8888 * resync from the bitmap
8989 */
90- sector_t recovery_offset ;/* If this device has been partially
90+ union {
91+ sector_t recovery_offset ;/* If this device has been partially
9192 * recovered, this is where we were
9293 * up to.
9394 */
95+ sector_t journal_tail ; /* If this device is a journal device,
96+ * this is the journal tail (journal
97+ * recovery start point)
98+ */
99+ };
94100
95101 atomic_t nr_pending ; /* number of pending requests.
96102 * only maintained for arrays that
Original file line number Diff line number Diff line change @@ -258,7 +258,10 @@ struct mdp_superblock_1 {
258258 __le64 data_offset ; /* sector start of data, often 0 */
259259 __le64 data_size ; /* sectors in this device that can be used for data */
260260 __le64 super_offset ; /* sector start of this superblock */
261- __le64 recovery_offset ;/* sectors before this offset (from data_offset) have been recovered */
261+ union {
262+ __le64 recovery_offset ;/* sectors before this offset (from data_offset) have been recovered */
263+ __le64 journal_tail ;/* journal tail of journal device (from data_offset) */
264+ };
262265 __le32 dev_number ; /* permanent identifier of this device - not role in raid */
263266 __le32 cnt_corrected_read ; /* number of read errors that were corrected by re-writing */
264267 __u8 device_uuid [16 ]; /* user-space setable, ignored by kernel */
You can’t perform that action at this time.
0 commit comments