aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell King2015-12-11 06:09:03 -0600
committerGreg Kroah-Hartman2016-03-03 17:06:50 -0600
commitb11202ea8547258205ef1ea15c61c7dd50d65989 (patch)
treea31d305812db2a7eed2b5e5e075a2281b1b7da85
parentc1a968eced547b68eb6a584b4808fb5990c7eaa7 (diff)
downloadkernel-video-b11202ea8547258205ef1ea15c61c7dd50d65989.tar.gz
kernel-video-b11202ea8547258205ef1ea15c61c7dd50d65989.tar.xz
kernel-video-b11202ea8547258205ef1ea15c61c7dd50d65989.zip
scripts: recordmcount: break hardlinks
commit dd39a26538e37f6c6131e829a4a510787e43c783 upstream. recordmcount edits the file in-place, which can cause problems when using ccache in hardlink mode. Arrange for recordmcount to break a hardlinked object. Link: http://lkml.kernel.org/r/E1a7MVT-0000et-62@rmk-PC.arm.linux.org.uk Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> Signed-off-by: Steven Rostedt <rostedt@goodmis.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--scripts/recordmcount.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/scripts/recordmcount.c b/scripts/recordmcount.c
index 9c22317778e..ee625e3a56b 100644
--- a/scripts/recordmcount.c
+++ b/scripts/recordmcount.c
@@ -189,6 +189,20 @@ static void *mmap_file(char const *fname)
189 addr = umalloc(sb.st_size); 189 addr = umalloc(sb.st_size);
190 uread(fd_map, addr, sb.st_size); 190 uread(fd_map, addr, sb.st_size);
191 } 191 }
192 if (sb.st_nlink != 1) {
193 /* file is hard-linked, break the hard link */
194 close(fd_map);
195 if (unlink(fname) < 0) {
196 perror(fname);
197 fail_file();
198 }
199 fd_map = open(fname, O_RDWR | O_CREAT, sb.st_mode);
200 if (fd_map < 0) {
201 perror(fname);
202 fail_file();
203 }
204 uwrite(fd_map, addr, sb.st_size);
205 }
192 return addr; 206 return addr;
193} 207}
194 208