Re: [PATCH 2/3] md-cluster: introduce clear_clusterinfo_from_sb

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Nov 20 2015, Guoqing Jiang <gqjiang@xxxxxxxx> wrote:

> To change the bitmap from clustered to none, we also
> need to clean related info about cluster from sb, such
> as version, nodes and cluster_name.

I've applied the other two (though I removed the __func__ and __LINE__
From error messages - they are just noise: the source of the message can
easily be found with out them - I should remove all the others).

However I haven't applied this because there doesn't seem to be any
point.
Once your told that main md superblock that there is no bitmap, it
doesn't really matter what data is in the superblock of that
non-existent bitmap - it will never be looked at.  Will it?

Thanks,
NeilBrown

>
> Signed-off-by: Guoqing Jiang <gqjiang@xxxxxxxx>
> ---
>  drivers/md/bitmap.c | 25 +++++++++++++++++++++++++
>  drivers/md/bitmap.h |  1 +
>  drivers/md/md.c     |  1 +
>  3 files changed, 27 insertions(+)
>
> diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
> index 4f22e91..c11390f 100644
> --- a/drivers/md/bitmap.c
> +++ b/drivers/md/bitmap.c
> @@ -417,6 +417,31 @@ out:
>  /*
>   * bitmap file superblock operations
>   */
> +void clear_clusterinfo_from_sb(struct bitmap *bitmap)
> +{
> +	bitmap_super_t *sb;
> +
> +	if (!bitmap || !bitmap->mddev) /* no bitmap for this array */
> +		return;
> +	if (bitmap->mddev->bitmap_info.external)
> +		return;
> +	if (!bitmap->storage.sb_page) /* no superblock */
> +		return;
> +	sb = kmap_atomic(bitmap->storage.sb_page);
> +	sb->nodes = 0;
> +	sb->version = cpu_to_le32(BITMAP_MAJOR_HI);
> +	memset(sb->cluster_name, NULL, 64);
> +
> +	kunmap_atomic(sb);
> +	/* Don't write until any other writes have completed */
> +	if (bitmap->storage.file)
> +		wait_event(bitmap->write_wait,
> +			   atomic_read(&bitmap->pending_writes)==0);
> +	else
> +		md_super_wait(bitmap->mddev);
> +
> +	write_page(bitmap, bitmap->storage.sb_page, 1);
> +}
>  
>  /* update the event counter and sync the superblock to disk */
>  void bitmap_update_sb(struct bitmap *bitmap)
> diff --git a/drivers/md/bitmap.h b/drivers/md/bitmap.h
> index 7d5c3a6..1d0975b 100644
> --- a/drivers/md/bitmap.h
> +++ b/drivers/md/bitmap.h
> @@ -241,6 +241,7 @@ void bitmap_flush(struct mddev *mddev);
>  void bitmap_destroy(struct mddev *mddev);
>  
>  void bitmap_print_sb(struct bitmap *bitmap);
> +void clear_clusterinfo_from_sb(struct bitmap *bitmap);
>  void bitmap_update_sb(struct bitmap *bitmap);
>  void bitmap_status(struct seq_file *seq, struct bitmap *bitmap);
>  
> diff --git a/drivers/md/md.c b/drivers/md/md.c
> index 47ee8ae..f06dc43 100644
> --- a/drivers/md/md.c
> +++ b/drivers/md/md.c
> @@ -6598,6 +6598,7 @@ static int update_array_info(struct mddev *mddev, mdu_array_info_t *info)
>  				}
>  
>  				mddev->bitmap_info.nodes = 0;
> +				clear_clusterinfo_from_sb(mddev->bitmap);
>  				md_cluster_ops->leave(mddev);
>  			}
>  			mddev->pers->quiesce(mddev, 1);
> -- 
> 2.1.4

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux