RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 30-May-2009 00:11:36 Branch: HEAD Handle: 2009052922113501 Modified files: rpm CHANGES rpm/rpmdb rpmdb.c rpmdb.h rpm/rpmio librpmio.vers rpmio.h rpmrpc.c Log: - rpmio: wrap posix_fallocate(3) / fallocate(2) (for rpmdb creation). - eliminate useless rebuilddb legacy "sanity check" hysteria. Summary: Revision Changes Path 1.3002 +2 -0 rpm/CHANGES 1.306 +1 -61 rpm/rpmdb/rpmdb.c 1.92 +0 -1 rpm/rpmdb/rpmdb.h 2.119 +1 -0 rpm/rpmio/librpmio.vers 1.90 +7 -0 rpm/rpmio/rpmio.h 2.87 +125 -0 rpm/rpmio/rpmrpc.c ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/CHANGES ============================================================================ $ cvs diff -u -r1.3001 -r1.3002 CHANGES --- rpm/CHANGES 29 May 2009 19:04:20 -0000 1.3001 +++ rpm/CHANGES 29 May 2009 22:11:35 -0000 1.3002 @@ -1,5 +1,7 @@ 5.2b1 -> 5.3a1 + - jbj: rpmio: wrap posix_fallocate(3) / fallocate(2) (for rpmdb creation). + - jbj: eliminate useless rebuilddb legacy "sanity check" hysteria. - jbj: display rebuilddb progress using ps(1) and top(1). - jbj: mark rebuilddb legacy hysteria for destruction. - jbj: add RPMTAG_SHA1HEADER to rpmdb pubkeys. @@ . patch -p0 <<'@@ .' Index: rpm/rpmdb/rpmdb.c ============================================================================ $ cvs diff -u -r1.305 -r1.306 rpmdb.c --- rpm/rpmdb/rpmdb.c 29 May 2009 19:04:21 -0000 1.305 +++ rpm/rpmdb/rpmdb.c 29 May 2009 22:11:36 -0000 1.306 @@ -62,8 +62,6 @@ /*...@unchecked@*/ static int _rebuildinprogress = 0; -/*...@unchecked@*/ -static int _db_filter_dups = 0; /* Use a path uniqifier in the upper 16 bits of tagNum? */ /* XXX Note: one cannot just choose a value, rpmdb tagNum's need fixing too */ @@ -1208,23 +1206,16 @@ rpmdb rpmdbNew(/*...@kept@*/ /*...@null@*/ const char * root, /*...@kept@*/ /*...@null@*/ const char * home, int mode, int perms, int flags) - /*...@globals _db_filter_dups @*/ - /*...@modifies _db_filter_dups @*/ + /*...@*/ { rpmdb db = rpmdbGetPool(_rpmdbPool); const char * epfx = _DB_ERRPFX; - static int oneshot = 0; /*...@-modfilesys@*/ /*...@-nullpass@*/ if (_rpmdb_debug) fprintf(stderr, "==> rpmdbNew(%s, %s, 0x%x, 0%o, 0x%x) db %p\n", root, home, mode, perms, flags, db); /*...@=modfilesys@*/ /*...@=nullpass@*/ - if (!oneshot) { - _db_filter_dups = rpmExpandNumeric("%{?_filterdbdups}"); - oneshot = 1; - } - db->db_api = _DB_MAJOR; db->_dbi = NULL; @@ -1249,7 +1240,6 @@ db->db_export = rpmdbExportInfo; db->db_errpfx = rpmExpand( (epfx && *epfx ? epfx : _DB_ERRPFX), NULL); db->db_remove_env = 0; - db->db_filter_dups = _db_filter_dups; dbiTagsInit(&db->db_tags, &db->db_ndbi); db->_dbi = xcalloc(db->db_ndbi, sizeof(*db->_dbi)); /*...@-globstate@*/ @@ -4241,56 +4231,6 @@ while ((h = rpmmiNext(mi)) != NULL) { -#if defined(SUPPORT_REBUILDDB_SANITY) - /* let's sanity check this record a bit, otherwise just skip it */ - if (!(headerIsEntry(h, RPMTAG_NAME) && - headerIsEntry(h, RPMTAG_VERSION) && - headerIsEntry(h, RPMTAG_RELEASE) && - headerIsEntry(h, RPMTAG_BUILDTIME))) - { - rpmlog(RPMLOG_WARNING, - _("header #%u in the database is bad -- skipping.\n"), - _RECNUM); - continue; - } - if (!headerIsEntry(h, RPMTAG_SOURCERPM) - && headerIsEntry(h, RPMTAG_ARCH)) - { - rpmlog(RPMLOG_WARNING, - _("header #%u in the database is SRPM -- skipping.\n"), - _RECNUM); - continue; - } -#endif - -#if defined(SUPPORT_REBUILDDB_FILTER) - /* Filter duplicate entries ? (bug in pre rpm-3.0.4) */ - if (_db_filter_dups || newdb->db_filter_dups) { - const char * name, * version, * release; - int skip = 0; - - (void) headerNEVRA(h, &name, NULL, &version, &release, NULL); - - /*...@-shadow@*/ - { rpmmi mi; - mi = rpmmiInit(newdb, RPMTAG_NAME, name, 0); - (void) rpmmiAddPattern(mi, RPMTAG_VERSION, - RPMMIRE_DEFAULT, version); - (void) rpmmiAddPattern(mi, RPMTAG_RELEASE, - RPMMIRE_DEFAULT, release); - while (rpmmiNext(mi)) { - skip = 1; - /*...@innerbreak@*/ break; - } - mi = rpmmiFree(mi); - } - /*...@=shadow@*/ - - if (skip) - continue; - } -#endif - /* XXX limit the fiddle up to linux for now. */ #if !defined(HAVE_SETPROCTITLE) && defined(__linux__) he->tag = RPMTAG_NVRA; @@ . patch -p0 <<'@@ .' Index: rpm/rpmdb/rpmdb.h ============================================================================ $ cvs diff -u -r1.91 -r1.92 rpmdb.h --- rpm/rpmdb/rpmdb.h 24 May 2009 23:30:27 -0000 1.91 +++ rpm/rpmdb/rpmdb.h 29 May 2009 22:11:36 -0000 1.92 @@ -433,7 +433,6 @@ const char * db_errpfx; /*!< Berkeley DB error msg prefix. */ int db_remove_env; /*!< Discard dbenv on close? */ - int db_filter_dups; /*!< Skip duplicate headers with --rebuilddb? */ int db_verifying; int db_chrootDone; /*!< If chroot(2) done, ignore db_root. */ @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/librpmio.vers ============================================================================ $ cvs diff -u -r2.118 -r2.119 librpmio.vers --- rpm/rpmio/librpmio.vers 13 May 2009 19:44:20 -0000 2.118 +++ rpm/rpmio/librpmio.vers 29 May 2009 22:11:36 -0000 2.119 @@ -75,6 +75,7 @@ delMacro; expandMacros; _fsmNext; + Fallocate; Fchmod; _Fchmod; Fchown; @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmio.h ============================================================================ $ cvs diff -u -r1.89 -r1.90 rpmio.h --- rpm/rpmio/rpmio.h 26 Mar 2009 20:09:03 -0000 1.89 +++ rpm/rpmio/rpmio.h 29 May 2009 22:11:36 -0000 1.90 @@ -292,6 +292,13 @@ /*...@modifies *st, errno, fileSystem, internalState @*/; /** + * posix_fallocate(3)/fallocate(2) clone. + */ +int Fallocate(FD_t fd, off_t offset, off_t length) + /*...@globals fileSystem, internalState @*/ + /*...@modifies fileSystem, internalState @*/; + +/** * chown(2) clone. * @todo Implement remotely. */ @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmrpc.c ============================================================================ $ cvs diff -u -r2.86 -r2.87 rpmrpc.c --- rpm/rpmio/rpmrpc.c 12 Mar 2009 20:01:32 -0000 2.86 +++ rpm/rpmio/rpmrpc.c 29 May 2009 22:11:36 -0000 2.87 @@ -1444,6 +1444,131 @@ return fstat(Fileno(fd), st); } +int Fallocate(FD_t fd, off_t offset, off_t len) +{ + const char * path = fdGetOPath(fd); + const char * lpath; + int ut = urlPath(path, &lpath); + int fdno = Fileno(fd); + int rc; + +if (_rpmio_debug) +fprintf(stderr, "*** %s(%p,0x%x,0x%x) fdno %d path %s\n", __FUNCTION__, fd, (unsigned)offset, (unsigned)len, fdno, path); + + /* XXX errno is not set by fallocate/posix_fallocate */ + if (fd == NULL || fdno < 0) { + rc = EBADF; + return rc; + } + + switch (ut) { + case URL_IS_PATH: + case URL_IS_UNKNOWN: + break; + default: + rc = ENODEV; + return rc; + /*...@notreached@*/ break; + } + +#if defined(HAVE_FALLOCATE) + /* XXX linux FALLOC_FL_KEEP_SIZE zeroes allocated blocks */ + rc = (int) fallocate(fdno, 0, (loff_t)offset, (loff_t)len); +#elif defined(HAVE_POSIX_FALLOCATE) + rc = posix_fallocate(fdno, offset, len); +#else + rc = ENOSYS; +#endif + + if (rc != 0) + rpmlog(RPMLOG_DEBUG, _("%s(%d,0x%x,0x%x) failed: rc %d\n"), + __FUNCTION__, fdno, (unsigned)offset, (unsigned)len, rc); + + return rc; +} + +#ifdef NOTYET /* XXX figger mmap or posix_memalign first */ +void *Mmap(void *addr, size_t length, int prot, int flags, + FD_t fd, off_t offset) +{ + int fdno = (fd ? Fileno(fd) : -1); + void * ret = mmap(addr, length, prot, flags, fdno, offset); +if (_rpmio_debug) +fprintf(stderr, "*** %s(%p[%u],0x%x,0x%x,%p,0x%x) ret %p\n", __FUNCTION__, addr, (unsigned)len, prot, flags, fd, (unsigned)offset, ret); + if (ret == NULL || ret == (void *)-1) + rpmlog(RPMLOG_ERR, _("%s(%p[%u],0x%x,0x%x,%p,0x%x) failed: %m\n"), + __FUNCTION__, addr, (unsigned)len, prot, flags, fd, + (unsigned)offset); + return ret; +} + +int Munmap(const void * addr, size_t len) +{ + int rc = munmap(addr, len); +if (_rpmio_debug) +fprintf(stderr, "*** %s(%p[%u]) rc %d\n", __FUNCTION__, addr, (unsigned)len, rc); + if (rc < 0) + rpmlog(RPMLOG_ERR, _("%s(%p[%u]) failed: %m\n"), + __FUNCTION__, addr, (unsigned)len); + return rc; +} + +int Mprotect(const void * addr, size_t len, int prot) +{ + int rc = mprotect(addr, len, prot); +if (_rpmio_debug) +fprintf(stderr, "*** %s(%p[%u],%d) rc %d\n", __FUNCTION__, addr, len, prot, rc); + if (rc < 0) + rpmlog(RPMLOG_ERR, _("%s(%p[%u],%d) failed: %m\n"), + __FUNCTION__, addr, (unsigned)len, prot); + return rc; +} +#endif + +#ifdef NOTYET /* XXX figger posix_fadvise or posix_madvise first */ +int Madvise(void *addr, size_t len, int advice) +{ + int rc = madvise(addr, len, advice); +if (_rpmio_debug) +fprintf(stderr, "*** %s(%p[%u],%d) rc %d\n", __FUNCTION__, addr, len, advice, rc); + if (rc < 0) + rpmlog(RPMLOG_ERR, _("%s(%p[%u],%d) failed: %m\n"), + __FUNCTION__, addr, (unsigned)len, advice); + return rc; +} + +int Fadvise(FD_t fd, off_t offset, off_t len, int advice) +{ + const char * path = fdGetOPath(fd); + const char * lpath; + int ut = urlPath(path, &lpath); + int fdno = Fileno(fd); + int rc; + +if (_rpmio_debug) +fprintf(stderr, "*** Fadvise(%p,0x%x,0x%x,%d) fdno %d path %s\n", fd, (unsigned)offset, (unsigned)len, advice, fdno, path); + if (fd == NULL || fdno < 0) { + errno = EBADF; + return -2; + } + + switch (ut) { + case URL_IS_PATH: + case URL_IS_UNKNOWN: + break; + default: + errno = EINVAL; + return -1; + /*...@notreached@*/ break; + } + rc = posix_fadvise(fdno, offset, len, advice); + if (rc != 0) + rpmlog(RPMLOG_ERR, _("%s(%d,%d,0x%x,0x%x) failed: %m\n"), + __FUNCTION__, fdno, (unsigned)offset, (unsigned)len, advice); + return rc; +} +#endif + int Chown(const char * path, uid_t owner, gid_t group) { const char * lpath; @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org