+ struct berval nrdn;
+ Entry *e = entry_dup( op->ora_e );
+
+ if (pdn.bv_len) {
+ nrdn.bv_val = e->e_nname.bv_val;
+ nrdn.bv_len = pdn.bv_val - op->ora_e->e_nname.bv_val - 1;
+ } else {
+ nrdn = e->e_nname;
+ }
+
+ bdb_cache_add( bdb, ei, e, &nrdn, locker );
+
+ if ( suffix_ei == NULL ) {
+ suffix_ei = BEI(e);
+ }
+
+ if ( LDAP_STAILQ_EMPTY( &op->o_bd->be_syncinfo )) {
+ if ( ctxcsn_added ) {
+ bdb_cache_add( bdb, suffix_ei, ctxcsn_e,
+ (struct berval *)&slap_ldapsync_cn_bv, locker );
+ }
+ }
+
+ if ( rs->sr_err == LDAP_SUCCESS && !op->o_no_psearch ) {
+ ldap_pvt_thread_rdwr_wlock( &bdb->bi_pslist_rwlock );
+ assert( BEI(e) );
+ LDAP_LIST_FOREACH ( ps_list, &bdb->bi_psearch_list, o_ps_link ) {
+ rc = bdb_psearch( op, rs, ps_list, e, LDAP_PSEARCH_BY_ADD );
+ if ( rc ) {
+ Debug( LDAP_DEBUG_TRACE,
+ "bdb_add: persistent search failed (%d,%d)\n",
+ rc, rs->sr_err, 0 );
+ }
+ }
+ ldap_pvt_thread_rdwr_wunlock( &bdb->bi_pslist_rwlock );
+ }
+
+ if(( rs->sr_err=TXN_COMMIT( ltid, 0 )) != 0 ) {
+ rs->sr_text = "txn_commit failed";
+ } else {
+ rs->sr_err = LDAP_SUCCESS;
+ }