mirror of
				git://sourceware.org/git/lvm2.git
				synced 2025-10-29 16:23:49 +03:00 
			
		
		
		
	scanning: optimize by checking text offset and checksum
After the VG lock is taken for vg_read, reread the mda_header and compare the metadata text offset and checksum to what was seen during label scan. If it is unchanged, then the metadata has not changed since the label scan, and the metadata does not need to be reread under the lock for command processing. For commands that do not make changes (e.g. reporting), the mda_header is reread and checked on one mda to decide if the full metadata rereading can be skipped. For other commands (e.g. modifying the vg) the mda_header is reread and checked from all PVs. (These could probably just check one mda also.)
This commit is contained in:
		| @@ -1507,6 +1507,7 @@ static int _vg_remove_file(struct format_instance *fid __attribute__((unused)), | ||||
| } | ||||
|  | ||||
| int read_metadata_location_summary(const struct format_type *fmt, | ||||
| 		    struct metadata_area *mda, | ||||
| 		    struct mda_header *mdah, int primary_mda, struct device_area *dev_area, | ||||
| 		    struct lvmcache_vgsummary *vgsummary, uint64_t *mda_free_sectors) | ||||
| { | ||||
| @@ -1564,6 +1565,17 @@ int read_metadata_location_summary(const struct format_type *fmt, | ||||
| 		return 0; | ||||
| 	} | ||||
|  | ||||
| 	/* | ||||
| 	 * This function is used to read the vg summary during label scan. | ||||
| 	 * Save the text start location and checksum during scan.  After the VG | ||||
| 	 * lock is acquired in vg_read, we can reread the mda_header, and | ||||
| 	 * compare rlocn->offset,checksum to what was saved during scan.  If | ||||
| 	 * unchanged, it means that the metadata was not changed between scan | ||||
| 	 * and the read. | ||||
| 	 */ | ||||
| 	mda->scan_text_offset = rlocn->offset; | ||||
| 	mda->scan_text_checksum = rlocn->checksum; | ||||
|  | ||||
| 	/* | ||||
| 	 * When the current metadata wraps around the end of the metadata area | ||||
| 	 * (so some is located at the end and some is located at the | ||||
|   | ||||
		Reference in New Issue
	
	Block a user