Remove the re-try logic from svn_fs_fs__path_rev_absolute().  Since
r1040832, all its callers correctly account for the possibility of an
out-of-date result due to a concurrent packing operation.

The re-try logic was introduced in r875097 and reduced but did not eliminate
the window of opportunity for the caller to use an out-of-date result.

See the email thread <http://svn.haxx.se/dev/archive-2010-12/0019.shtml>,
subject "Re: svn commit: r1040832 - Port a fix for a FSFS packing race".

* subversion/libsvn_fs_fs/fs_fs.c
  (svn_fs_fs__path_rev_absolute): Remove the re-try logic.

* subversion/libsvn_fs_fs/fs_fs.h
  (svn_fs_fs__path_rev_absolute): Update the doc string accordingly.
--This line, and those below, will be ignored--

Index: subversion/libsvn_fs_fs/fs_fs.c
===================================================================
--- subversion/libsvn_fs_fs/fs_fs.c	(revision 1041339)
+++ subversion/libsvn_fs_fs/fs_fs.c	(working copy)
@@ -246,8 +246,6 @@ path_rev(svn_fs_t *fs, svn_revnum_t rev,
                               apr_psprintf(pool, "%ld", rev), NULL);
 }
 
-/* Returns the path of REV in FS, whether in a pack file or not.
-   Allocate in POOL. */
 svn_error_t *
 svn_fs_fs__path_rev_absolute(const char **path,
                              svn_fs_t *fs,
@@ -256,45 +254,16 @@ svn_fs_fs__path_rev_absolute(const char 
 {
   fs_fs_data_t *ffd = fs->fsap_data;
 
-  if (ffd->format < SVN_FS_FS__MIN_PACKED_FORMAT)
+  if (ffd->format < SVN_FS_FS__MIN_PACKED_FORMAT
+      || ! is_packed_rev(fs, rev))
     {
       *path = path_rev(fs, rev, pool);
-      return SVN_NO_ERROR;
     }
-
-  if (! is_packed_rev(fs, rev))
+  else
     {
-      svn_node_kind_t kind;
-
-      /* Initialize the return variable. */
-      *path = path_rev(fs, rev, pool);
-
-      SVN_ERR(svn_io_check_path(*path, &kind, pool));
-      if (kind == svn_node_file)
-        {
-          /* *path is already set correctly. */
-          return SVN_NO_ERROR;
-        }
-      else
-        {
-          /* Someone must have run 'svnadmin pack' while this fs object
-           * was open. */
-
-          SVN_ERR(update_min_unpacked_rev(fs, pool));
-
-          /* The rev really should be present now. */
-          if (! is_packed_rev(fs, rev))
-            return svn_error_createf(APR_ENOENT, NULL,
-                                     _("Revision file '%s' does not exist, "
-                                       "and r%ld is not packed"),
-                                     svn_dirent_local_style(*path, pool),
-                                     rev);
-          /* Fall through. */
-        }
+      *path = path_rev_packed(fs, rev, "pack", pool);
     }
 
-  *path = path_rev_packed(fs, rev, "pack", pool);
-
   return SVN_NO_ERROR;
 }
 
Index: subversion/libsvn_fs_fs/fs_fs.h
===================================================================
--- subversion/libsvn_fs_fs/fs_fs.h	(revision 1041339)
+++ subversion/libsvn_fs_fs/fs_fs.h	(working copy)
@@ -411,8 +411,10 @@ svn_error_t *svn_fs_fs__move_into_place(
    Allocate *PATH in POOL.
 
    Note: If the caller does not have the write lock on FS, then the path is
-   not guaranteed to remain correct after the function returns, because the
-   revision might become packed just after this call. */
+   not guaranteed to be correct or to remain correct after the function
+   returns, because the revision might become packed before or after this
+   call.  If a file exists at that path, then it is correct; if not, then
+   the caller should call update_min_unpacked_rev() and re-try once. */
 svn_error_t *
 svn_fs_fs__path_rev_absolute(const char **path,
                              svn_fs_t *fs,

