[DRBD-cvs] drbd by phil; * replaced drdb_get_lo_capacity() and dr...

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Thu, 5 Feb 2004 16:17:42 +0100 (CET)


DRBD CVS committal

Author  : phil
Module  : drbd

Dir     : drbd/drbd


Modified Files:
      Tag: rel-0_7-branch
	drbd.h drbd_actlog.c drbd_compat_wrappers.h drbd_fs.c 
	drbd_int.h drbd_main.c drbd_receiver.c drbd_req-2.4.c 


Log Message:
* replaced drdb_get_lo_capacity() and drbd_get_my_capacity() by 
  drbd_get_capacity().
* renamed lo_device to backing_bdev, and md_device to md_bdev to
  match the names used on L26.
* restructured drbd_ioctl_set_disk() a bit. 

[Untested. Will do testing as soon as all the checks for backing_bdev's
 and md_bdev's size are in.]

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd.h,v
retrieving revision 1.34.2.17
retrieving revision 1.34.2.18
diff -u -3 -r1.34.2.17 -r1.34.2.18
--- drbd.h	18 Jan 2004 10:12:38 -0000	1.34.2.17
+++ drbd.h	5 Feb 2004 15:17:36 -0000	1.34.2.18
@@ -90,12 +90,16 @@
 	LAAlreadyInUse,
 	OAAlreadyInUse,
 	LDFDInvalid,
+	MDFDInvalid,
 	LDAlreadyInUse,
 	LDNoBlockDev,
+	MDNoBlockDev,
 	LDOpenFailed,
+	MDOpenFailed,
 	LDDeviceTooSmall,
 	LDNoConfig,
-	LDMounted
+	LDMounted,
+	MDMounted
 };
 
 struct ioctl_disk_config {
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_actlog.c,v
retrieving revision 1.1.2.67
retrieving revision 1.1.2.68
diff -u -3 -r1.1.2.67 -r1.1.2.68
--- drbd_actlog.c	3 Feb 2004 13:22:07 -0000	1.1.2.67
+++ drbd_actlog.c	5 Feb 2004 15:17:36 -0000	1.1.2.68
@@ -43,7 +43,7 @@
 
 	init_completion(&event);
 	init_buffer(&bh, drbd_md_io_complete, &event);
-	bh.b_rdev = mdev->md_device;
+	bh.b_rdev = mdev->md_bdev;
 	bh.b_rsector = sector;
 	bh.b_state = (1 << BH_Req) | (1 << BH_Mapped) | (1 << BH_Lock);
 	bh.b_size = 512; // THINK: always? well, we can add an other parameter
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_compat_wrappers.h,v
retrieving revision 1.1.2.20
retrieving revision 1.1.2.21
diff -u -3 -r1.1.2.20 -r1.1.2.21
--- drbd_compat_wrappers.h	2 Feb 2004 13:17:07 -0000	1.1.2.20
+++ drbd_compat_wrappers.h	5 Feb 2004 15:17:36 -0000	1.1.2.21
@@ -15,18 +15,10 @@
  * appropriate.
  */
 
-/* Returns the number of 512 byte sectors of the lower level device */
-static inline unsigned long drbd_get_lo_capacity(drbd_dev *mdev)
+/* Returns the number of 512 byte sectors of the device */
+static inline unsigned long drbd_get_capacity(kdev_t dev)
 {
-	return mdev->lo_device
-		? blk_size[MAJOR(mdev->lo_device)][MINOR(mdev->lo_device)]<<1
-		: 0;
-}
-
-/* Returns the number of 512 byte sectors of our virtual device */
-static inline unsigned long drbd_get_my_capacity(drbd_dev *mdev)
-{
-	return blk_size[MAJOR_NR][(int)(mdev - drbd_conf)]<<1;
+	return dev ? blk_size[MAJOR(dev)][MINOR(dev)]<<1 : 0;
 }
 
 /* sets the number of 512 byte sectors of our virtual device */
@@ -38,13 +30,13 @@
 //#warning "FIXME why don't we care for the return value?"
 static inline void drbd_set_blocksize(drbd_dev *mdev, int blksize)
 {
-	set_blocksize(MKDEV(MAJOR_NR, (int)(mdev-drbd_conf)), blksize);
-	set_blocksize(mdev->lo_device, blksize);
+	set_blocksize(mdev->this_bdev, blksize);
+	set_blocksize(mdev->backing_bdev, blksize);
 }
 
 static inline int drbd_sync_me(drbd_dev *mdev)
 {
-	return fsync_dev(MKDEV(MAJOR_NR, (int)(mdev-drbd_conf)));
+	return fsync_dev(mdev->this_bdev);
 }
 
 #define drbd_bio_uptodate(bio) buffer_uptodate(bio)
@@ -137,7 +129,7 @@
 	bh->b_blocknr  = sector;	// We abuse b_blocknr here.
 	bh->b_size     = size;
 	bh->b_rsector  = sector;
-	bh->b_rdev     = mdev->lo_device;
+	bh->b_rdev     = mdev->backing_bdev;
 	bh->b_private  = mdev;
 	bh->b_state    = (1 << BH_Req)
 			|(1 << BH_Launder)
@@ -193,7 +185,7 @@
 	struct buffer_head * const bh_src =  req->master_bio;
 
 	drbd_bh_clone(bh,bh_src);
-	bh->b_rdev    = mdev->lo_device;
+	bh->b_rdev    = mdev->backing_bdev;
 	bh->b_private = mdev;
 	bh->b_end_io  = drbd_dio_end;
 
@@ -224,7 +216,7 @@
 	struct buffer_head * const bh_src =  req->master_bio;
 
 	drbd_bh_clone(bh,bh_src);
-	bh->b_rdev    = mdev->lo_device;
+	bh->b_rdev    = mdev->backing_bdev;
 	bh->b_private = mdev;
 	bh->b_end_io  = drbd_read_end_io;
 
@@ -294,18 +286,10 @@
 // we should not accept bios crossing our extent boundaries!
 extern int drbd_merge_bvec_fn(request_queue_t *q, struct bio *bio, struct bio_vec *bv);
 
-/* Returns the number of 512 byte sectors of the lower level device */
-static inline unsigned long drbd_get_lo_capacity(drbd_dev *mdev)
-{
-	return mdev->backing_bdev ?
-		get_capacity(mdev->backing_bdev->bd_disk) : 0;
-}
-
-/* Returns the number of 512 byte sectors of our virtual device */
-static inline unsigned long drbd_get_my_capacity(drbd_dev *mdev)
+/* Returns the number of 512 byte sectors of the device */
+static inline unsigned long drbd_get_capacity(struct block_device *bdev)
 {
-	sector_t c = get_capacity(mdev->vdisk);
-	return c;
+	return bdev ? get_capacity(bdev->bd_disk) : 0;
 }
 
 /* sets the number of 512 byte sectors of our virtual device */
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_fs.c,v
retrieving revision 1.28.2.61
retrieving revision 1.28.2.62
diff -u -3 -r1.28.2.61 -r1.28.2.62
--- drbd_fs.c	3 Feb 2004 13:02:34 -0000	1.28.2.61
+++ drbd_fs.c	5 Feb 2004 15:17:36 -0000	1.28.2.62
@@ -50,6 +50,12 @@
 #include <linux/blkpg.h>
 #endif
 
+ONLY_IN_26(
+/* see get_sb_bdev and bd_claim */
+char *drbd_sec_holder = "Secondary DRBD cannot be bd_claimed ;)";
+char *drbd_m_holder = "Hands off! this is DRBD's meta data device.";
+)
+
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
 STATIC enum { NotMounted=0,MountedRO,MountedRW } drbd_is_mounted(int minor)
 {
@@ -104,7 +110,7 @@
 	unsigned long size=0;
 	int rv;
 
-	m_size = drbd_get_lo_capacity(mdev)>>1;
+	m_size = drbd_get_capacity(mdev->backing_bdev)>>1;
 
 	if (mdev->md_index == -1 && m_size) {// internal metadata
 		D_ASSERT(m_size > MD_RESERVED_SIZE);
@@ -139,7 +145,7 @@
 		}
 	}
 
-	if( drbd_get_my_capacity(mdev) != size ) {
+	if( drbd_get_capacity(mdev->this_bdev) != size ) {
 		if(bm_resize(mdev->mbds_id,size)) {
 			drbd_set_my_capacity(mdev,size<<1);
 			mdev->la_size = size;
@@ -161,14 +167,9 @@
 	struct disk_config new_conf;
 	struct file *filp = 0;
 	struct file *filp2 = 0;
-	struct inode *inode;
-	NOT_IN_26(kdev_t ll_dev;)
-	ONLY_IN_26(struct block_device *bdev;)
-
-	/*
-	if (!capable(CAP_SYS_ADMIN)) //MAYBE: Move this to the drbd_ioctl()
-		return -EACCES;
-	*/
+	struct inode *inode, *inode2;
+	NOT_IN_26(kdev_t bdev, bdev2;)
+	ONLY_IN_26(struct block_device *bdev, *bdev2;)
 
 	minor=(int)(mdev-drbd_conf);
 
@@ -202,39 +203,36 @@
 		goto fail_ioctl;
 	}
 
-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
-	bdev = inode->i_bdev;
-	if (bd_claim(bdev, &mdev)) {
-		retcode=LDMounted;
+	filp2 = fget(new_conf.meta_device);
+
+	if (!filp2) {
+		retcode=MDFDInvalid;
 		goto fail_ioctl;
 	}
 
-	//#warning "XXX size check does not care about meta data on the same device??"
-	if ((drbd_get_lo_capacity(mdev)>>1) < new_conf.disk_size) {
-		retcode = LDDeviceTooSmall;
-		goto release_bdev_fail_ioctl;
-	}
+	inode2 = filp2->f_dentry->d_inode;
 
-	filp2 = fget(new_conf.meta_device);
-	if (!filp2) {
-		retcode=LDFDInvalid;
-		goto release_bdev_fail_ioctl;
+	if (!S_ISBLK(inode2->i_mode)) {
+		retcode=MDNoBlockDev;
+		goto fail_ioctl;
 	}
 
-	inode = filp2->f_dentry->d_inode;
-
-	if (!S_ISBLK(inode->i_mode)) {
-		retcode=LDNoBlockDev;
-		goto release_bdev_fail_ioctl;
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+	bdev = inode->i_bdev;
+	if (bd_claim(bdev, mdev)) {
+		retcode=LDMounted;
+		goto fail_ioctl;
 	}
-	if (bd_claim(inode->i_bdev, &mdev)) {
-		retcode=LDOpenFailed;
+
+	bdev2 = inode2->i_bdev;
+	if (bd_claim(bdev2,new_conf.meta_index==-1 ? mdev : drbd_m_holder )) {
+		retcode=MDMounted;
 		goto release_bdev_fail_ioctl;
 	}
 #else
 	for(i=0;i<minor_count;i++) {
 		if( i != minor &&
-		    inode->i_rdev == drbd_conf[i].lo_device) {
+		    inode->i_rdev == drbd_conf[i].backing_bdev) {
 			retcode=LDAlreadyInUse;
 			goto fail_ioctl;
 		}
@@ -253,35 +251,25 @@
 		retcode=LDOpenFailed;
 		goto fail_ioctl;
 	}
+	bdev = inode->i_rdev;
 
-	ll_dev = inode->i_rdev;
-
-	if ((drbd_get_lo_capacity(mdev)>>1) < new_conf.disk_size) {
-		retcode = LDDeviceTooSmall;
-		goto release_bdev_fail_ioctl;
-	}
-
-	filp2 = fget(new_conf.meta_device);
-	if (!filp2) {
-		retcode=LDFDInvalid;
-		goto release_bdev_fail_ioctl;
-	}
-
-	inode = filp2->f_dentry->d_inode;
-
-	if (!S_ISBLK(inode->i_mode)) {
-		retcode=LDNoBlockDev;
-		goto release_bdev_fail_ioctl;
-	}
-
-	if ((err = blkdev_open(inode, filp2))) {
+	if ((err = blkdev_open(inode2, filp2))) {
 		ERR("blkdev_open( %d:%d ,) returned %d\n",
 		    MAJOR(inode->i_rdev), MINOR(inode->i_rdev), err);
-		retcode=LDOpenFailed;
+		retcode=MDOpenFailed;
 		goto release_bdev_fail_ioctl;
 	}
+	bdev2 = inode2->i_rdev;
 #endif
 
+	if ((drbd_get_capacity(mdev->backing_bdev)>>1) < new_conf.disk_size) {
+		retcode = LDDeviceTooSmall;
+		goto release_bdev2_fail_ioctl;
+	}
+#warning "XXX size check does not care about meta data on the same device??"
+
+	
+
 	drbd_sync_me(mdev); // XXX does this make sense?
 
 	drbd_thread_stop(&mdev->worker);
@@ -289,13 +277,11 @@
 	drbd_thread_stop(&mdev->receiver);
 	drbd_free_resources(mdev);
 
-	NOT_IN_26( mdev->md_device = inode->i_rdev; )
-	ONLY_IN_26(mdev->md_bdev   = inode->i_bdev; )
+	mdev->md_bdev  = bdev2;
 	mdev->md_file  = filp2;
 	mdev->md_index = new_conf.meta_index;
 
-	NOT_IN_26( mdev->lo_device    = ll_dev; )
-	ONLY_IN_26(mdev->backing_bdev = bdev; )
+	mdev->backing_bdev = bdev;
 	mdev->lo_file  = filp;
 	mdev->lo_usize = new_conf.disk_size;
 	mdev->do_panic = new_conf.do_panic;
@@ -355,6 +341,9 @@
 
 	return 0;
 
+ release_bdev2_fail_ioctl:
+	NOT_IN_26(blkdev_put(filp2->f_dentry->d_inode->i_bdev,BDEV_FILE);)
+	ONLY_IN_26(bd_release(bdev2);)
  release_bdev_fail_ioctl:
 	NOT_IN_26(blkdev_put(filp->f_dentry->d_inode->i_bdev,BDEV_FILE);)
 	ONLY_IN_26(bd_release(bdev);)
@@ -380,10 +369,10 @@
 	cn.meta_device_minor  = MINOR(mdev->md_bdev ?
 				      mdev->md_bdev->bd_dev : 0);
 #else
-	cn.lower_device_major=MAJOR(mdev->lo_device);
-	cn.lower_device_minor=MINOR(mdev->lo_device);
-	cn.meta_device_major=MAJOR(mdev->md_device);
-	cn.meta_device_minor=MINOR(mdev->md_device);
+	cn.lower_device_major=MAJOR(mdev->backing_bdev);
+	cn.lower_device_minor=MINOR(mdev->backing_bdev);
+	cn.meta_device_major=MAJOR(mdev->md_bdev);
+	cn.meta_device_minor=MINOR(mdev->md_bdev);
 #endif
 	cn.cstate=mdev->cstate;
 	cn.disk_size_user=mdev->lo_usize;
@@ -638,11 +627,6 @@
 	return 0;
 }
 
-ONLY_IN_26(
-/* see get_sb_bdev and bd_claim */
-char *drbd_sec_holder = "Secondary DRBD cannot be bd_claimed ;)";
-)
-
 int drbd_ioctl(struct inode *inode, struct file *file,
 			   unsigned int cmd, unsigned long arg)
 {
@@ -678,12 +662,13 @@
  * If I understand correctly, only "private" ioctl end up here.
  */
 	case BLKGETSIZE:
-		err = put_user(drbd_get_my_capacity(mdev), (long *)arg);
+		err = put_user(drbd_get_capacity(mdev->this_bdev),(long *)arg);
 		break;
 
 #ifdef BLKGETSIZE64
 	case BLKGETSIZE64: /* see ./drivers/block/loop.c */
-		err = put_user((u64)drbd_get_my_capacity(mdev)<<9, (u64*)arg);
+		err = put_user((u64)drbd_get_capacity(mdev->this_bdev)<<9, 
+			       (u64*)arg);
 		break;
 #endif
 
@@ -826,7 +811,7 @@
 		}
 
 		bm_fill_bm(mdev->mbds_id,-1);
-		mdev->rs_total = drbd_get_my_capacity(mdev);
+		mdev->rs_total = drbd_get_capacity(mdev->this_bdev);
 		drbd_write_bm(mdev);
 		drbd_send_short_cmd(mdev,BecomeSyncSource);
 		drbd_start_resync(mdev,SyncTarget);
@@ -839,7 +824,7 @@
 		}
 
 		bm_fill_bm(mdev->mbds_id,-1);
-		mdev->rs_total = drbd_get_my_capacity(mdev);
+		mdev->rs_total = drbd_get_capacity(mdev->this_bdev);
 		drbd_write_bm(mdev);
 		drbd_send_short_cmd(mdev,BecomeSyncTarget);
 		drbd_start_resync(mdev,SyncSource);
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_int.h,v
retrieving revision 1.58.2.113
retrieving revision 1.58.2.114
diff -u -3 -r1.58.2.113 -r1.58.2.114
--- drbd_int.h	3 Feb 2004 13:02:34 -0000	1.58.2.113
+++ drbd_int.h	5 Feb 2004 15:17:36 -0000	1.58.2.114
@@ -639,8 +639,9 @@
 	struct drbd_work  resync_work;
 	struct timer_list resync_timer;
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-	kdev_t lo_device;         // backing device
-	kdev_t md_device;         // device for meta-data.
+	kdev_t backing_bdev;  // backing device
+	kdev_t this_bdev;
+	kdev_t md_bdev;       // device for meta-data.
 #else
 	struct block_device *backing_bdev;
 	struct block_device *this_bdev;
@@ -942,7 +943,7 @@
 static inline sector_t drbd_md_ss(drbd_dev *mdev)
 {
 	if( mdev->md_index == -1 ) {
-		return (  (drbd_get_lo_capacity(mdev) & ~7L)
+		return (  (drbd_get_capacity(mdev->backing_bdev) & ~7L)
 			- (MD_RESERVED_SIZE<<1) );
 	} else {
 		return 2 * MD_RESERVED_SIZE * mdev->md_index;
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_main.c,v
retrieving revision 1.73.2.120
retrieving revision 1.73.2.121
diff -u -3 -r1.73.2.120 -r1.73.2.121
--- drbd_main.c	2 Feb 2004 12:44:00 -0000	1.73.2.120
+++ drbd_main.c	5 Feb 2004 15:17:36 -0000	1.73.2.121
@@ -550,7 +550,7 @@
 	int ok,i;
 	unsigned long m_size; // sector_t ??
 
-	m_size = drbd_get_lo_capacity(mdev)>>1;
+	m_size = drbd_get_capacity(mdev->backing_bdev)>>1;
 	if (mdev->md_index == -1 ) {// internal metadata
 		D_ASSERT(m_size > MD_RESERVED_SIZE);
 		m_size = drbd_md_ss(mdev)>>1;
@@ -1316,6 +1316,7 @@
 
 NOT_IN_26(
 		drbd_blocksizes[i] = INITIAL_BLOCK_SIZE;
+		mdev->this_bdev = MKDEV(MAJOR_NR, i);
 		set_device_ro( MKDEV(MAJOR_NR, i), TRUE );
 )
 
@@ -1474,15 +1475,14 @@
 NOT_IN_26(
 		blkdev_put(mdev->lo_file->f_dentry->d_inode->i_bdev,BDEV_FILE);
 		blkdev_put(mdev->md_file->f_dentry->d_inode->i_bdev,BDEV_FILE);
-		mdev->lo_device = 0;
-		mdev->md_device = 0;
 )
 ONLY_IN_26(
 		bd_release(mdev->backing_bdev);
 		bd_release(mdev->md_bdev);
+)
 		mdev->md_bdev =
 		mdev->backing_bdev = 0;
-)
+
 		fput(mdev->lo_file);
 		fput(mdev->md_file);
 		mdev->lo_file = 0;
@@ -1939,7 +1939,7 @@
 
 	for(i=Flags;i<=ArbitraryCnt;i++)
 		buffer->gc[i]=cpu_to_be32(mdev->gen_cnt[i]);
-	buffer->la_size=cpu_to_be64(drbd_get_my_capacity(mdev)>>1);
+	buffer->la_size=cpu_to_be64(drbd_get_capacity(mdev->this_bdev)>>1);
 	buffer->magic=cpu_to_be32(DRBD_MD_MAGIC);
 
 	buffer->md_size = __constant_cpu_to_be32(MD_RESERVED_SIZE);
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_receiver.c,v
retrieving revision 1.97.2.101
retrieving revision 1.97.2.102
diff -u -3 -r1.97.2.101 -r1.97.2.102
--- drbd_receiver.c	2 Feb 2004 13:17:07 -0000	1.97.2.101
+++ drbd_receiver.c	5 Feb 2004 15:17:36 -0000	1.97.2.102
@@ -1123,7 +1123,7 @@
 
 	no_sync=drbd_determin_dev_size(mdev);
 
-	if( drbd_get_my_capacity(mdev) == 0) {
+	if( drbd_get_capacity(mdev->this_bdev) == 0) {
 		set_cstate(mdev,StandAlone);
 		mdev->receiver.t_state = Exiting;
 		return FALSE;
@@ -1326,7 +1326,7 @@
 	ERR_IF(!mdev->mbds_id)
 		return FALSE;
 	bm_fill_bm(mdev->mbds_id,-1);
-	mdev->rs_total = drbd_get_my_capacity(mdev);
+	mdev->rs_total = drbd_get_capacity(mdev->this_bdev);
 	drbd_write_bm(mdev);
 	drbd_start_resync(mdev,SyncTarget);
 	return TRUE; // cannot fail ?
@@ -1335,7 +1335,7 @@
 STATIC int receive_BecomeSyncSource(drbd_dev *mdev, Drbd_Header *h)
 {
 	bm_fill_bm(mdev->mbds_id,-1);
-	mdev->rs_total = drbd_get_my_capacity(mdev);
+	mdev->rs_total = drbd_get_capacity(mdev->this_bdev);
 	drbd_write_bm(mdev);
 	drbd_start_resync(mdev,SyncSource);
 	return TRUE; // cannot fail ?
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_req-2.4.c,v
retrieving revision 1.33.2.49
retrieving revision 1.33.2.50
diff -u -3 -r1.33.2.49 -r1.33.2.50
--- drbd_req-2.4.c	1 Feb 2004 18:15:09 -0000	1.33.2.49
+++ drbd_req-2.4.c	5 Feb 2004 15:17:36 -0000	1.33.2.50
@@ -285,7 +285,7 @@
 	if( rw == READ || rw == READA ) {
 		mdev->read_cnt += size >> 9;
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-		bio->b_rdev = mdev->lo_device;
+		bio->b_rdev  = mdev->backing_bdev;
 #else
 		bio->bi_bdev = mdev->backing_bdev;
 #endif
@@ -300,7 +300,7 @@
 		drbd_al_begin_io(mdev, sector);
 		drbd_al_complete_io(mdev, sector); // FIXME TODO
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-		bio->b_rdev = mdev->lo_device;
+		bio->b_rdev  = mdev->backing_bdev;
 #else
 		bio->bi_bdev = mdev->backing_bdev;
 		/* I want to change it anyways so we never remap ... */