code: public void pushWriteLockedEdge(Inode inode, String childName) {
      Preconditions.checkState(!endsInInode());
      Preconditions.checkState(mLockMode == LockMode.WRITE);
  
      if (mEntries.isEmpty()) {
        // Cannot modify the base lock list, and the new inode is already implicitly locked.
        return;
      }
  
      int edgeIndex = mEntries.size() - 1;
      lockInodeInternal(inode, LockMode.READ);
      lockEdgeInternal(childName, LockMode.WRITE);
      downgradeEdge(edgeIndex);
    }
docs: Leapfrogs the edge write lock forward, reducing the lock list's write-locked scope.
  
  For example, if the lock list is in write mode with entries [a, a->b, b, b->c],
  pushWriteLockedEdge(c, d) will change the list to [a, a->b, b, b->c, c, c->d]. The c->d edge
  will be write locked instead of the b->c edge. At least a read lock on b->c will be maintained
  throughout the process so that other threads cannot interfere with creates, deletes, or
  renames.
  
  For composite lock lists, this method will do nothing if the base lock is is write locked.
  
  @param inode the inode to add to the lock list
  @param childName the child name for the edge to add to the lock list