[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;
}