Skip to content

Commit b4d065d

Browse files
committed
sha1_file: stop opening files with O_NOATIME
When we open object files, we try to do so with O_NOATIME. This dates back to 144bde7 (Use O_NOATIME when opening the sha1 files., 2005-04-23), which is an optimization to avoid creating a bunch of dirty inodes when we're accessing many objects. But a few things have changed since then: 1. In June 2005, git learned about packfiles, which means we would do a lot fewer atime updates (rather than one per object access, we'd generally get one per packfile). 2. In late 2006, Linux learned about "relatime", which is generally the default on modern installs. So performance around atimes updates is a non-issue there these days. All the world isn't Linux, but as it turns out, Linux is the only platform to implement O_NOATIME in the first place. So it's very unlikely that this code is helping anybody these days. Helped-by: Jeff King <[email protected]> [jc: took idea and log message from peff] Signed-off-by: Junio C Hamano <[email protected]>
1 parent 1e3001a commit b4d065d

File tree

2 files changed

+1
-22
lines changed

2 files changed

+1
-22
lines changed

cache.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1123,7 +1123,7 @@ extern int hash_sha1_file_literally(const void *buf, unsigned long len, const ch
11231123
extern int pretend_sha1_file(void *, unsigned long, enum object_type, unsigned char *);
11241124
extern int force_object_loose(const unsigned char *sha1, time_t mtime);
11251125
extern int git_open_cloexec(const char *name, int flags);
1126-
extern int git_open(const char *name);
1126+
#define git_open(name) git_open_cloexec(name, O_RDONLY)
11271127
extern void *map_sha1_file(const unsigned char *sha1, unsigned long *size);
11281128
extern int unpack_sha1_header(git_zstream *stream, unsigned char *map, unsigned long mapsize, void *buffer, unsigned long bufsiz);
11291129
extern int parse_sha1_header(const char *hdr, unsigned long *sizep);

sha1_file.c

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,6 @@
2727
#include "list.h"
2828
#include "mergesort.h"
2929

30-
#ifndef O_NOATIME
31-
#if defined(__linux__) && (defined(__i386__) || defined(__PPC__))
32-
#define O_NOATIME 01000000
33-
#else
34-
#define O_NOATIME 0
35-
#endif
36-
#endif
37-
3830
#define SZ_FMT PRIuMAX
3931
static inline uintmax_t sz_fmt(size_t s) { return s; }
4032

@@ -1586,19 +1578,6 @@ int git_open_cloexec(const char *name, int flags)
15861578
return fd;
15871579
}
15881580

1589-
int git_open(const char *name)
1590-
{
1591-
static int noatime = O_NOATIME;
1592-
int fd = git_open_cloexec(name, O_RDONLY);
1593-
1594-
if (0 <= fd && (noatime & O_NOATIME)) {
1595-
int flags = fcntl(fd, F_GETFL);
1596-
if (fcntl(fd, F_SETFL, flags | noatime))
1597-
noatime = 0;
1598-
}
1599-
return fd;
1600-
}
1601-
16021581
static int stat_sha1_file(const unsigned char *sha1, struct stat *st)
16031582
{
16041583
struct alternate_object_database *alt;

0 commit comments

Comments
 (0)