aboutsummaryrefslogtreecommitdiff
path: root/libdiskfs
Commit message (Collapse)AuthorAgeFilesLines
...
* Catch LFS64 inconsistencies in RPC server stubsSamuel Thibault2019-07-271-0/+44
| | | | | | | | | | | | | * libdiskfs/diskfs.h (protid_t): New type (diskfs_S_io_write, diskfs_S_io_read, diskfs_S_io_seek, diskfs_S_io_stat, diskfs_S_file_set_size, diskfs_S_file_get_storage_info, diskfs_S_file_statfs): New prototypes. * libnetfs/netfs.h (netfs_S_io_write, netfs_S_io_read, netfs_S_io_seek, netfs_S_io_stat, netfs_S_file_set_size, netfs_S_file_get_storage_info, netfs_S_file_statfs): New prototypes. * libtrivfs/trivfs.h (trivfs_S_io_write, trivfs_S_io_read, trivfs_S_io_seek, trivfs_S_io_stat, trivfs_S_file_set_size, trivfs_S_file_get_storage_info, trivfs_S_file_statfs): New prototypes.
* Fix missing gnu_dev_* prototypesSamuel Thibault2019-07-271-0/+1
| | | | | | | | | | | | * isofs/rr.c: Include <sys/sysmacros.h>. * libdiskfs/file-set-trans.c: Likewise. * libfshelp/fetch-root.c: Likewise. * libnetfs/file-get-translator.c: Likewise. * libnetfs/file-set-translator.c: Likewise. * nfs/nfs.c: Likewise. * nfs/ops.c: Likewise. * storeio/storeio.c: Likewise. * trans/fakeroot.c: Likewise.
* diskfs.h: Expose 64bit typesSamuel Thibault2019-07-271-3/+3
| | | | | | | | | | | | | | | We build hurd with LFS64, so we should always expose LFS64 types, so callers do not have to build with -D_FILE_OFFSET_BITS=64. * libdiskfs/diskfs.h (struct peropen): Make `filepointer' field type `loff_t' instead of `off_t'. (diskfs_cached_ifind): Make `inum' parameter `ino64_t' instead of `ino_t'. (diskfs_cached_lookup_context): Likewise. * hurd/shared.h (strcut shared_io): Make `read_size', `prenotify_size', `postnotify_size', `readnotify_size', `rd_file_pointer', `wr_file_pointer', `xx_file_pointer', `file_size' fields type `loff_t' instead of `off_t'.
* diskfs: Fix rename_dir(excl=1) for source directoriesSamuel Thibault2019-04-283-5/+12
| | | | | | | | | | | | | | | | | | | | Starting from coreutils 8.30 which uses renameat2(flag=RENAME_NOREPLACE), we need to have excl=1 to behave correctly, notably in this case: $ mkdir a $ mkdir b $ touch b/t $ mv b a diskfs_rename("b", "a", excl=1) called by mv shall return EEXIST. * libdiskfs/diskfs.h (diskfs_rename_dir): Add `excl' parameter. * doc/hurd.texi (diskfs_rename_dir): Document `excl' parameter. * libdiskfs/dir-renamed.c (diskfs_rename_dir): Add `excl' parameter. Return EEXIST when target exists and `excl' is not 0. * libdiskfs/dir-rename.c (diskfs_S_dir_rename): Pass `excl' to diskfs_rename_dir.
* hurd: fix error on opening symlink with O_NOFOLLOW|O_WRITESamuel Thibault2019-01-051-2/+4
| | | | | | | POSIX requires ELOOP in that case. * libdiskfs/dir-lookup.c (diskfs_S_dir_lookup): Return ELOOP instead of EACCES when the result is a symlink and O_WRITE|O_EXEC was requested
* Hurd patches (fix compilation)Luca Weiss2018-06-131-2/+2
| | | | | | | | | | | | | | | | | | * isofs/rr.c (rrip_work): Use gnu_dev_makedev instead of makedev. * libdiskfs/file-set-trans.c (diskfs_S_file_set_translator): Likewise. * libnetfs/file-set-translator.c (netfs_S_file_set_translator): Likeiwse. * nfs/nfs.c (xdr_decode_fattr): Likewise. * storeio/storeio.c (parse_opt): Likewise. * libfshelp/fetch-root.c (fshelp_short_circuited_callback1): Use gnu_dev_major and gnu_dev_minor instead of major and minor. * libnetfs/file-get-translator.c (netfs_S_file_get_translator): Likewise. * nfs/ops.c (netfs_attempt_link): Likewise. * storeio/storeio.c (trivfs_append_args): Likewise. * trans/fakeroot.c (netfs_attempt_mkdev): Likewise. * pfinet/glue-include/linux/mm.h: Include <mach/vm_param.h>. * term/users.c: Include <signal.h>
* Add file_utimens RPC to use a struct timespecFlávio Cruz2018-03-051-6/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | and update the servers to use UTIME_NOW and UTIME_OMIT. * console-client/trans.c (netfs_attempt_utimes): Do not set current time ourself. * console/console.c (netfs_attempt_utimes): Likewise. * ftpfs/netfs.c (netfs_attempt_utimes): Likewise. * hostmux/node.c (netfs_attempt_utimes): Likewise. * usermux/node.c (netfs_attempt_utimes): Likewise. * nfs/ops.c (netfs_attempt_utimes): Likewise. * doc/hurd.texi (file_utimens): Add documentation. * hurd/fs.defs (file_utimens): Add RPC. * libdiskfs/file-utimes.c (diskfs_S_file_utimes): Move implementation and replace with translation layer with... (diskfs_S_file_utimens): ... new function. * libnetfs/file-utimes.c (netfs_S_file_utimes): Likewise with... (netfs_S_file_utimens): ... new function. * libnetfs/init-init.c: Include <error.h>. (netfs_mtime): New variable. (netfs_init): New function. * libnetfs/netfs.h (netfs_attempt_utimes): Update documentation. * libnetfs/priv.h (netfs_mtime): Declare variable. * libtreefs/s-file.c (treefs_S_file_utimes): Convert time values and call treefs_s_file_utimens instead of treefs_s_file_utimes. * libtreefs/treefs-hooks.h: Replace TREEFS_HOOK_S_FILE_UTIMES with TREEFS_HOOK_S_FILE_UTIMENS. * libtreefs/treefs-s-hooks.h: Replace s_file_utimes with s_file_utimens. * libtrivfs/file-utimes.c (trivfs_S_file_utimens): New function. * libtrivfs/times.c (trivfs_set_atime): Try to use file_utimens before using file_utimes. (trivfs_set_mtime): Likewise. * nfsd/ops.c (complete_setattr): Likewise. * trans/fakeroot.c (netfs_attempt_utimes): Likewise. * nfs/nfs.c (xdr_encode_sattr_times): Do not set atime or mtime when they are NULL. * configure.ac: Look for file_futimens, and define UTIME_NOW/OMIT, for compatibility with old glibcs.
* Fix warningsSamuel Thibault2018-03-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * libdiskfs/boot-start.c (diskfs_start_bootstrap): Fix printf format. * libfshelp/delegate.c: Include <alloca.h> and <stdlib.h>. * libfshelp/start-translator-long.c: Include <stdlib.h>. * libshouldbeinlibc/ugids-verify-auth.c (server_verify_make_auth): Fix prototypes for password_check_group and password_check_user. * libstore/argp.c: Include <stdlib.h>. * libstore/task.c: Include <stdlib.h>. * exec/exec.c: Include <mach/vm_param.h>. * libbpf/bpf_impl.c: Include <stdlib.h>. * proc/info.c (S_proc_getloginpids): Remove local variables leader_task and leader_sub. * proc/main.c (main): Remove local variable original_argv. * boot/boot.c (task_died, S_mach_notify_new_task): Fix printf format. * exec/elfcore.c: Include <alloca.h> and <mach/vm_param.h>. * trans/crash.c: Include <hurd/msg.h>. * trans/random.c: Include <signal.h>. * utils/login.c: Include <signal.h>. * utils/id.c: Include <hurd/msg.h>. * utils/devprobe.c: Include <stdlib.h>. * utils/addauth.c: Include <hurd/msg.h>. * utils/frobauth-mod.c: Include <hurd/msg.h>. * utils/storeread.c: Include <stdlib.h>. * utils/msgport.c: Include <hurd/msg.h>. * sutils/clookup.c (file_name_lookup_carefully): Fix lookup function prototype, make head and tail const. * utils/rpcscan.c: Include <stdlib.h>. * sutils/bless.c: Include <stdlib.h>. * fstests/fstests.c: Include <stdlib.h>. * startup/startup.c (argz_task_insert_right): Fix printf format. * init/init.c: Include <stdlib.h>.
* Revert "libdiskfs: Shutdown pagers on startup_dosync."Samuel Thibault2018-01-151-1/+33
| | | | | | | | | | | This reverts commit 89a49ec8b3a847f3b770cff6a4a80b98b94ad7bf. There was a typo in diskfs_shutdown (FSYS_GOAWAY_FORCE || FSYS_GOAWAY_RECURSE) which was making it FSYS_GOAWAY_NOWAIT, and thus not actually syncing if there happens to be clients (it was then returning EBUSY). Fixing this into FSYS_GOAWAY_FORCE | FSYS_GOAWAY_RECURSE then makes it wait for clients (and NOWAIT is not supported), and there are very often some left, thus not syncing either.
* Add a file_exec_file_name RPCEmilio Pozuelo Monfort2018-01-082-14/+67
| | | | | | | | | | | | | | | | | | | | | | * hurd/fs.defs (file_exec): Deprecate in favor of... (file_exec_paths): ...this new RPC. * TODO: Update. * doc/hurd.texi: Update RPC name. * hurd/hurd_types.h: Update RPC name. * libdiskfs/boot-start.c: Update RPC name. * configure.ac: Check for presence of RPC stubs file_exec_paths exec_exec_paths. * exec/hashexec.c (check_hashbang): When file_exec_paths is available, use it instead of file_exec. * startup/startup.c (run, run_for_real, start_child): Likewise. * utils/login.c (main): Likewise. * libfshelp/start-translator-long.c (fshelp_start_translator_long): Likewise. * libdiskfs/file-exec.c (diskfs_S_file_exec): Move code to new function diskfs_S_file_exec_paths and call it. (diskfs_S_file_exec_paths): New function, use exec_exec_paths when available instead of exec_exec * libnetfs/file-exec.c (netfs_S_file_exec, netfs_S_file_exec_paths): Likewise. * trans/fakeroot.c (netfs_S_file_exec, netfs_S_file_exec_paths): Likewise. * libtrivfs/file-exec.c (trivfs_S_file_exec_paths): New function.
* libdiskfs: Improve error message.Justus Winter2017-09-251-1/+1
| | | | | * libdiskfs/init-main.c (diskfs_init_main): Use name of the function that failed as error message.
* libdiskfs: Shutdown pagers on startup_dosync.Justus Winter2017-09-121-33/+1
| | | | | | | | | * libdiskfs/init-startup.c (diskfs_S_startup_dosync): Simplify the code by just using 'diskfs_shutdown' with the force flag. This also shuts down pagers, which potentially affects other tasks, but getting rid of the pagers allows us to commit a clean and consistent state to the disk before shutting down. Crashing other tasks just before the system powers down seems like a small price to pay.
* Traverse translator hierarchies using the fsys protocol.Justus Winter2017-09-124-109/+89
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, we used the fs protocol to traverse the translator hierarchies. This, however, is conceptually flawed, because translators are bound to nodes, and a node can have zero or more links in the file system. Therefore, the previous method of returning a list of paths to the client and expecting them to be able to follow these to reach the child translators was always unreliable. Fix this by using the fsys protocol to traverse the hierarchy, and returning the control ports of all children. This is more robust, and also conceptually cleaner, because the fsys protocol is about translator linkage, hence this is the point to implement traversal. Also move the get source routine over. A per-node source really does not fit the reality of most translators, while a per-translator source makes sense in many cases. * hurd/fs.defs (file_get_children): Drop routine. (file_get_source): Likewise. * hurd/fsys.defs (fsys_get_children): New routine. (fsys_get_source): Likewise. * libdiskfs/Makefile (FSYSSRCS): Remove files, add files. * libdiskfs/file-get-children.c: Remove file. * libdiskfs/fsys-get-children.c: New file. * libdiskfs/file-get-source.c: Remove file. * libdiskfs/fsys-get-source.c: New file. * libfshelp/fshelp.h (fshelp_filter): Remove type. (fshelp_get_active_translators): Remove filter and prefix argument, return list of control ports. * libfshelp/translator-list.c (fshelp_get_active_translators): Likewise. * libnetfs/Makefile (FSSRCS): Move 'get-source.c' too OTHERSRCS. (FSYSSRCS): Remove files, add files. * libnetfs/file-get-children.c: Remove file. * libnetfs/fsys-get-children.c: New file. * libnetfs/file-get-source.c: Remove file. * libnetfs/fsys-get-source.c: New file. * libtrivfs/Makefile: Move 'get-source.c' too OTHERSRCS. (FSYSSRCS): Remove files, add files. * libtrivfs/file-get-children.c: Remove file. * libtrivfs/fsys-get-children.c: New file. * libtrivfs/file-get-source.c: Remove file. * libtrivfs/fsys-get-source.c: Add file. * trans/Makefile (mtab): Build client stubs until the libc has caught on. * trans/mtab.c (target_control): New variable. (insecure): Drop variable. (all_translators): Likewise. (MAX_DEPTH): New macro. (max_depth): New variable. (options): Remove '--insecure' and '--all-translators', add '--depth'. (parse_opt): Adapt accordingly. (trivsfs_append_args): Likewise. (main): Get the control port of the target translator, then drop privileges. (is_filesystem_translator): Remove function. (mtab_mark_as_seen): Simplify. Just check if the control port is known. (mtab_populate): Limit depth of recursion, adapt to traversing over the control ports, simplify. (open_hook): Remove scary comment, it is not applicable anymore because we no longer dir_lookup child translators.
* libfshelp: Use node instead of name as key.Justus Winter2017-09-122-2/+2
| | | | | | | | | | | | | | | | | | | | | | Previously, libfshelp used the name of an translator as key in the hash table. This however is flawed, because a translator is bound to a node, and a node can have zero or more links in the file system. Use the nodes address (or rather, the address of the transbox embedded in the node) as key instead. * libfshelp/fshelp.h (fshelp_set_active_translator): Instead of the control port, hand the whole transbox to the function. * libfshelp/translator-list.c (struct translator): New field 'locp'. (hash): Hash pointer. (compare): Compare pointer. (translator_ihash): Use an location pointer. (fshelp_set_active_translator): Use the address of the transbox as key. (fshelp_remove_active_translator): Remove using the location pointer. * libdiskfs/dir-lookup.c (diskfs_S_dir_lookup): Fix callsite. * libdiskfs/file-set-trans.c (diskfs_S_file_set_translator): Likewise. * libnetfs/dir-lookup.c (netfs_S_dir_lookup): Likewise. * libnetfs/file-set-translator.c (netfs_S_file_set_translator): Likewise.
* Normalize path of translators.Justus Winter2017-09-121-1/+7
| | | | | | * libdiskfs/dir-lookup.c (diskfs_S_dir_lookup): Strip trailing slashes. * libnetfs/dir-lookup.c (netfs_S_dir_lookup): Likewise.
* libfshelp: Add function to map over all active translators.Justus Winter2017-09-124-83/+74
| | | | | | | | | | | | | | * libdiskfs/file-syncfs.c (diskfs_S_file_syncfs): Use the new function. * libdiskfs/fsys-options.c (diskfs_S_fsys_set_options): Likewise. * libdiskfs/fsys-syncfs.c (diskfs_S_fsys_syncfs): Likewise. * libdiskfs/shutdown.c (diskfs_shutdown): Likewise. * libfshelp/fshelp.h (fshelp_map_active_translators): New declaration. * libfshelp/translator-list.c (fshelp_map_active_translators): New function. * libnetfs/file-syncfs.c (netfs_S_file_syncfs): Use the new function. * libnetfs/fsys-set-options.c (netfs_S_fsys_set_options): Likewise. * libnetfs/fsys-syncfs.c (netfs_S_fsys_syncfs): Likewise. * libnetfs/shutdown.c (netfs_shutdown): Likewise.
* Fix active translator registration.Justus Winter2017-09-121-36/+30
| | | | | | | * libdiskfs/dir-lookup.c (diskfs_S_dir_lookup): Unconditionally register translators. Previously, we missed translators because 'transbox.active' is not in fact reset if the translator dies. * libnetfs/dir-lookup.c (netfs_S_dir_lookup): Likewise.
* Remove unused parameter from the 'get_source' machinery.Justus Winter2017-09-013-7/+7
| | | | | | | | | | | | | | | | | | | | | * libdiskfs/diskfs.h (diskfs_get_source): Remove first parameter. * libdiskfs/file-get-source.c (diskfs_S_file_get_source): Adapt callsite. * libdiskfs/get-source.c (diskfs_get_source): Adapt default implementation. * libnetfs/netfs.h (netfs_get_source): Remove first parameter. * libnetfs/file-get-source.c (netfs_S_file_get_source): Adapt callsite. * libnetfs/get-source.c (netfs_get_source): Adapt default implementation. * libtrivfs/trivfs.h (trivfs_get_source): Remove first parameter. * libtrivfs/file-get-source.c (trivfs_S_file_get_source): Adapt callsite. * libtrivfs/get-source.c (trivfs_get_source): Adapt default implementation. * nfs/main.c (netfs_get_source): Adapt implementation. * procfs/main.c (netfs_get_source): Likewise. * trans/firmlink.c (trivfs_get_source): Likewise.
* libdiskfs: Simplify type checks.Justus Winter2017-08-246-19/+13
| | | | | | | | | * libdiskfs/diskfs.h (diskfs_begin_using_control_port): Check port class. * libdiskfs/fsys-getfile.c (diskfs_S_fsys_getfile): Drop check. * libdiskfs/fsys-getroot.c (diskfs_S_fsys_getroot): Likewise. * libdiskfs/fsys-goaway.c (diskfs_S_fsys_goaway): Likewise. * libdiskfs/fsys-options.c (diskfs_S_fsys_{s,g}et_options): Likewise. * libdiskfs/fsys-syncfs.c (diskfs_S_fsys_syncfs): Likewise.
* libdiskfs: Use control class for the singleton 'bootinfo'.Justus Winter2017-08-243-10/+8
| | | | | | | | | | | | * libdiskfs/boot-start.c (bootinfo): New variable. (diskfs_start_bootstrap): Create 'bootinfo' as an instance of 'diskfs_control_class'. (diskfs_S_fsys_getpriv): Only allow operation on 'bootinfo'. (diskfs_S_fsys_init): Allow operation on any control object, but only once. * libdiskfs/diskfs.h (diskfs_initboot_class): Drop declaration. * libdiskfs/init-init.c (diskfs_initboot_class): Drop variable. (diskfs_init_diskfs): Adapt.
* libdiskfs: Make mapping the time device more robust.Justus Winter2017-08-061-5/+7
| | | | | * libdiskfs/init-init.c (diskfs_init_diskfs): First try /dev/time, then fall back to the Mach device.
* Use our own variant of 'assert' and 'assert_perror'.Justus Winter2017-08-0526-109/+109
| | | | | Our variants print stack traces on failures. This will make locating errors much easier.
* Pass the kernel's task port to proc.Justus Winter2017-03-122-10/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, the early server bootstrap relied upon a specific task layout to determine the kernels task port. Explicitly pass it from the kernel instead. * boot/boot.c (default_boot_script): Add '--kernel-task' parameter to ext2fs. (main): New bootscript variable 'kernel-task'. * libdiskfs/boot-start.c (diskfs_kernel_task): Declaration variable. (diskfs_start_bootstrap): If '--kernel-task' was given to us, pass it along to startup. * libdiskfs/opts-std-startup.c (diskfs_kernel_task): New variable. (startup_options): Add '--kernel-task' option. (parse_startup_opt): Handle option. * proc/main.c (kernel_task): New variable. (OPT_KERNEL_TASK): New macro. (options): New variable. (parse_opt): New function. (main): Parse options. Use 'kernel_task' if provided. * release/servers.boot: Add '--kernel-task' parameter to ext2fs. * startup/startup.c (OPT_KERNEL_TASK): New macro. (options): Add '--kernel-task' option. (kernel_task): New variable. (insert_ports_fnc_t): New declaration. (run): Add argument for a function that inserts rights into the newly created task and adds arguments to the argument vector. (argz_task_insert_right): New function. (proc_insert_ports): Likewise. (parse_opt): New function. (main): Pass the kernel's task port to proc. (frob_kernel_process): Use the kernel's task port.
* libdiskfs: Factorize code for last hard reference being releasedSamuel Thibault2016-10-315-46/+57
| | | | | | | | * libdiskfs/node-lastref.c: New file * libdiskfs/Makefile (OTHERSRCS): Add node-lastref.c * libdiskfs/libdiskfs/node-nput.c (diskfs_nput): Replace last hard reference code with a call to _diskfs_lastref. * libdiskfs/node-nrele.c (diskfs_nrele): Likewise.
* libdiskfs: fix removal of socket nodesSamuel Thibault2016-10-311-0/+6
| | | | | | | | Follow-up on 5ab5d98fa515cd19a64e8d5868fcbae85eec9dc5 ('libdiskfs: fix removal of socket nodes'), for diskfs_nrele. * libdiskfs/node-nrele.c (diskfs_nrele): Deallocate right to socket address when cleaning light references.
* Mark library stubs as weakSamuel Thibault2016-10-301-4/+4
| | | | | | | | | | | | | | | | | | | | | So that static linking of e.g. console.static can work. * libdiskfs/io-stubs.c (diskfs_S_io_readsleep, diskfs_S_io_eofnotify, diskfs_S_io_postnotify, diskfs_S_io_readnotify): Mark weak. * libnetfs/fsstubs.c (netfs_S_file_notice_changes, netfs_S_file_getfh, netfs_S_ifsock_getsockaddr): Likewise. * libnetfs/fsysstubs.c (netfs_S_fsys_getfile: netfs_S_fsys_getpriv, netfs_S_fsys_init, netfs_S_fsys_forward, netfs_S_fsys_startup): Likewise. * libpager/stubs.c (_pager_S_memory_object_copy, _pager_S_memory_object_data_write, _pager_S_memory_object_supply_completed): Likewise. * libtrivfs/fsys-stubs.c (trivfs_S_fsys_startup, trivfs_S_fsys_getpriv, trivfs_S_fsys_init, trivfs_S_fsys_getfile): Likewise. * libtrivfs/io-stubs.c (trivfs_S_io_map_cntl, trivfs_S_io_get_conch, trivfs_S_io_release_conch, trivfs_S_io_eofnotify, trivfs_S_io_prenotify, trivfs_S_io_postnotify, trivfs_S_io_readsleep, trivfs_S_io_sigio, trivfs_S_io_readnotify): Likewise.
* libdiskfs: Make utimes RPC flush pending timestamp updatesSamuel Thibault2016-10-271-0/+3
| | | | | | | Thanks Kalle Olavi Niemitalo for the notice. * libdiskfs/file-utimes.c (diskfs_S_file_utimes): Call diskfs_set_node_times before setting node timestamps.
* libdiskfs: Fix timestamp update on file closeSamuel Thibault2016-10-271-0/+4
| | | | | * libdiskfs/node-nrele.c (diskfs_nrele): Call diskfs_set_node_times when there are no hard refs any more, like diskfs_nput does.
* libdiskfs: Fix short-circuiting translators.Justus Winter2016-10-031-1/+14
| | | | | | | | | * libdiskfs/file-set-trans.c (diskfs_S_file_set_translator): When setting a short-circuited translator, clear the translator record first. Improve error handling. This notably fixes a crash in ext2fs when setting a symlink on a node with an existing translator record.
* Fix message about not being able to request shutdown notificationSamuel Thibault2016-08-301-1/+1
| | | | | | | | It is just a warning, not a fatal error. * libdiskfs/init-startup.c (_diskfs_init_completed): Prefix warning about requesting shutdown nofication with "warning:". * random/random.c (main): Likewise.
* libdiskfs: fix error handlingJustus Winter2016-05-221-1/+1
| | | | * libdiskfs/dir-rmdir.c (diskfs_S_dir_rmdir): Initialize 'np'.
* Avoid superfluous locking of nodeJustus Winter2016-05-191-2/+0
| | | | | | * libdiskfs/io-restrict-auth.c (diskfs_S_io_restrict_auth): Do not lock the associated node. No operation here needs synchronization. * libnetfs/io-restrict-auth.c (netfs_S_io_restrict_auth): Likewise.
* Unify the short-circuit translator logicJustus Winter2016-05-193-50/+28
| | | | | | | | | | | | | | | * libdiskfs/dir-lookup.c (short_circuited_callback1): Move function to libfshelp. (diskfs_S_dir_lookup): Use the function from libfshelp instead. * libdiskfs/fsys-getroot.c (diskfs_S_fsys_getroot): Adapt accordingly. * libdiskfs/trans-callback.c (_diskfs_translator_callback2_fn): Likewise. * libfshelp/fetch-root.c (fshelp_short_circuited_callback1): New function. * libfshelp/fshelp.h (struct fshelp_stat_cookie): New definition. (fshelp_short_circuited_callback1): New prototype. * libnetfs/dir-lookup.c (short_circuited_callback1): Drop function. (netfs_S_dir_lookup): Use the function from libfshelp instead. * libnetfs/fsys-getroot.c (netfs_S_fsys_getroot): Adapt accordingly. * libnetfs/trans-callback.c (_netfs_translator_callback2_fn): Likewise.
* libdiskfs: cosmetic changesJustus Winter2016-05-191-56/+57
| | | | | | | | * libdiskfs/dir-lookup.c (diskfs_S_dir_lookup): Rename identifiers to be more idiomatic and closer to libnetfs and the interface specification. Massage the code so that it aligns closer with the dir_lookup server function in libnetfs. It should not change the behavior.
* libdiskfs: Reject LFS seeks and read/writesSamuel Thibault2016-04-262-1/+14
| | | | | | | | | | vm_offset_t (used by pager_memcpy) is not 64bit-ready yet. Reject requests which go further than this. * libdiskfs/io-seek.c (diskfs_S_io_seek): Return EFBIG when requested offset is beyond limits of vm_offset_t. * libdiskfs/rdwr-internal.c (_diskfs_rdwr_internal): Return EFBIG when request goes beyond limits of vm_offset_t.
* libdiskfs: improve error handlingJustus Winter2016-04-261-1/+2
| | | | | * libdiskfs/boot-start.c (diskfs_start_bootstrap): Improve error handling.
* Fix mustbedir mechanism for symlinksSamuel Thibault2016-02-281-8/+9
| | | | | | | | | | | * libdiskfs/dir-lookup.c (diskfs_S_dir_lookup): When following a symlink, if mustbedir is true, always append a slash to the symlink target, not only when the target is absolute. Reset mustbedir to 0 before continuing the lookup loop. * libnetfs/dir-lookup.c (netfs_S_dir_lookup): When following a symlink, if mustbedir is true, append a slash to the symlink target. Reset mustbedir to 0 before continuing the lookup loop. * libtreefs/dir-lookup.c (_treefs_s_dir_lookup): Likewise.
* libdiskfs: fix and improve locking in nrefs/nput.Flavio Cruz2016-02-152-3/+6
| | | | | | * libnetfs/node-nput.c: Do not unlock the node since it will be unlocked later. * libnetfs/node-nrele.c: Do not lock the node twice if not needed.
* Fix O_DIRECTORY lookup on trivial translatorsFlavio Cruz2016-01-131-6/+15
| | | | | | | * libdiskfs/dir-lookup.c (diskfs_S_dir_lookup): If mustbedir, make sure entry is a directory by retrying "/", or starting the translator and retrying "/". * libnetfs/dir-lookup.c (netfs_S_dir_lookup): Likewise.
* fix compiler warnings in hurd/libdiskfsFlavio Cruz2015-12-292-3/+3
|
* libdiskfs: use ihash for the node cacheJustus Winter2015-12-013-59/+55
| | | | | | | | | | | | | | | | Replace the hand-written hash table in the node cache with libihash. Libihash is a self-tuning hash table, whereas the previous code used a fixed number of buckets. * libdiskfs/Makefile (HURDLIBS): Link to `ihash'. * libdiskfs/diskfs.h (struct node): Remove bucket list, add slot pointer. * libdiskfs/node-cache.c (nodecache): New ihash table replacing the old `nodehash'. (lookup): Drop function. (diskfs_cached_lookup_context): Adapt accordingly. (diskfs_cached_ifind): Likewise. (diskfs_try_dropping_softrefs): Likewise. (diskfs_node_iterate): Likewise.
* libihash: provide a general purpose hash algorithmJustus Winter2015-11-291-86/+3
| | | | | | | * libdiskfs/name-cache.c: Move the Murmur3 algorithm... * libihash/murmur3.c: ... here, and properly attribute the code. * libihash/ihash.h (hurd_ihash_hash32): New prototype. * libihash/Makefile (SRCS): Add new file.
* libdiskfs: fflush stdout when pausingJustus Winter2015-10-051-0/+1
| | | | | * libdiskfs/boot-start.c (diskfs_start_bootstrap): fflush stdout when pausing for /hurd/startup.
* libdiskfs: fflush stdout when pausingJustus Winter2015-09-271-0/+1
| | | | * libdiskfs/boot-start.c (start_execserver): fflush stdout when pausing.
* libdiskfs: improve error handlingJustus Winter2015-09-271-3/+6
| | | | * libdiskfs/boot-start.c (start_execserver): Improve error handling.
* Fix race condition in ext2fs when remountingJames Clarke2015-09-062-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On some systems, ext2fs.static would regularly hang at startup, as a race condition meant it would process paging requests while remounting. To fix this, libpager has been altered to allow inhibiting and resuming its worker threads, and ext2fs uses this to inhibit paging while remounting. * console/pager.c (pager_requests): New variable. (user_pager_init): Updated call to pager_start_workers to use new pager_requests variable. * daemons/runsystem.sh: Removed artificial delay working around the race condition. * ext2fs/ext2fs.c (diskfs_reload_global_state): Call new inhibit_ext2_pager and resume_ext2_pager functions, and leave sblock as non-NULL so it will be munmapped. * ext2fs/ext2fs.h (inhibit_ext2_pager,resume_ext2_pager): New functions. * ext2fs/pager.c (file_pager_requests): New variable. (create_disk_pager): Updated call to pager_start_workers to use new file_pager_requests variable. (inhibit_ext2_pager,resume_ext2_pager): New functions. * fatfs/fatfs.h (inhibit_fat_pager,resume_fat_pager): New functions. * fatfs/pager.c (file_pager_requests): New variable. (create_fat_pager): Updated call to pager_start_workers to use new file_pager_requests variable. (inhibit_fat_pager,resume_fat_pager): New functions. * libdiskfs/disk-pager.c (diskfs_disk_pager_requests): New variable. (diskfs_start_disk_pager): Updated call to pager_start_workers to use new diskfs_disk_pager_requests variable. * libdiskfs/diskfs-pager.h (diskfs_disk_pager_requests): New variable. * libpager/demuxer.c (struct pager_requests): Renamed struct requests to struct pager_requests. Replaced queue with queue_in and queue_out pointers. Added inhibit_wakeup field. (pager_demuxer): Updated to use new queue_in/queue_out pointers. Only wake up workers if not inhibited. (worker_func): Updated to use new queue_in/queue_out pointers. Final worker thread to sleep notifies the inhibit_wakeup condition variable. (pager_start_workers): Added out parameter for the requests instance. Allocate heap space shared by both queues. Initialise new inhibit_wakeup condition. (pager_inhibit_workers,pager_resume_workers): New functions. * libpager/pager.h (struct pager_requests): Public forward definition. (pager_start_workers): Added out parameter for the requests instance. (pager_inhibit_workers,pager_resume_workers): New functions. * libpager/queue.h (queue_empty): New function. * storeio/pager.c (pager_requests): New variable. (init_dev_paging): Updated call to pager_start_workers to use new pager_requests variable.
* libdiskfs: rename `error' variableJustus Winter2015-08-253-62/+62
| | | | | | * libdiskfs/dir-lookup.c (diskfs_S_dir_lookup): Rename `error' to `err'. * libdiskfs/file-getcontrol.c (diskfs_S_file_getcontrol): Likewise. * libdiskfs/file-syncfs.c (diskfs_S_file_syncfs): Likewise.
* libdiskfs: add missing declarationsJustus Winter2015-08-251-0/+8
| | | | | * libdiskfs/diskfs.h (diskfs_node_disknode): Add missing declaration. (diskfs_disknode_node): Likewise.
* libdiskfs: fix typoJustus Winter2015-08-251-1/+1
| | | | * libdiskfs/diskfs.h: Fix typo.
* libdiskfs: fix parent lookup in the name cacheJustus Winter2015-08-201-1/+1
| | | | * libdiskfs/name-cache.c (diskfs_check_lookup_cache): Drop stray negation.