X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fcobd%2Fcache_obd.c;h=5c978bffae4e058996d20e90b81a848df0d24ff2;hp=2d3549b9a385f8508cabe9d75d927744449c05e3;hb=c5050e412572b00cbe93d8517d2d1f767bebfa92;hpb=1d04a7876e12a33c65fdc89eb00ec344754a5d80 diff --git a/lustre/cobd/cache_obd.c b/lustre/cobd/cache_obd.c index 2d3549b..5c978bf 100644 --- a/lustre/cobd/cache_obd.c +++ b/lustre/cobd/cache_obd.c @@ -22,9 +22,7 @@ #define DEBUG_SUBSYSTEM S_COBD #include -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) #include -#endif #include #include #include @@ -48,22 +46,23 @@ static int cobd_detach(struct obd_device *dev) static int cobd_setup (struct obd_device *dev, obd_count len, void *buf) { - struct obd_ioctl_data *data = (struct obd_ioctl_data *)buf; + struct lustre_cfg *lcfg = (struct lustre_cfg *)buf; struct cache_obd *cobd = &dev->u.cobd; struct obd_device *target; struct obd_device *cache; struct obd_uuid target_uuid; struct obd_uuid cache_uuid; + struct lustre_handle target_conn = {0,}, cache_conn = {0,}; int rc; - if (data->ioc_inlbuf1 == NULL || - data->ioc_inlbuf2 == NULL) + if (lcfg->lcfg_inlbuf1 == NULL || + lcfg->lcfg_inlbuf2 == NULL) return (-EINVAL); - obd_str2uuid(&target_uuid, data->ioc_inlbuf1); + obd_str2uuid(&target_uuid, lcfg->lcfg_inlbuf1); target = class_uuid2obd (&target_uuid); - obd_str2uuid(&cache_uuid, data->ioc_inlbuf2); + obd_str2uuid(&cache_uuid, lcfg->lcfg_inlbuf2); cache = class_uuid2obd (&cache_uuid); if (target == NULL || cache == NULL) @@ -71,19 +70,19 @@ cobd_setup (struct obd_device *dev, obd_count len, void *buf) /* don't bother checking attached/setup; * obd_connect() should, and it can change underneath us */ - rc = obd_connect (&cobd->cobd_target, target, &target_uuid); + rc = obd_connect(&target_conn, target, &target_uuid); if (rc != 0) return (rc); + cobd->cobd_target_exp = class_conn2export(&target_conn); - rc = obd_connect (&cobd->cobd_cache, cache, &cache_uuid); - if (rc != 0) - goto fail_0; - - return (0); + rc = obd_connect(&cache_conn, cache, &cache_uuid); + if (rc != 0) { + obd_disconnect(cobd->cobd_target_exp, 0); + return rc; + } + cobd->cobd_cache_exp = class_conn2export(&cache_conn); - fail_0: - obd_disconnect(&cobd->cobd_target, 0); - return (rc); + return rc; } static int cobd_cleanup(struct obd_device *dev, int flags) @@ -94,11 +93,11 @@ static int cobd_cleanup(struct obd_device *dev, int flags) if (!list_empty(&dev->obd_exports)) return (-EBUSY); - rc = obd_disconnect(&cobd->cobd_cache, flags); + rc = obd_disconnect(cobd->cobd_cache_exp, flags); if (rc != 0) CERROR ("error %d disconnecting cache\n", rc); - rc = obd_disconnect(&cobd->cobd_target, flags); + rc = obd_disconnect(cobd->cobd_target_exp, flags); if (rc != 0) CERROR ("error %d disconnecting target\n", rc); @@ -115,23 +114,23 @@ cobd_connect (struct lustre_handle *conn, struct obd_device *obd, return (rc); } -static int cobd_disconnect(struct lustre_handle *conn, int flags) +static int cobd_disconnect(struct obd_export *exp, int flags) { - int rc = class_disconnect(conn, flags); + int rc = class_disconnect(exp, flags); CERROR ("rc %d\n", rc); return (rc); } -static int -cobd_get_info(struct lustre_handle *conn, obd_count keylen, - void *key, __u32 *vallen, void *val) +static int cobd_get_info(struct obd_export *exp, obd_count keylen, + void *key, __u32 *vallen, void *val) { - struct obd_device *obd = class_conn2obd(conn); + struct obd_device *obd = class_exp2obd(exp); struct cache_obd *cobd; if (obd == NULL) { - CERROR("invalid client cookie "LPX64"\n", conn->cookie); + CERROR("invalid client cookie "LPX64"\n", + exp->exp_handle.h_cookie); return -EINVAL; } @@ -139,62 +138,30 @@ cobd_get_info(struct lustre_handle *conn, obd_count keylen, /* intercept cache utilisation info? */ - return obd_get_info(&cobd->cobd_target, keylen, key, vallen, val); + return obd_get_info(cobd->cobd_target_exp, keylen, key, vallen, val); } static int cobd_statfs(struct obd_device *obd, struct obd_statfs *osfs, unsigned long max_age) { - return obd_statfs(class_conn2obd(&obd->u.cobd.cobd_target), osfs, + return obd_statfs(class_exp2obd(obd->u.cobd.cobd_target_exp), osfs, max_age); } -static int cobd_getattr(struct lustre_handle *conn, struct obdo *oa, +static int cobd_getattr(struct obd_export *exp, struct obdo *oa, struct lov_stripe_md *lsm) { - struct obd_device *obd = class_conn2obd(conn); - struct cache_obd *cobd; - - if (obd == NULL) { - CERROR("invalid client cookie "LPX64"\n", conn->cookie); - return -EINVAL; - } - - cobd = &obd->u.cobd; - return (obd_getattr (&cobd->cobd_target, oa, lsm)); -} - -static int -cobd_open(struct lustre_handle *conn, struct obdo *oa, - struct lov_stripe_md *lsm, struct obd_trans_info *oti, - struct obd_client_handle *och) -{ - struct obd_device *obd = class_conn2obd(conn); - struct cache_obd *cobd; - - if (obd == NULL) { - CERROR("invalid client cookie "LPX64"\n", conn->cookie); - return -EINVAL; - } - - cobd = &obd->u.cobd; - return (obd_open (&cobd->cobd_target, oa, lsm, oti, och)); -} - -static int -cobd_close(struct lustre_handle *conn, struct obdo *oa, - struct lov_stripe_md *lsm, struct obd_trans_info *oti) -{ - struct obd_device *obd = class_conn2obd(conn); + struct obd_device *obd = class_exp2obd(exp); struct cache_obd *cobd; if (obd == NULL) { - CERROR("invalid client cookie "LPX64"\n", conn->cookie); + CERROR("invalid client cookie "LPX64"\n", + exp->exp_handle.h_cookie); return -EINVAL; } cobd = &obd->u.cobd; - return (obd_close (&cobd->cobd_target, oa, lsm, oti)); + return obd_getattr(cobd->cobd_target_exp, oa, lsm); } static int cobd_preprw(int cmd, struct obd_export *exp, struct obdo *oa, @@ -211,10 +178,9 @@ static int cobd_preprw(int cmd, struct obd_export *exp, struct obdo *oa, if ((cmd & OBD_BRW_WRITE) != 0) return -EOPNOTSUPP; - cobd_exp = class_conn2export(&exp->exp_obd->u.cobd.cobd_target); + cobd_exp = exp->exp_obd->u.cobd.cobd_target_exp; rc = obd_preprw(cmd, cobd_exp, oa, objcount, obj, niocount, nb, res, oti); - class_export_put(cobd_exp); return rc; } @@ -233,21 +199,21 @@ static int cobd_commitrw(int cmd, struct obd_export *exp, struct obdo *oa, if ((cmd & OBD_BRW_WRITE) != 0) return -EOPNOTSUPP; - cobd_exp = class_conn2export(&exp->exp_obd->u.cobd.cobd_target); + cobd_exp = exp->exp_obd->u.cobd.cobd_target_exp; rc = obd_commitrw(cmd, cobd_exp, oa, objcount, obj,niocount,local,oti); - class_export_put(cobd_exp); return rc; } -static int cobd_brw(int cmd, struct lustre_handle *conn, struct obdo *oa, +static int cobd_brw(int cmd, struct obd_export *exp, struct obdo *oa, struct lov_stripe_md *lsm, obd_count oa_bufs, struct brw_page *pga, struct obd_trans_info *oti) { - struct obd_device *obd = class_conn2obd(conn); + struct obd_device *obd = class_exp2obd(exp); struct cache_obd *cobd; if (obd == NULL) { - CERROR("invalid client cookie "LPX64"\n", conn->cookie); + CERROR("invalid client cookie "LPX64"\n", + exp->exp_handle.h_cookie); return -EINVAL; } @@ -255,24 +221,25 @@ static int cobd_brw(int cmd, struct lustre_handle *conn, struct obdo *oa, return -EOPNOTSUPP; cobd = &obd->u.cobd; - return (obd_brw(cmd, &cobd->cobd_target, oa, lsm, oa_bufs, pga, oti)); + return obd_brw(cmd, cobd->cobd_target_exp, oa, lsm, oa_bufs, pga, oti); } -static int cobd_iocontrol(unsigned int cmd, struct lustre_handle *conn, int len, +static int cobd_iocontrol(unsigned int cmd, struct obd_export *exp, int len, void *karg, void *uarg) { - struct obd_device *obd = class_conn2obd(conn); + struct obd_device *obd = class_exp2obd(exp); struct cache_obd *cobd; if (obd == NULL) { - CERROR("invalid client cookie "LPX64"\n", conn->cookie); + CERROR("invalid client cookie "LPX64"\n", + exp->exp_handle.h_cookie); return -EINVAL; } /* intercept? */ cobd = &obd->u.cobd; - return (obd_iocontrol(cmd, &cobd->cobd_target, len, karg, uarg)); + return obd_iocontrol(cmd, cobd->cobd_target_exp, len, karg, uarg); } static struct obd_ops cobd_ops = { @@ -290,8 +257,6 @@ static struct obd_ops cobd_ops = { o_statfs: cobd_statfs, o_getattr: cobd_getattr, - o_open: cobd_open, - o_close: cobd_close, o_preprw: cobd_preprw, o_commitrw: cobd_commitrw, o_brw: cobd_brw, @@ -303,7 +268,7 @@ static int __init cobd_init(void) struct lprocfs_static_vars lvars; ENTRY; - printk(KERN_INFO "Lustre Caching OBD driver; info@clusterfs.com\n"); + printk(KERN_INFO "Lustre: Caching OBD driver; info@clusterfs.com\n"); lprocfs_init_vars(cobd, &lvars); RETURN(class_register_type(&cobd_ops, lvars.module_vars,