Pass O_LARGEFILE in syscalls/linux/vfs2.openat.
Needed for PipeTest_Flags: files opened by open() and openat() get O_LARGEFILE (on architectures with 64-bit off_t), but not FDs created by other syscalls such as pipe(). Updates #1035 PiperOrigin-RevId: 306504788
This commit is contained in:
parent
ac9b32c36b
commit
52b4b19249
|
@ -172,7 +172,7 @@ func openat(t *kernel.Task, dirfd int32, pathAddr usermem.Addr, flags uint32, mo
|
|||
defer tpop.Release()
|
||||
|
||||
file, err := t.Kernel().VFS().OpenAt(t, t.Credentials(), &tpop.pop, &vfs.OpenOptions{
|
||||
Flags: flags,
|
||||
Flags: flags | linux.O_LARGEFILE,
|
||||
Mode: linux.FileMode(mode & (0777 | linux.S_ISUID | linux.S_ISGID | linux.S_ISVTX) &^ t.FSContext().Umask()),
|
||||
})
|
||||
if err != nil {
|
||||
|
|
|
@ -122,7 +122,7 @@ func (fd *FileDescription) Init(impl FileDescriptionImpl, statusFlags uint32, mn
|
|||
}
|
||||
|
||||
fd.refs = 1
|
||||
fd.statusFlags = statusFlags | linux.O_LARGEFILE
|
||||
fd.statusFlags = statusFlags
|
||||
fd.vd = VirtualDentry{
|
||||
mount: mnt,
|
||||
dentry: d,
|
||||
|
|
|
@ -383,14 +383,11 @@ func (vfs *VirtualFilesystem) BoundEndpointAt(ctx context.Context, creds *auth.C
|
|||
func (vfs *VirtualFilesystem) OpenAt(ctx context.Context, creds *auth.Credentials, pop *PathOperation, opts *OpenOptions) (*FileDescription, error) {
|
||||
// Remove:
|
||||
//
|
||||
// - O_LARGEFILE, which we always report in FileDescription status flags
|
||||
// since only 64-bit architectures are supported at this time.
|
||||
//
|
||||
// - O_CLOEXEC, which affects file descriptors and therefore must be
|
||||
// handled outside of VFS.
|
||||
//
|
||||
// - Unknown flags.
|
||||
opts.Flags &= linux.O_ACCMODE | linux.O_CREAT | linux.O_EXCL | linux.O_NOCTTY | linux.O_TRUNC | linux.O_APPEND | linux.O_NONBLOCK | linux.O_DSYNC | linux.O_ASYNC | linux.O_DIRECT | linux.O_DIRECTORY | linux.O_NOFOLLOW | linux.O_NOATIME | linux.O_SYNC | linux.O_PATH | linux.O_TMPFILE
|
||||
opts.Flags &= linux.O_ACCMODE | linux.O_CREAT | linux.O_EXCL | linux.O_NOCTTY | linux.O_TRUNC | linux.O_APPEND | linux.O_NONBLOCK | linux.O_DSYNC | linux.O_ASYNC | linux.O_DIRECT | linux.O_LARGEFILE | linux.O_DIRECTORY | linux.O_NOFOLLOW | linux.O_NOATIME | linux.O_SYNC | linux.O_PATH | linux.O_TMPFILE
|
||||
// Linux's __O_SYNC (which we call linux.O_SYNC) implies O_DSYNC.
|
||||
if opts.Flags&linux.O_SYNC != 0 {
|
||||
opts.Flags |= linux.O_DSYNC
|
||||
|
|
Loading…
Reference in New Issue