X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=etc%2Fcnid_dbd%2Fcmd_dbd_scanvol.c;h=a91f43716dd196c8a11ba56c8678c501dd8f2c97;hb=3858412d6efa2798fdc9b3f5613275e49dd63513;hp=576df49fb570bd26009014e9ac8226d75eda5f6d;hpb=cc5fb7fd9d648f38a8cb9e22e2c703e657e1ba6a;p=netatalk.git diff --git a/etc/cnid_dbd/cmd_dbd_scanvol.c b/etc/cnid_dbd/cmd_dbd_scanvol.c index 576df49f..a91f4371 100644 --- a/etc/cnid_dbd/cmd_dbd_scanvol.c +++ b/etc/cnid_dbd/cmd_dbd_scanvol.c @@ -862,6 +862,11 @@ static int dbd_readdir(int volroot, cnid_t did) struct dirent *ep; static struct stat st; /* Save some stack space */ + /* keep trying to get the lock */ + if (!db_locked) + if ((db_locked = get_lock(1, NULL)) == -1) + return -1; + /* Check again for .AppleDouble folder, check_adfile also checks/creates it */ if ((addir_ok = check_addir(volroot)) != 0) if ( ! (dbd_flags & DBD_FLAGS_SCAN)) @@ -1082,8 +1087,6 @@ static void delete_orphaned_cnids(DBD *dbd, DBD *dbd_rebuild, dbd_flags_t flags) struct cnid_dbd_rqst rqst; struct cnid_dbd_rply rply; - dbd->db_param.txn_frequency = 0; - /* jump over rootinfo key */ if ( dbif_idwalk(dbd, &dbd_cnid, 0) != 1) return; @@ -1198,7 +1201,6 @@ int cmd_dbd_scanvol(DBD *dbd_ref, struct volinfo *vi, dbd_flags_t flags) db_param.cachesize = 64 * 1024; /* 64 MB */ db_param.maxlocks = DEFAULT_MAXLOCKS; db_param.maxlockobjs = DEFAULT_MAXLOCKOBJS; - db_param.txn_frequency = 1000; /* close txn every 1000 objects */ db_param.logfile_autoremove = 1; /* Make it accessible for all funcs */ @@ -1210,15 +1212,16 @@ int cmd_dbd_scanvol(DBD *dbd_ref, struct volinfo *vi, dbd_flags_t flags) return -1; } - /* temporary rebuild db, used with -re rebuild to delete unused CNIDs, not used with -f */ - if (! nocniddb && !(flags & DBD_FLAGS_FORCE)) { - /* Get volume stamp */ - dbd_getstamp(dbd, &rqst, &rply); - if (rply.result != CNID_DBD_RES_OK) - goto exit; - memcpy(stamp, rply.name, CNID_DEV_LEN); + /* Get volume stamp */ + dbd_getstamp(dbd, &rqst, &rply); + if (rply.result != CNID_DBD_RES_OK) { + ret = -1; + goto exit; + } + memcpy(stamp, rply.name, CNID_DEV_LEN); - /* open/create rebuild dbd, copy rootinfo key */ + /* temporary rebuild db, used with -re rebuild to delete unused CNIDs, not used with -f */ + if (! nocniddb && (flags & DBD_FLAGS_EXCL) && !(flags & DBD_FLAGS_FORCE)) { tmpdb_path = get_tmpdb_path(); if (NULL == (dbd_rebuild = dbif_init(tmpdb_path, "cnid2.db"))) { ret = -1; @@ -1256,10 +1259,10 @@ int cmd_dbd_scanvol(DBD *dbd_ref, struct volinfo *vi, dbd_flags_t flags) exit: if (! nocniddb) { - if (dbif_txn_close(dbd, 2) != 0) + if (dbif_txn_close(dbd, ret == 0 ? 1 : 0) != 0) ret = -1; if (dbd_rebuild) - if (dbif_txn_close(dbd_rebuild, 2) != 0) + if (dbif_txn_close(dbd_rebuild, ret == 0 ? 1 : 0) != 0) ret = -1; if ((ret == 0) && dbd_rebuild && (flags & DBD_FLAGS_EXCL) && !(flags & DBD_FLAGS_FORCE)) /* We can only do this in exclusive mode, otherwise we might delete CNIDs added from