2000-03-19 Roland McGrath * io.c: Comments. * dev.h (struct dev): New members store_name, readonly, rdev. (dev_is_readonly): New inline function. * dev.c (dev_open): Take just one arg, a struct dev whose store==0. (dev_close): Shut down the store, but leave DEV intact with store==0. * storeio.c (struct storeio_argp_params): New type. (device, device_lock, store_name): Variables removed. (readonly, inhibit_cache, enforce_store, rdev): Likewise. These are all now members in struct storeio_argp_params or struct dev; rdev now uses dev_t instead of int. (parse_opt): Find a struct storeio_argp_params in STATE->input and fill it in accordingly. Use makedev macro to construct rdev. (trivfs_append_args): Find options in struct dev off control hook. Use major, minor macros. (main): Make DEVICE a local here, and point FSYS->hook at it. Don't modify trivfs_allow_open. (getroot_hook): New static function. (trivfs_getroot_hook): New variable, initialized to that. (check_open_hook): Find struct dev in CNTL->hook and use new dev_open interface. Use dev_is_readonly. (open_hook): Find struct dev in PEROPEN->cntl->hook and check DEV->store. (trivfs_modify_stat): Find struct dev in CRED->po->cntl->hook. Use dev_is_readonly. (trivfs_goaway): Find struct dev in FSYS->hook and use its lock. (trivfs_S_fsys_syncfs): Find struct dev in CNTL->hook. 1999-11-24 Roland McGrath * storeio.c (trivfs_modify_stat): Clear writable bits if open store is readonly, not just if we got the --readonly switch. 1999-11-20 Roland McGrath * dev.c (dev_read, dev_write): In DEV->inhibit_cache case, handle zero (i.e. unknown) block_size by treating it as 1. Use shift and bitwise-and rather than multiply and modulus for block size arithmetic, since it's a known power of two. 1999-11-14 Roland McGrath * io.c (trivfs_S_file_get_storage_info): Fail with EOPNOTSUPP when there is no store open. * storeio.c (check_open_hook): Don't check for D_NO_SUCH_DEVICE here. Translation to ENXIO now done in libstore. * dev.h (struct dev): New member `enforced'. * storeio.c (enforce_store): New variable. (options, parse_opt, trivfs_append_args): Grok new option --enforced/-e to set enforce_store. (check_open_hook): Set DEVICE->enforced from enforce_store. * io.c (trivfs_S_file_get_storage_info): If DEV->enforced is set and the store flags lack STORE_ENFORCED, then return STORAGE_OTHER. 1999-09-13 Roland McGrath * io.c: Reverted changes related to io_map_segment. 1999-09-07 Thomas Bushnell, BSG * io.c (trivfs_S_io_map): Renamed to ... (trivfs_S_io_map_segment): ... here, and accept parameter `index'. 1999-07-11 Roland McGrath * dev.c (dev_read: ensure_buf): Fix sloppy bugs in last change. 1999-07-09 Thomas Bushnell, BSG * dev.c (dev_open): Use mmap instead of vm_allocate. (dev_read): Likewise. 1999-07-10 Roland McGrath * dev.c: Add #include for munmap decl. * pager.c: Likewise. 1999-07-03 Thomas Bushnell, BSG * dev.c (dev_buf_fill): Use munmap instead of vm_deallocate. (dev_close): Likewise. (dev_read): Likewise. * pager.c (pager_write_page): Likewise. 1999-05-23 Roland McGrath * storeio.c (check_open_hook): Translate D_NO_SUCH_DEVICE to ENXIO. 1999-05-09 Mark Kettenis * pager.c (dev_stop_paging): Do not try to count ports in PAGER_PORT_BUCKET if it has not been created. 1999-04-30 Mark Kettenis * storeio.c (trivfs_modify_stat): Do not assume that we have the device open in the caculation of st_mode. If the device is not open, only return S_IFCHR if inhibit_cache is set. 1999-01-31 Roland McGrath * storeio.c (trivfs_modify_stat): Return S_IFCHR if block size is 1. * storeio.c (trivfs_modify_stat): Return S_IFCHR iff inhibit_cache set, otherwsie S_IFBLK. For a block-addressed device, S_IFCHR means "must do whole-block i/o". 1999-01-28 Roland McGrath * io.c (trivfs_S_file_syncfs): Fix inverted test. Reported by OKUJI Yoshinori . 1999-01-27 Roland McGrath * storeio.c (options): New option -c/--no-cache. (inhibit_cache): New variable. (parse_opt): Make -c set it. (trivfs_append_args): Report --no-cache if set. (check_open_hook): Pass inhibit_cache flag to dev_open. * dev.h (struct dev): New member `inhibit_cache'. (dev_open): Update decl. * dev.c (dev_open): Take new arg inhibit_cache, store in new dev. If set, don't initialize buf_offs, io_lock, pager, pager_lock. (dev_read, dev_write): If DEV->inhibit_cache is set, allow only whole-block i/o: EINVAL for non-whole-block attempts. * pager.c (dev_get_memory_object): If DEV->inhibit_cache is set, don't make our own pager; if store_map returns EOPNOTSUPP, so do we. 1998-10-20 Roland McGrath * dev.c (dev_buf_fill): Add braces to silence gcc warning. 1998-07-20 Roland McGrath * storeio.c (main): Fix return type to int, and use return. Wed Aug 20 14:07:05 1997 Thomas Bushnell, n/BSG * pager.c (dev_get_memory_object): Deal with errors from pager_create properly. * pager.c (service_paging_requests): New args for ports_manage_port_operations_multithread. * storeio.c (main): Likewise. 1997-07-23 Miles Bader * io.c (trivfs_S_io_readable, trivfs_S_io_read, trivfs_S_io_map): Return EBADF instead of EINVAL. (trivfs_S_io_select): Don't bother returning EBADF. 1997-07-22 Miles Bader * io.c (trivfs_S_io_read): Return EINVAL instead of EBADF. (trivfs_S_io_map): Return EINVAL if CRED cannot be read or written. 1997-07-21 Miles Bader * Makefile (HURDLIBS): Add iohelp. 1997-07-17 Miles Bader * io.c (trivfs_S_io_map): Pass PROT argument to dev_get_memory_object. * pager.c (dev_get_memory_object): Add PROT arg. Use store_map. * dev.h (dev_get_memory_object): Add PROT arg. 1997-07-16 Miles Bader * pager.c (pager_read_page): Initialize READ to 0. * pager.c (dev_get_memory_object): Implement correctly. (dev_stop_paging): Work entirely by flushing user pagers; don't kill pager. (pager_clear_user_data): Zero our pointer to the pager. * io.c (trivfs_S_io_map): Make sure there are enough references to MEMOBJ for both read & write ports. Wed Feb 19 21:42:45 1997 Miles Bader * storeio.c (fsys_port_class, root_port_class, port_bucket, trivfs_protid_portclasses, trivfs_protid_nportclasses, trivfs_cntl_portclasses, trivfs_cntl_nportclasses): Variables removed. (main): Don't set or use port class/bucket variables, let trivfs_startup do it. Add FSYS variable. (doc): Make an initialized array. (parse_opt): New function (was nested in main). (argp, argp_kids): New variables (were nested in main). (trivfs_goaway): Get ROOT_PORT_CLASS from FSYS. Fri Nov 15 17:54:10 1996 Thomas Bushnell, n/BSG * storeio.c (trivfs_check_open_hook): New arg syntax. (check_open_hook): Likewise. Thu Oct 24 16:24:53 1996 Miles Bader * storeio.c (main): Use elements of type `struct argp_child' for KIDS. Mon Oct 7 16:38:06 1996 Miles Bader * io.c (trivfs_S_file_get_storage_info): If necessary to enforce security, make a copy of STORE and inactivate it before returning. Thu Sep 26 14:26:17 1996 Miles Bader * storeio.c (trivfs_S_file_check_access): Function removed (trivfs default is now sufficient). Tue Sep 24 15:52:04 1996 Miles Bader * storeio.c (trivfs_S_file_check_access): New function. (check_open_hook): Return EROFS if O_WRITE on a readonly device. Mon Sep 23 17:21:23 1996 Miles Bader * storeio.c (trivfs_append_args): Make ARGZ_LEN of type `size_t *'. Narrow scope of BUF. : New include. Thu Sep 19 18:12:48 1996 Miles Bader * storeio.c (trivfs_append_args): New function. Wed Sep 18 15:16:27 1996 Miles Bader * io.c (trivfs_S_io_read, trivfs_S_io_write): Use void * buffers. * open.h (open_read, open_write): Likewise. * open.c (open_read, open_write): Likewise. * dev.h (struct dev, dev_read, dev_write): Likewise. * dev.c (dev_buf_fill, dev_read, dev_write): Likewise. * pager.c (pager_read_page): Cast BUF into void ** for dev_read. * storeio.c (main): Use STORE_PARAMS variable to get result from parsing STORE_ARGP. * dev.c (dev_open): Remove CLASSES argument to store_parsed_open. Thu Sep 19 17:18:11 1996 Thomas Bushnell, n/BSG * Makefile (HURDLIBS): New variable. (storeio): Deleted special dependencies. Fri Sep 13 11:05:06 1996 Miles Bader * storeio.c (argp_program_version): New variable. : New include. Tue Sep 10 17:13:55 1996 Miles Bader * dev.c (dev_rw): Return EINVAL instead of EIO for too-large offsets. * dev.c (dev_open, dev_close): Remove ifdef'd-out code for allocating DEV's buffer with valloc; other things depend on it being vm_allocated. * io.c (trivfs_S_file_get_storage_info): Use store_return.