[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 ... */