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

Reply via email to