summaryrefslogtreecommitdiff
path: root/sys/compat/linux/linux_file.c
Commit message (Collapse)AuthorAgeFilesLines
* Use the new kern_*() functions to avoid using the stack gap inIan Dowse2002-09-021-69/+33
| | | | | | | linux_fcntl*() and linux_getcwd(). Notes: svn path=/head/; revision=102872
* Use the new kern_* functions to avoid the need to store argumentsIan Dowse2002-09-011-165/+144
| | | | | | | | | | | in the stack gap. This converts most VFS and signal related system calls, as well as select(). Discussed on: -arch Approved by: marcel Notes: svn path=/head/; revision=102814
* In continuation of early fileop credential changes, modify fo_ioctl() toRobert Watson2002-08-171-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | accept an 'active_cred' argument reflecting the credential of the thread initiating the ioctl operation. - Change fo_ioctl() to accept active_cred; change consumers of the fo_ioctl() interface to generally pass active_cred from td->td_ucred. - In fifofs, initialize filetmp.f_cred to ap->a_cred so that the invocations of soo_ioctl() are provided access to the calling f_cred. Pass ap->a_td->td_ucred as the active_cred, but note that this is required because we don't yet distinguish file_cred and active_cred in invoking VOP's. - Update kqueue_ioctl() for its new argument. - Update pipe_ioctl() for its new argument, pass active_cred rather than td_ucred to MAC for authorization. - Update soo_ioctl() for its new argument. - Update vn_ioctl() for its new argument, use active_cred rather than td->td_ucred to authorize VOP_IOCTL() and the associated VOP_GETATTR(). Obtained from: TrustedBSD Project Sponsored by: DARPA, NAI Labs Notes: svn path=/head/; revision=102003
* Fix missing parens in MAC readdir() check. This fix was in the MACRobert Watson2002-08-121-1/+1
| | | | | | | | | | branch, but apparently didn't get moved over when it was made. Obtained from: TrustedBSD Project Sponsored by: DARPA, NAI Labs Notes: svn path=/head/; revision=101706
* Introduce support for Mandatory Access Control and extensibleRobert Watson2002-08-011-0/+9
| | | | | | | | | | | | | | | kernel access control. Invoke appropriate MAC entry points for a number of VFS-related operations in the Linux ABI module. In particular, handle uselib in a manner similar to open() (more work is probably needed here), as well as handle statfs(), and linux readdir()-like calls. Obtained from: TrustedBSD Project Sponsored by: DARPA, NAI Labs Notes: svn path=/head/; revision=101189
* Move the switch statement labels for the explicit 64-bitRobert Drehmel2002-07-091-3/+3
| | | | | | | | | | | command arguments into the correct function, linux_fcntl64(), and thus out of the scope of a compilation for the alpha platform. Requested by: obrien Notes: svn path=/head/; revision=99687
* Enable emulation of the F_GETLK64, F_SETLK64, and F_SETLKW64Robert Drehmel2002-07-091-0/+3
| | | | | | | lock commands arguments to linux_fcntl64(). Notes: svn path=/head/; revision=99670
* Fix typo in the BSD copyright: s/withough/without/Jens Schweikhardt2002-06-021-1/+1
| | | | | | | | Spotted and suggested by: des MFC after: 3 weeks Notes: svn path=/head/; revision=97748
* Simple p_ucred -> td_ucred changes to start using the per-thread ucredJohn Baldwin2002-02-271-1/+1
| | | | | | | reference. Notes: svn path=/head/; revision=91406
* Lock struct pgrp, session and sigio.Seigo Tanimura2002-02-231-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | New locks are: - pgrpsess_lock which locks the whole pgrps and sessions, - pg_mtx which protects the pgrp members, and - s_mtx which protects the session members. Please refer to sys/proc.h for the coverage of these locks. Changes on the pgrp/session interface: - pgfind() needs the pgrpsess_lock held. - The caller of enterpgrp() is responsible to allocate a new pgrp and session. - Call enterthispgrp() in order to enter an existing pgrp. - pgsignal() requires a pgrp lock held. Reviewed by: jhb, alfred Tested on: cvsup.jp.FreeBSD.org (which is a quad-CPU machine running -current) Notes: svn path=/head/; revision=91140
* Replace ffind_* with fget calls.Alfred Perlstein2002-01-141-7/+9
| | | | | | | | | | | Make fget MPsafe. Make fgetvp and fgetsock use the fget subsystem to reduce code bloat. Push giant down in fpathconf(). Notes: svn path=/head/; revision=89319
* Remove unused variable.Alfred Perlstein2002-01-131-1/+0
| | | | Notes: svn path=/head/; revision=89311
* SMP Lock struct file, filedesc and the global file list.Alfred Perlstein2002-01-131-11/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Seigo Tanimura (tanimura) posted the initial delta. I've polished it quite a bit reducing the need for locking and adapting it for KSE. Locks: 1 mutex in each filedesc protects all the fields. protects "struct file" initialization, while a struct file is being changed from &badfileops -> &pipeops or something the filedesc should be locked. 1 mutex in each struct file protects the refcount fields. doesn't protect anything else. the flags used for garbage collection have been moved to f_gcflag which was the FILLER short, this doesn't need locking because the garbage collection is a single threaded container. could likely be made to use a pool mutex. 1 sx lock for the global filelist. struct file * fhold(struct file *fp); /* increments reference count on a file */ struct file * fhold_locked(struct file *fp); /* like fhold but expects file to locked */ struct file * ffind_hold(struct thread *, int fd); /* finds the struct file in thread, adds one reference and returns it unlocked */ struct file * ffind_lock(struct thread *, int fd); /* ffind_hold, but returns file locked */ I still have to smp-safe the fget cruft, I'll get to that asap. Notes: svn path=/head/; revision=89306
* Implement linux_chown and linux_lchown. The fchown syscall mapsMarcel Moolenaar2001-10-161-0/+42
| | | | | | | | | | directly to the native syscall, because no filename handling needs to be done. Tested by: Martin Blapp <mb@imp.ch> Notes: svn path=/head/; revision=85022
* Whitespace fix.John Baldwin2001-09-121-1/+1
| | | | Notes: svn path=/head/; revision=83382
* KSE Milestone 2Julian Elischer2001-09-121-107/+108
| | | | | | | | | | | | | | | | | Note ALL MODULES MUST BE RECOMPILED make the kernel aware that there are smaller units of scheduling than the process. (but only allow one thread per process at this time). This is functionally equivalent to teh previousl -current except that there is a thread associated with each process. Sorry john! (your next MFC will be a doosie!) Reviewed by: peter@freebsd.org, dillon@freebsd.org X-MFC after: ha ha ha ha Notes: svn path=/head/; revision=83366
* Round of cleanups and enhancements. These include (in random order):Marcel Moolenaar2001-09-081-387/+558
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | o Introduce private types for use in linux syscalls for two reasons: 1. establish type independence for ease in porting and, 2. provide a visual queue as to which syscalls have proper prototypes to further cleanup the i386/alpha split. Linuxulator types are prefixed by 'l_'. void and char have not been "virtualized". o Provide dummy functions for all syscalls and remove dummy functions or implementations of truely obsolete syscalls. o Sanitize the shm*, sem* and msg* syscalls. o Make a first attempt to implement the linux_sysctl syscall. At this time it only returns one MIB (KERN_VERSION), but most importantly, it tells us when we need to add additional sysctls :-) o Bump the kenel version up to 2.4.2 (this is not the same as the KERN_VERSION MIB, BTW). o Implement new syscalls, of which most are specific to i386. Our syscall table is now up to date with Linux 2.4.2. Some highlights: - Implement the 32-bit uid_t and gid_t bases syscalls. - Implement a couple of 64-bit file size/offset bases syscalls. o Fix or improve numerous syscalls and prototypes. o Reduce style(9) violations while I'm here. Especially indentation inconsistencies within the same file are addressed. Re-indenting did not obfuscate actual changes to the extend that it could not be combined. NOTE: I spend some time testing these changes and found that if there were regressions, they were not caused by these changes AFAICT. It was observed that installing a RH 7.1 runtime environment did make matters worse. Hangs and/or reboots have been observed with and without these changes, so when it failed to make life better in cases it doesn't look like it made it worse. Notes: svn path=/head/; revision=83221
* Fix linux_getcwd() so that if the cwd isn't cached (__getcwd() fails),Andrew Gallatin2001-08-291-28/+0
| | | | | | | | | | | | | the cwd is looked up inside the kernel. The native getcwd() in libc handles this in userland if __getcwd() fails. Obtained from: NetBSD via OpenBSD Tested by: Chris Casey <chriss@phys.ksu.edu>, Markus Holmberg <markush@acc.umu.se> Reviewed by: Darrell Anderson <anderson@cs.duke.edu> PR: kern/24315 Notes: svn path=/head/; revision=82518
* Undo part of the tangle of having sys/lock.h and sys/mutex.h included inMark Murray2001-05-011-5/+6
| | | | | | | | | | | | | | other "system" header files. Also help the deprecation of lockmgr.h by making it a sub-include of sys/lock.h and removing sys/lockmgr.h form kernel .c files. Sort sys/*.h includes where possible in affected files. OK'ed by: bde (with reservations) Notes: svn path=/head/; revision=76166
* Reviewed by: jlemonAdrian Chadd2001-03-011-16/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | An initial tidyup of the mount() syscall and VFS mount code. This code replaces the earlier work done by jlemon in an attempt to make linux_mount() work. * the guts of the mount work has been moved into vfs_mount(). * move `type', `path' and `flags' from being userland variables into being kernel variables in vfs_mount(). `data' remains a pointer into userspace. * Attempt to verify the `type' and `path' strings passed to vfs_mount() aren't too long. * rework mount() and linux_mount() to take the userland parameters (besides data, as mentioned) and pass kernel variables to vfs_mount(). (linux_mount() already did this, I've just tidied it up a little more.) * remove the copyin*() stuff for `path'. `data' still requires copyin*() since its a pointer into userland. * set `mount->mnt_statf_mntonname' in vfs_mount() rather than in each filesystem. This variable is generally initialised with `path', and each filesystem can override it if they want to. * NOTE: f_mntonname is intiailised with "/" in the case of a root mount. Notes: svn path=/head/; revision=73286
* Allow debugging output to be controlled on a per-syscall granularity.Jonathan Lemon2001-02-161-41/+48
| | | | | | | | | Also clean up debugging output in a slightly more uniform fashion. The default behavior remains the same (all debugging output is turned on) Notes: svn path=/head/; revision=72543
* Add mount syscall to linux emulation. Also improve emulation of reboot.Jonathan Lemon2001-02-161-0/+89
| | | | Notes: svn path=/head/; revision=72538
* Back out proc locking to protect p_ucred for obtaining additionalJohn Baldwin2001-01-271-8/+1
| | | | | | | references along with the actual obtaining of additional references. Notes: svn path=/head/; revision=71699
* Lock access to proc members.John Baldwin2000-12-151-2/+12
| | | | | | | Glanced over by: marcel Notes: svn path=/head/; revision=70061
* Don't auto-generate the syscalls.Marcel Moolenaar2000-12-031-4/+0
| | | | Notes: svn path=/head/; revision=69539
* Fix F_SETOWN on pipes. Linux returns EINVAL while we send a SIGIOMarcel Moolenaar2000-11-131-5/+19
| | | | | | | | | | | signal. There's at least 1 program that is known to break. Submitted patch has been edited to match current code. MFC: yes Submitted by: bde Notes: svn path=/head/; revision=68662
* Revert auto-generation. The Alpha port is broken.Marcel Moolenaar2000-11-101-0/+4
| | | | | | | Syncing with it is wrong. Notes: svn path=/head/; revision=68583
* Sync with Alpha:Marcel Moolenaar2000-11-091-4/+0
| | | | | | | | Do not use sysent.c, proto.h and syscall.h in source tree; use auto-generated versions. Notes: svn path=/head/; revision=68519
* Fix getdents syscall.Marcel Moolenaar2000-11-051-1/+4
| | | | | | | | | | | | | The offset field in struct dirent was set to the offset of the next dirent in rev 1.36. The offset was calculated from the current offset and the record length. This offset does not necessarily match the real offset when we are using cookies. Therefore, also use the cookies to set the offset field in struct dirent if we're using cookies to iterate through the dirents. Notes: svn path=/head/; revision=68347
* The MI/MD split wasn't perfect and the MI files need hacks for theDavid E. O'Brien2000-11-011-3/+15
| | | | | | | | | AlphaLinux compat bits. This will be better cleaned up soon. Agreed to what ever was necessary by: marcel Notes: svn path=/head/; revision=68201
* Update include directives and remove linux_execve.Marcel Moolenaar2000-08-221-23/+3
| | | | Notes: svn path=/head/; revision=64905
* Implement pread and pwrite.Marcel Moolenaar2000-07-171-0/+28
| | | | | | | | PR: 17991 Submitted by: Geoffrey Speicher <geoff@caribbean.sea-incorporated.com> Notes: svn path=/head/; revision=63285
* Simplify the F_GETOWN and F_SETOWN fcntl commands. The workaroundMarcel Moolenaar2000-07-151-49/+7
| | | | | | | | | | | is not needed since the FreeBSD native implementation switched from TIOC{G|S}PGRP to FIO{G|S}ETOWN (kern_descrip.c rev 1.55). PR: 16946 Submitted by: Victor Salaman <salaman@teknos.com> Notes: svn path=/head/; revision=63233
* Implement fdatasync in terms of fsync. The regeneration of proto.h,Marcel Moolenaar1999-11-261-0/+11
| | | | | | | | syscall.h and sysent.h was probably forgotten after the last change syscalls.master. Notes: svn path=/head/; revision=53713
* simplify check for device.Poul-Henning Kamp1999-11-081-1/+1
| | | | Notes: svn path=/head/; revision=53009
* Fix the duplicate filenames that are the result of using getdents.Marcel Moolenaar1999-10-211-1/+1
| | | | | | | | | | | | | | glibc2 defines struct dirent differently than the Linux kernel does. The getdents function therefore needs to read a heuristically defined number of kernel dirents to satisfy the request. In case where too many kernel dirents have been read, the function lseeks on the directory so that a next call will start with the right dirent. The offset used in lseeking is the offset-field in the last dirent passed to the application. This can only mean that the offset-field holds the offset of the next dirent and not the offset of the dirent itself. Notes: svn path=/head/; revision=52421
* This patch clears the way for removing a number of tty relatedPoul-Henning Kamp1999-09-251-4/+5
| | | | | | | | | | | | | | | | | | | | | | | | fields in struct cdevsw: d_stop moved to struct tty. d_reset already unused. d_devtotty linkage now provided by dev_t->si_tty. These fields will be removed from struct cdevsw together with d_params and d_maxio Real Soon Now. The changes in this patch consist of: initialize dev->si_tty in *_open() initialize tty->t_stop remove devtotty functions rename ttpoll to ttypoll a few adjustments to these changes in the generic code a bump of __FreeBSD_version add a couple of FreeBSD tags Notes: svn path=/head/; revision=51654
* This is what was "fdfix2.patch," a fix for fd sharing. It's prettyBrian Feldman1999-09-191-1/+1
| | | | | | | | | | | | | | | | | | | | far-reaching in fd-land, so you'll want to consult the code for changes. The biggest change is that now, you don't use fp->f_ops->fo_foo(fp, bar) but instead fo_foo(fp, bar), which increments and decrements the fp refcount upon entry and exit. Two new calls, fhold() and fdrop(), are provided. Each does what it seems like it should, and if fdrop() brings the refcount to zero, the fd is freed as well. Thanks to peter ("to hell with it, it looks ok to me.") for his review. Thanks to msmith for keeping me from putting locks everywhere :) Reviewed by: peter Notes: svn path=/head/; revision=51418
* Fix getcwd. It must return the length of the path including the terminating 0.Marcel Moolenaar1999-09-171-6/+19
| | | | | | | | | While I'm here, fix style and debug printf. Fix derived from patch by: Darryl Okahata <darrylo@sr.hp.com> Notes: svn path=/head/; revision=51348
* $Id$ -> $FreeBSD$Peter Wemm1999-08-281-1/+1
| | | | Notes: svn path=/head/; revision=50477
* Fix bug in the fcntl syscall where 'arg' was not set properly.Marcel Moolenaar1999-08-151-2/+4
| | | | | | | | PR: 12147 Submitted by: Allan Saddi <asaddi@philosophysw.com> Notes: svn path=/head/; revision=49845
* Implementation of the linux_getcwd syscall.Marcel Moolenaar1999-08-141-1/+16
| | | | Notes: svn path=/head/; revision=49788
* In doing lock type conversion (struct flock), make sure that carbage in resultsMarcel Moolenaar1999-08-131-2/+5
| | | | | | | | | | | in deterministic behaviour. In this case known garbage out. The fix is different than suggested in the PR. PR: 12749 Originator: Boris Nikolaus <boris@cs.tu-berlin.de> Notes: svn path=/head/; revision=49676
* Use a wrapper for the link syscall that does name translations.Marcel Moolenaar1999-08-121-1/+20
| | | | | | | | PR: 12749 Submitted by: Boris Nikolaus <boris@cs.tu-berlin.de> Notes: svn path=/head/; revision=49662
* Use the vn_todev() function, rather than VOP_GETATTRPoul-Henning Kamp1999-07-181-7/+3
| | | | Notes: svn path=/head/; revision=48885
* Divorce "dev_t" from the "major|minor" bitmap, which is now calledPoul-Henning Kamp1999-05-111-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | udev_t in the kernel but still called dev_t in userland. Provide functions to manipulate both types: major() umajor() minor() uminor() makedev() umakedev() dev2udev() udev2dev() For now they're functions, they will become in-line functions after one of the next two steps in this process. Return major/minor/makedev to macro-hood for userland. Register a name in cdevsw[] for the "filedescriptor" driver. In the kernel the udev_t appears in places where we have the major/minor number combination, (ie: a potential device: we may not have the driver nor the device), like in inodes, vattr, cdevsw registration and so on, whereas the dev_t appears where we carry around a reference to a actual device. In the future the cdevsw and the aliased-from vnode will be hung directly from the dev_t, along with up to two softc pointers for the device driver and a few houskeeping bits. This will essentially replace the current "alias" check code (same buck, bigger bang). A little stunt has been provided to try to catch places where the wrong type is being used (dev_t vs udev_t), if you see something not working, #undef DEVT_FASCIST in kern/kern_conf.c and see if it makes a difference. If it does, please try to track it down (many hands make light work) or at least try to reproduce it as simply as possible, and describe how to do that. Without DEVT_FASCIST I belive this patch is a no-op. Stylistic/posixoid comments about the userland view of the <sys/*.h> files welcome now, from userland they now contain the end result. Next planned step: make all dev_t's refer to the same devsw[] which means convert BLK's to CHR's at the perimeter of the vnodes and other places where they enter the game (bootdev, mknod, sysctl). Notes: svn path=/head/; revision=47028
* I got tired of seeing all the cdevsw[major(foo)] all over the place.Poul-Henning Kamp1999-05-081-2/+2
| | | | | | | | | | | Made a new (inline) function devsw(dev_t dev) and substituted it. Changed to the BDEV variant to this format as well: bdevsw(dev_t dev) DEVFS will eventually benefit from this change too. Notes: svn path=/head/; revision=46676
* Fix up a few easy 'assignment used as truth value' and 'suggest parensPeter Wemm1999-05-061-2/+3
| | | | | | | | around && within ||' type warnings. I'm pretty sure I have not masked any problems here, I've committed real problem fixes seperately. Notes: svn path=/head/; revision=46571
* Use truncate() instead of otruncate() - step on the way to stoppingEivind Eklund1999-01-101-3/+3
| | | | | | | the linulator from depending on COMPAT_43. Notes: svn path=/head/; revision=42499
* Make async I/O on a socket work.John Fieber1998-10-051-1/+4
| | | | | | | | Although the current Sybase license does not permit running under emulation, FreeBSD 3.0 is now "Sybase Ready" should the license change. Notes: svn path=/head/; revision=39978