[DRBD-cvs] drbd by phil; Do not read bitmap, if there was no vali...

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Thu, 5 Feb 2004 20:52:24 +0100 (CET)


DRBD CVS committal

Author  : phil
Module  : drbd

Dir     : drbd/drbd


Modified Files:
      Tag: rel-0_7-branch
	drbd_fs.c drbd_int.h drbd_main.c 


Log Message:
Do not read bitmap, if there was no valid meta-data. 

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_fs.c,v
retrieving revision 1.28.2.63
retrieving revision 1.28.2.64
diff -u -3 -r1.28.2.63 -r1.28.2.64
--- drbd_fs.c	5 Feb 2004 17:06:16 -0000	1.28.2.63
+++ drbd_fs.c	5 Feb 2004 19:52:19 -0000	1.28.2.64
@@ -325,9 +325,14 @@
 })
 #undef min_not_zero
 
-	drbd_md_read(mdev);
+	i = drbd_md_read(mdev);
 	drbd_determin_dev_size(mdev);
-	drbd_read_bm(mdev);
+	if(i) drbd_read_bm(mdev);
+	else {
+		WARN("You have to start initial sync if it is needed!\n");
+		drbd_write_bm(mdev);
+	}
+
 	if ( !mdev->act_log ||
 	     mdev->act_log->nr_elements != mdev->sync_conf.al_extents )
 	{
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_int.h,v
retrieving revision 1.58.2.114
retrieving revision 1.58.2.115
diff -u -3 -r1.58.2.114 -r1.58.2.115
--- drbd_int.h	5 Feb 2004 15:17:36 -0000	1.58.2.114
+++ drbd_int.h	5 Feb 2004 19:52:19 -0000	1.58.2.115
@@ -755,7 +755,7 @@
 
 // drbd_meta-data.c (still in drbd_main.c)
 extern void drbd_md_write(drbd_dev *mdev);
-extern void drbd_md_read(drbd_dev *mdev);
+extern int drbd_md_read(drbd_dev *mdev);
 extern void drbd_md_inc(drbd_dev *mdev, enum MetaDataIndex order);
 extern int drbd_md_compare(drbd_dev *mdev,Drbd_Parameter_Packet *partner);
 
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_main.c,v
retrieving revision 1.73.2.121
retrieving revision 1.73.2.122
diff -u -3 -r1.73.2.121 -r1.73.2.122
--- drbd_main.c	5 Feb 2004 15:17:36 -0000	1.73.2.121
+++ drbd_main.c	5 Feb 2004 19:52:19 -0000	1.73.2.122
@@ -1833,83 +1833,6 @@
 /*********************************/
 /* meta data management */
 
-/* Simply disabled for now...
-struct meta_data_on_disk {
-	__u64 la_size;           // last agreed size.
-	__u32 gc[GEN_CNT_SIZE];  // generation counter
-	__u32 magic;
-};
-
-void drbd_md_write(drbd_dev *mdev)
-{
-	struct meta_data_on_disk buffer;
-	__u32 flags;
-	mm_segment_t oldfs;
-	struct inode* inode;
-	struct file* fp;
-	char fname[25];
-	int i;
-
-	flags=mdev->gen_cnt[Flags] &
-		~(MDF_PrimaryInd|MDF_ConnectedInd);
-	if(mdev->state==Primary) flags |= MDF_PrimaryInd;
-	if(mdev->cstate>=WFReportParams) flags |= MDF_ConnectedInd;
-	mdev->gen_cnt[Flags]=flags;
-
-	for(i=Flags;i<=ArbitraryCnt;i++)
-		buffer.gc[i]=cpu_to_be32(mdev->gen_cnt[i]);
-	buffer.la_size=cpu_to_be64(blk_size[MAJOR_NR][(int)(mdev-drbd_conf)]);
-	buffer.magic=cpu_to_be32(DRBD_MD_MAGIC);
-
-	sprintf(fname,DRBD_MD_FILES,(int)(mdev-drbd_conf));
-	fp=filp_open(fname,O_WRONLY|O_CREAT|O_TRUNC|O_SYNC,00600);
-	if(IS_ERR(fp)) goto err;
-	oldfs = get_fs();
-	set_fs(get_ds());
-	inode = fp->f_dentry->d_inode;
-	i=fp->f_op->write(fp,(const char*)&buffer,sizeof(buffer),&fp->f_pos);
-	set_fs(oldfs);
-	filp_close(fp,NULL);
-	if (i==sizeof(buffer)) return;
- err:
-	ERR("Error writing state file\n\"%s\"\n", fname);
-	return;
-}
-
-void drbd_md_read(drbd_dev *mdev)
-{
-	struct meta_data_on_disk buffer;
-	mm_segment_t oldfs;
-	struct inode* inode;
-	struct file* fp;
-	char fname[25];
-	int i;
-
-	sprintf(fname,DRBD_MD_FILES,(int)(mdev-drbd_conf));
-	fp=filp_open(fname,O_RDONLY,0);
-	if(IS_ERR(fp)) goto err;
-	oldfs = get_fs();
-	set_fs(get_ds());
-	inode = fp->f_dentry->d_inode;
-	i=fp->f_op->read(fp,(char*)&buffer,sizeof(buffer),&fp->f_pos);
-	set_fs(oldfs);
-	filp_close(fp,NULL);
-
-	if(i != sizeof(buffer)) goto err;
-	if(be32_to_cpu(buffer.magic) != DRBD_MD_MAGIC) goto err;
-	for(i=Flags;i<=ArbitraryCnt;i++)
-		mdev->gen_cnt[i]=be32_to_cpu(buffer.gc[i]);
-	mdev->la_size = be64_to_cpu(buffer.la_size);
-	return;
- err:
-	INFO("Creating state file\n\"%s\"\n",fname);
-	for(i=HumanCnt;i<=ArbitraryCnt;i++) mdev->gen_cnt[i]=1;
-	mdev->gen_cnt[Flags]=MDF_Consistent;
-	drbd_md_write(mdev);
-	return;
-}
-*/
-
 struct meta_data_on_disk {
 	u64 la_size;           // last agreed size.
 	u32 gc[GEN_CNT_SIZE];  // generation counter
@@ -1956,13 +1879,13 @@
 	up(&mdev->md_io_mutex);
 }
 
-void drbd_md_read(drbd_dev *mdev)
+int drbd_md_read(drbd_dev *mdev)
 {
 	struct meta_data_on_disk * buffer;
 	sector_t sector;
 	int i;
 
-	if( mdev->lo_file == 0) return;
+	if( mdev->lo_file == 0) return -1;
 
 	down(&mdev->md_io_mutex);
 
@@ -1981,7 +1904,7 @@
 
 	kunmap(mdev->md_io_page);
 	up(&mdev->md_io_mutex);
-	return;
+	return 1;
 
  err:
 	kunmap(mdev->md_io_page);
@@ -1994,7 +1917,7 @@
 
 	drbd_md_write(mdev);
 
-	return;
+	return 0;
 }