diff --git a/coreutils-mvatomic.patch b/coreutils-mvatomic.patch
new file mode 100644
index 0000000..00c7298
--- /dev/null
+++ b/coreutils-mvatomic.patch
@@ -0,0 +1,103 @@
+ src/copy.c           |    5 +++--
+ tests/mv/Makefile.am |    4 ++--
+ tests/mv/atomic2     |   50 ++++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 55 insertions(+), 4 deletions(-)
+ create mode 100755 tests/mv/atomic2
+
+diff --git a/src/copy.c b/src/copy.c
+index fd31b5c..208a674 100644
+--- a/src/copy.c
++++ b/src/copy.c
+@@ -1339,10 +1339,11 @@ copy_internal (char const *src_name, char const *dst_name,
+	      new_dst = true;
+	    }
+	  else if (! S_ISDIR (dst_sb.st_mode)
++		   /* Never unlink dst_name when in move mode.  */
++		   && ! x->move_mode
+		   && (x->unlink_dest_before_opening
+		       || (x->preserve_links && 1 < dst_sb.st_nlink)
+-		       || (!x->move_mode
+-			   && x->dereference == DEREF_NEVER
++			   || (x->dereference == DEREF_NEVER
+			   && S_ISLNK (src_sb.st_mode))
+		       ))
+	    {
+diff --git a/tests/mv/Makefile.am b/tests/mv/Makefile.am
+index c121911..92ec68e 100644
+--- a/tests/mv/Makefile.am
++++ b/tests/mv/Makefile.am
+@@ -1,7 +1,6 @@
+ # Make coreutils tests for "mv".                       -*-Makefile-*-
+
+-# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+-# Free Software Foundation, Inc.
++# Copyright (C) 1998-2008 Free Software Foundation, Inc.
+
+ # This program is free software: you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+@@ -17,6 +16,7 @@
+ # along with this program.  If not, see .
+
+ TESTS = \
++  atomic2 \
+   sticky-to-xpart \
+   hard-verbose \
+   backup-dir \
+diff --git a/tests/mv/atomic2 b/tests/mv/atomic2
+new file mode 100755
+index 0000000..d1029aa
+--- /dev/null
++++ b/tests/mv/atomic2
+@@ -0,0 +1,50 @@
++#!/bin/sh
++# ensure that mv doesn't first unlink a multi-hard-linked destination
++
++# Copyright (C) 2008 Free Software Foundation, Inc.
++
++# This program is free software: you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation, either version 3 of the License, or
++# (at your option) any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program.  If not, see .
++
++if test "$VERBOSE" = yes; then
++  set -x
++  mv --version
++fi
++
++. $srcdir/../test-lib.sh
++require_strace_
++
++# Before the fix, mv would unnecessarily unlink the destination symlink:
++#   $ rm -f a b b2; touch a b; ln b b2; strace -e unlink /p/bin/mv a b
++#   unlink("b")                             = 0
++#
++# With the fix, it doesn't call unlink:
++#   $ rm -f a b b2; touch a b; ln b b2; strace -e unlink ./mv a b
++#   $
++
++touch a b || framework_failure
++ln b b2 || framework_failure
++
++fail=0
++
++strace -qe unlink mv a b > out 2>&1 || fail=1
++$EGREP 'unlink.*"b"' out && fail=1
++
++# Ensure that the source, "a", is gone.
++ls -dl a > /dev/null 2>&1 && fail=1
++
++# Ensure that the destination, "b", has link count 1.
++n_links=`stat --printf=%h b` || fail=1
++test "$n_links" = 1 || fail=1
++
++(exit $fail); exit $fail
+--
+1.5.5.rc0.7.g57e83
diff --git a/coreutils.spec b/coreutils.spec
index bcc2f0b..3527f6d 100644
--- a/coreutils.spec
+++ b/coreutils.spec
@@ -1,7 +1,7 @@
 Summary: The GNU core utilities: a set of tools commonly used in shell scripts
 Name:    coreutils
 Version: 6.10
-Release: 13%{?dist}
+Release: 14%{?dist}
 License: GPLv3+
 Group:   System Environment/Base
 Url:     http://www.gnu.org/software/coreutils/
@@ -20,6 +20,7 @@ Source203:  coreutils-runuser-l.pamd
 # From upstream
 Patch1: coreutils-6.10-verbose.patch
 Patch2: coreutils-dddoubleclose.patch
+Patch3: coreutils-mvatomic.patch
 
 # Our patches
 Patch100: coreutils-chgrp.patch
@@ -99,6 +100,7 @@ cd %name-%version
 # From upstream
 %patch1 -p1 -b .verbose
 %patch2 -p1 -b .doubleclose
+%patch3 -p1 -b .atomic
 
 # Our patches
 %patch100 -p1 -b .chgrp
@@ -295,6 +297,10 @@ fi
 /sbin/runuser
 
 %changelog
+* Wed Mar 19 2008 Ondrej Vasik  - 6.10-14
+- mv: never unlink a destination file before calling rename
+  (upstream, #438076)
+
 * Mon Mar 17 2008 Ondrej Vasik  - 6.10-13
 - disable echo option separator behavior(added by #431005,
   request for removal #437653 + upstream)