s4-dsdb/util: Reorder DSDB_FLAG_* checks
authorKamen Mazdrashki <kamenim@samba.org>
Tue, 6 Jul 2010 01:06:23 +0000 (04:06 +0300)
committerKamen Mazdrashki <kamenim@samba.org>
Wed, 7 Jul 2010 23:38:36 +0000 (02:38 +0300)
On good thing about having more clear function interfaces
(and forcing callers to specify clearly what they want)
is that now I can execute following search:
git grep DSDB_FLAG_NEXT_MODULE | wc -l

This showed that DSDB_FLAG_NEXT_MODULE flag is about 6 times
more frequently used than DSDB_FLAG_OWN_MODULE.
So this should reduce branch prediction by six times
in this part of the code, right :)

source4/dsdb/samdb/ldb_modules/util.c

index 8797b106e7ac04b313815f52a1e1198c27f43cd2..bf260f99e453dfd69e9807b95792948815bd6b74 100644 (file)
@@ -72,14 +72,14 @@ int dsdb_module_search_dn(struct ldb_module *module,
        }
 
        /* Run the new request */
-       if (dsdb_flags & DSDB_FLAG_OWN_MODULE) {
-               const struct ldb_module_ops *ops = ldb_module_get_ops(module);
-               ret = ops->modify(module, req);
+       if (dsdb_flags & DSDB_FLAG_NEXT_MODULE) {
+               ret = ldb_next_request(module, req);
        } else if (dsdb_flags & DSDB_FLAG_TOP_MODULE) {
                ret = ldb_request(ldb_module_get_ctx(module), req);
        } else {
-               SMB_ASSERT(dsdb_flags & DSDB_FLAG_NEXT_MODULE);
-               ret = ldb_next_request(module, req);
+               const struct ldb_module_ops *ops = ldb_module_get_ops(module);
+               SMB_ASSERT(dsdb_flags & DSDB_FLAG_OWN_MODULE);
+               ret = ops->modify(module, req);
        }
        if (ret == LDB_SUCCESS) {
                ret = ldb_wait(req->handle, LDB_WAIT_ALL);
@@ -162,14 +162,14 @@ int dsdb_module_search(struct ldb_module *module,
                return ret;
        }
 
-       if (dsdb_flags & DSDB_FLAG_OWN_MODULE) {
-               const struct ldb_module_ops *ops = ldb_module_get_ops(module);
-               ret = ops->search(module, req);
+       if (dsdb_flags & DSDB_FLAG_NEXT_MODULE) {
+               ret = ldb_next_request(module, req);
        } else if (dsdb_flags & DSDB_FLAG_TOP_MODULE) {
                ret = ldb_request(ldb_module_get_ctx(module), req);
        } else {
-               SMB_ASSERT(dsdb_flags & DSDB_FLAG_NEXT_MODULE);
-               ret = ldb_next_request(module, req);
+               const struct ldb_module_ops *ops = ldb_module_get_ops(module);
+               SMB_ASSERT(dsdb_flags & DSDB_FLAG_OWN_MODULE);
+               ret = ops->search(module, req);
        }
        if (ret == LDB_SUCCESS) {
                ret = ldb_wait(req->handle, LDB_WAIT_ALL);
@@ -292,14 +292,14 @@ int dsdb_module_modify(struct ldb_module *module,
        }
 
        /* Run the new request */
-       if (dsdb_flags & DSDB_FLAG_OWN_MODULE) {
-               const struct ldb_module_ops *ops = ldb_module_get_ops(module);
-               ret = ops->modify(module, mod_req);
+       if (dsdb_flags & DSDB_FLAG_NEXT_MODULE) {
+               ret = ldb_next_request(module, mod_req);
        } else if (dsdb_flags & DSDB_FLAG_TOP_MODULE) {
                ret = ldb_request(ldb_module_get_ctx(module), mod_req);
        } else {
-               SMB_ASSERT(dsdb_flags & DSDB_FLAG_NEXT_MODULE);
-               ret = ldb_next_request(module, mod_req);
+               const struct ldb_module_ops *ops = ldb_module_get_ops(module);
+               SMB_ASSERT(dsdb_flags & DSDB_FLAG_OWN_MODULE);
+               ret = ops->modify(module, mod_req);
        }
        if (ret == LDB_SUCCESS) {
                ret = ldb_wait(mod_req->handle, LDB_WAIT_ALL);
@@ -350,14 +350,14 @@ int dsdb_module_rename(struct ldb_module *module,
        }
 
        /* Run the new request */
-       if (dsdb_flags & DSDB_FLAG_OWN_MODULE) {
-               const struct ldb_module_ops *ops = ldb_module_get_ops(module);
-               ret = ops->rename(module, req);
+       if (dsdb_flags & DSDB_FLAG_NEXT_MODULE) {
+               ret = ldb_next_request(module, req);
        } else if (dsdb_flags & DSDB_FLAG_TOP_MODULE) {
                ret = ldb_request(ldb_module_get_ctx(module), req);
        } else {
-               SMB_ASSERT(dsdb_flags & DSDB_FLAG_NEXT_MODULE);
-               ret = ldb_next_request(module, req);
+               const struct ldb_module_ops *ops = ldb_module_get_ops(module);
+               SMB_ASSERT(dsdb_flags & DSDB_FLAG_OWN_MODULE);
+               ret = ops->rename(module, req);
        }
        if (ret == LDB_SUCCESS) {
                ret = ldb_wait(req->handle, LDB_WAIT_ALL);
@@ -405,14 +405,14 @@ int dsdb_module_add(struct ldb_module *module,
        }
 
        /* Run the new request */
-       if (dsdb_flags & DSDB_FLAG_OWN_MODULE) {
-               const struct ldb_module_ops *ops = ldb_module_get_ops(module);
-               ret = ops->add(module, req);
+       if (dsdb_flags & DSDB_FLAG_NEXT_MODULE) {
+               ret = ldb_next_request(module, req);
        } else if (dsdb_flags & DSDB_FLAG_TOP_MODULE) {
                ret = ldb_request(ldb_module_get_ctx(module), req);
        } else {
-               SMB_ASSERT(dsdb_flags & DSDB_FLAG_NEXT_MODULE);
-               ret = ldb_next_request(module, req);
+               const struct ldb_module_ops *ops = ldb_module_get_ops(module);
+               SMB_ASSERT(dsdb_flags & DSDB_FLAG_OWN_MODULE);
+               ret = ops->add(module, req);
        }
        if (ret == LDB_SUCCESS) {
                ret = ldb_wait(req->handle, LDB_WAIT_ALL);
@@ -460,14 +460,14 @@ int dsdb_module_del(struct ldb_module *module,
        }
 
        /* Run the new request */
-       if (dsdb_flags & DSDB_FLAG_OWN_MODULE) {
-               const struct ldb_module_ops *ops = ldb_module_get_ops(module);
-               ret = ops->del(module, req);
+       if (dsdb_flags & DSDB_FLAG_NEXT_MODULE) {
+               ret = ldb_next_request(module, req);
        } else if (dsdb_flags & DSDB_FLAG_TOP_MODULE) {
                ret = ldb_request(ldb_module_get_ctx(module), req);
        } else {
-               SMB_ASSERT(dsdb_flags & DSDB_FLAG_NEXT_MODULE);
-               ret = ldb_next_request(module, req);
+               const struct ldb_module_ops *ops = ldb_module_get_ops(module);
+               SMB_ASSERT(dsdb_flags & DSDB_FLAG_OWN_MODULE);
+               ret = ops->del(module, req);
        }
        if (ret == LDB_SUCCESS) {
                ret = ldb_wait(req->handle, LDB_WAIT_ALL);