msdosfs_vnops.c (30474) | msdosfs_vnops.c (30492) |
---|---|
1/* $Id: msdosfs_vnops.c,v 1.47 1997/10/15 10:05:03 phk Exp $ */ | 1/* $Id: msdosfs_vnops.c,v 1.48 1997/10/16 10:48:52 phk Exp $ */ |
2/* $NetBSD: msdosfs_vnops.c,v 1.20 1994/08/21 18:44:13 ws Exp $ */ 3 4/*- 5 * Copyright (C) 1994 Wolfgang Solfrank. 6 * Copyright (C) 1994 TooLs GmbH. 7 * All rights reserved. 8 * Original code by Paul Popelka (paulp@uts.amdahl.com) (see below). 9 * --- 64 unchanged lines hidden (view full) --- 74#include <msdosfs/msdosfsmount.h> 75#include <msdosfs/fat.h> 76 77/* 78 * Prototypes for MSDOSFS vnode operations 79 */ 80static int msdosfs_create __P((struct vop_create_args *)); 81static int msdosfs_mknod __P((struct vop_mknod_args *)); | 2/* $NetBSD: msdosfs_vnops.c,v 1.20 1994/08/21 18:44:13 ws Exp $ */ 3 4/*- 5 * Copyright (C) 1994 Wolfgang Solfrank. 6 * Copyright (C) 1994 TooLs GmbH. 7 * All rights reserved. 8 * Original code by Paul Popelka (paulp@uts.amdahl.com) (see below). 9 * --- 64 unchanged lines hidden (view full) --- 74#include <msdosfs/msdosfsmount.h> 75#include <msdosfs/fat.h> 76 77/* 78 * Prototypes for MSDOSFS vnode operations 79 */ 80static int msdosfs_create __P((struct vop_create_args *)); 81static int msdosfs_mknod __P((struct vop_mknod_args *)); |
82static int msdosfs_open __P((struct vop_open_args *)); | |
83static int msdosfs_close __P((struct vop_close_args *)); 84static int msdosfs_access __P((struct vop_access_args *)); 85static int msdosfs_getattr __P((struct vop_getattr_args *)); 86static int msdosfs_setattr __P((struct vop_setattr_args *)); 87static int msdosfs_read __P((struct vop_read_args *)); 88static int msdosfs_write __P((struct vop_write_args *)); | 82static int msdosfs_close __P((struct vop_close_args *)); 83static int msdosfs_access __P((struct vop_access_args *)); 84static int msdosfs_getattr __P((struct vop_getattr_args *)); 85static int msdosfs_setattr __P((struct vop_setattr_args *)); 86static int msdosfs_read __P((struct vop_read_args *)); 87static int msdosfs_write __P((struct vop_write_args *)); |
89static int msdosfs_ioctl __P((struct vop_ioctl_args *)); 90static int msdosfs_poll __P((struct vop_poll_args *)); 91static int msdosfs_mmap __P((struct vop_mmap_args *)); | |
92static int msdosfs_fsync __P((struct vop_fsync_args *)); | 88static int msdosfs_fsync __P((struct vop_fsync_args *)); |
93static int msdosfs_seek __P((struct vop_seek_args *)); | |
94static int msdosfs_remove __P((struct vop_remove_args *)); 95static int msdosfs_link __P((struct vop_link_args *)); 96static int msdosfs_rename __P((struct vop_rename_args *)); 97static int msdosfs_mkdir __P((struct vop_mkdir_args *)); 98static int msdosfs_rmdir __P((struct vop_rmdir_args *)); 99static int msdosfs_symlink __P((struct vop_symlink_args *)); 100static int msdosfs_readdir __P((struct vop_readdir_args *)); | 89static int msdosfs_remove __P((struct vop_remove_args *)); 90static int msdosfs_link __P((struct vop_link_args *)); 91static int msdosfs_rename __P((struct vop_rename_args *)); 92static int msdosfs_mkdir __P((struct vop_mkdir_args *)); 93static int msdosfs_rmdir __P((struct vop_rmdir_args *)); 94static int msdosfs_symlink __P((struct vop_symlink_args *)); 95static int msdosfs_readdir __P((struct vop_readdir_args *)); |
101static int msdosfs_readlink __P((struct vop_readlink_args *)); | |
102static int msdosfs_abortop __P((struct vop_abortop_args *)); 103static int msdosfs_lock __P((struct vop_lock_args *)); 104static int msdosfs_unlock __P((struct vop_unlock_args *)); 105static int msdosfs_bmap __P((struct vop_bmap_args *)); 106static int msdosfs_strategy __P((struct vop_strategy_args *)); 107static int msdosfs_print __P((struct vop_print_args *)); 108static int msdosfs_islocked __P((struct vop_islocked_args *)); | 96static int msdosfs_abortop __P((struct vop_abortop_args *)); 97static int msdosfs_lock __P((struct vop_lock_args *)); 98static int msdosfs_unlock __P((struct vop_unlock_args *)); 99static int msdosfs_bmap __P((struct vop_bmap_args *)); 100static int msdosfs_strategy __P((struct vop_strategy_args *)); 101static int msdosfs_print __P((struct vop_print_args *)); 102static int msdosfs_islocked __P((struct vop_islocked_args *)); |
109static int msdosfs_advlock __P((struct vop_advlock_args *)); | |
110static int msdosfs_pathconf __P((struct vop_pathconf_args *ap)); | 103static int msdosfs_pathconf __P((struct vop_pathconf_args *ap)); |
111static int msdosfs_reallocblks __P((struct vop_reallocblks_args *)); | |
112 113/* 114 * Some general notes: 115 * 116 * In the ufs filesystem the inodes, superblocks, and indirect blocks are 117 * read/written using the vnode for the filesystem. Blocks that represent 118 * the contents of a file are read/written using the vnode for the file 119 * (including directories when they are read/written as files). This --- 90 unchanged lines hidden (view full) --- 210 zfree(namei_zone, ap->a_cnp->cn_pnbuf); 211 vput(ap->a_dvp); 212 break; 213 } 214 return error; 215} 216 217static int | 104 105/* 106 * Some general notes: 107 * 108 * In the ufs filesystem the inodes, superblocks, and indirect blocks are 109 * read/written using the vnode for the filesystem. Blocks that represent 110 * the contents of a file are read/written using the vnode for the file 111 * (including directories when they are read/written as files). This --- 90 unchanged lines hidden (view full) --- 202 zfree(namei_zone, ap->a_cnp->cn_pnbuf); 203 vput(ap->a_dvp); 204 break; 205 } 206 return error; 207} 208 209static int |
218msdosfs_open(ap) 219 struct vop_open_args /* { 220 struct vnode *a_vp; 221 int a_mode; 222 struct ucred *a_cred; 223 struct proc *a_p; 224 } */ *ap; 225{ 226 return 0; 227} 228 229static int | |
230msdosfs_close(ap) 231 struct vop_close_args /* { 232 struct vnode *a_vp; 233 int a_fflag; 234 struct ucred *a_cred; 235 struct proc *a_p; 236 } */ *ap; 237{ --- 583 unchanged lines hidden (view full) --- 821 } 822 } else if (ioflag & IO_SYNC) { 823 TIMEVAL_TO_TIMESPEC(&time, &ts); 824 error = deupdat(dep, &ts, 1); 825 } 826 return error; 827} 828 | 210msdosfs_close(ap) 211 struct vop_close_args /* { 212 struct vnode *a_vp; 213 int a_fflag; 214 struct ucred *a_cred; 215 struct proc *a_p; 216 } */ *ap; 217{ --- 583 unchanged lines hidden (view full) --- 801 } 802 } else if (ioflag & IO_SYNC) { 803 TIMEVAL_TO_TIMESPEC(&time, &ts); 804 error = deupdat(dep, &ts, 1); 805 } 806 return error; 807} 808 |
829static int 830msdosfs_ioctl(ap) 831 struct vop_ioctl_args /* { 832 struct vnode *a_vp; 833 int a_command; 834 caddr_t a_data; 835 int a_fflag; 836 struct ucred *a_cred; 837 struct proc *a_p; 838 } */ *ap; 839{ 840 return ENOTTY; 841} 842 843static int 844msdosfs_poll(ap) 845 struct vop_poll_args /* { 846 struct vnode *a_vp; 847 int a_events; 848 struct ucred *a_cred; 849 struct proc *a_p; 850 } */ *ap; 851{ 852 /* DOS filesystems never block? */ 853 return (ap->a_events & (POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM)); 854} 855 856static int 857msdosfs_mmap(ap) 858 struct vop_mmap_args /* { 859 struct vnode *a_vp; 860 int a_fflags; 861 struct ucred *a_cred; 862 struct proc *a_p; 863 } */ *ap; 864{ 865 return EINVAL; 866} 867 | |
868/* 869 * Flush the blocks of a file to disk. 870 * 871 * This function is worthless for vnodes that represent directories. Maybe we 872 * could just do a sync if they try an fsync on a directory file. 873 */ 874static int 875msdosfs_fsync(ap) --- 38 unchanged lines hidden (view full) --- 914 goto loop; 915 } 916#endif 917 splx(s); 918 TIMEVAL_TO_TIMESPEC(&time, &ts); 919 return deupdat(VTODE(vp), &ts, wait); 920} 921 | 809/* 810 * Flush the blocks of a file to disk. 811 * 812 * This function is worthless for vnodes that represent directories. Maybe we 813 * could just do a sync if they try an fsync on a directory file. 814 */ 815static int 816msdosfs_fsync(ap) --- 38 unchanged lines hidden (view full) --- 855 goto loop; 856 } 857#endif 858 splx(s); 859 TIMEVAL_TO_TIMESPEC(&time, &ts); 860 return deupdat(VTODE(vp), &ts, wait); 861} 862 |
922/* 923 * Now the whole work of extending a file is done in the write function. 924 * So nothing to do here. 925 */ | |
926static int | 863static int |
927msdosfs_seek(ap) 928 struct vop_seek_args /* { 929 struct vnode *a_vp; 930 off_t a_oldoff; 931 off_t a_newoff; 932 struct ucred *a_cred; 933 } */ *ap; 934{ 935 return 0; 936} 937 938static int | |
939msdosfs_remove(ap) 940 struct vop_remove_args /* { 941 struct vnode *a_dvp; 942 struct vnode *a_vp; 943 struct componentname *a_cnp; 944 } */ *ap; 945{ 946 int error; --- 820 unchanged lines hidden (view full) --- 1767 if (dep->de_FileSize - (uio->uio_offset - bias) <= 0) 1768 *ap->a_eofflag = 1; 1769 else 1770 *ap->a_eofflag = 0; 1771 1772 return error; 1773} 1774 | 864msdosfs_remove(ap) 865 struct vop_remove_args /* { 866 struct vnode *a_dvp; 867 struct vnode *a_vp; 868 struct componentname *a_cnp; 869 } */ *ap; 870{ 871 int error; --- 820 unchanged lines hidden (view full) --- 1692 if (dep->de_FileSize - (uio->uio_offset - bias) <= 0) 1693 *ap->a_eofflag = 1; 1694 else 1695 *ap->a_eofflag = 0; 1696 1697 return error; 1698} 1699 |
1775/* 1776 * DOS filesystems don't know what symlinks are. 1777 */ | |
1778static int | 1700static int |
1779msdosfs_readlink(ap) 1780 struct vop_readlink_args /* { 1781 struct vnode *a_vp; 1782 struct uio *a_uio; 1783 struct ucred *a_cred; 1784 } */ *ap; 1785{ 1786 return EINVAL; 1787} 1788 1789static int | |
1790msdosfs_abortop(ap) 1791 struct vop_abortop_args /* { 1792 struct vnode *a_dvp; 1793 struct componentname *a_cnp; 1794 } */ *ap; 1795{ 1796 if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF) 1797 zfree(namei_zone, ap->a_cnp->cn_pnbuf); --- 70 unchanged lines hidden (view full) --- 1868 } 1869 if (ap->a_runb) { 1870 *ap->a_runb = 0; 1871 } 1872 return pcbmap(dep, ap->a_bn, ap->a_bnp, 0); 1873} 1874 1875static int | 1701msdosfs_abortop(ap) 1702 struct vop_abortop_args /* { 1703 struct vnode *a_dvp; 1704 struct componentname *a_cnp; 1705 } */ *ap; 1706{ 1707 if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF) 1708 zfree(namei_zone, ap->a_cnp->cn_pnbuf); --- 70 unchanged lines hidden (view full) --- 1779 } 1780 if (ap->a_runb) { 1781 *ap->a_runb = 0; 1782 } 1783 return pcbmap(dep, ap->a_bn, ap->a_bnp, 0); 1784} 1785 1786static int |
1876msdosfs_reallocblks(ap) 1877 struct vop_reallocblks_args /* { 1878 struct vnode *a_vp; 1879 struct cluster_save *a_buflist; 1880 } */ *ap; 1881{ 1882 /* Currently no support for clustering */ /* XXX */ 1883 return ENOSPC; 1884} 1885 1886static int | |
1887msdosfs_strategy(ap) 1888 struct vop_strategy_args /* { 1889 struct buf *a_bp; 1890 } */ *ap; 1891{ 1892 struct buf *bp = ap->a_bp; 1893 struct denode *dep = VTODE(bp->b_vp); 1894 struct vnode *vp; --- 43 unchanged lines hidden (view full) --- 1938 dep->de_StartCluster, dep->de_dirclust, dep->de_diroffset); 1939 printf(" dev %d, %d", major(dep->de_dev), minor(dep->de_dev)); 1940 lockmgr_printinfo(&dep->de_lock); 1941 printf("\n"); 1942 return 0; 1943} 1944 1945static int | 1787msdosfs_strategy(ap) 1788 struct vop_strategy_args /* { 1789 struct buf *a_bp; 1790 } */ *ap; 1791{ 1792 struct buf *bp = ap->a_bp; 1793 struct denode *dep = VTODE(bp->b_vp); 1794 struct vnode *vp; --- 43 unchanged lines hidden (view full) --- 1838 dep->de_StartCluster, dep->de_dirclust, dep->de_diroffset); 1839 printf(" dev %d, %d", major(dep->de_dev), minor(dep->de_dev)); 1840 lockmgr_printinfo(&dep->de_lock); 1841 printf("\n"); 1842 return 0; 1843} 1844 1845static int |
1946msdosfs_advlock(ap) 1947 struct vop_advlock_args /* { 1948 struct vnode *a_vp; 1949 caddr_t a_id; 1950 int a_op; 1951 struct flock *a_fl; 1952 int a_flags; 1953 } */ *ap; 1954{ 1955 return EINVAL; /* we don't do locking yet */ 1956} 1957 1958static int | |
1959msdosfs_pathconf(ap) 1960 struct vop_pathconf_args /* { 1961 struct vnode *a_vp; 1962 int a_name; 1963 int *a_retval; 1964 } */ *ap; 1965{ 1966 switch (ap->a_name) { --- 18 unchanged lines hidden (view full) --- 1985} 1986 1987/* Global vfs data structures for msdosfs */ 1988vop_t **msdosfs_vnodeop_p; 1989static struct vnodeopv_entry_desc msdosfs_vnodeop_entries[] = { 1990 { &vop_default_desc, (vop_t *) vn_default_error }, 1991 { &vop_abortop_desc, (vop_t *) msdosfs_abortop }, 1992 { &vop_access_desc, (vop_t *) msdosfs_access }, | 1846msdosfs_pathconf(ap) 1847 struct vop_pathconf_args /* { 1848 struct vnode *a_vp; 1849 int a_name; 1850 int *a_retval; 1851 } */ *ap; 1852{ 1853 switch (ap->a_name) { --- 18 unchanged lines hidden (view full) --- 1872} 1873 1874/* Global vfs data structures for msdosfs */ 1875vop_t **msdosfs_vnodeop_p; 1876static struct vnodeopv_entry_desc msdosfs_vnodeop_entries[] = { 1877 { &vop_default_desc, (vop_t *) vn_default_error }, 1878 { &vop_abortop_desc, (vop_t *) msdosfs_abortop }, 1879 { &vop_access_desc, (vop_t *) msdosfs_access }, |
1993 { &vop_advlock_desc, (vop_t *) msdosfs_advlock }, | |
1994 { &vop_bmap_desc, (vop_t *) msdosfs_bmap }, 1995 { &vop_cachedlookup_desc, (vop_t *) msdosfs_lookup }, 1996 { &vop_close_desc, (vop_t *) msdosfs_close }, 1997 { &vop_create_desc, (vop_t *) msdosfs_create }, 1998 { &vop_fsync_desc, (vop_t *) msdosfs_fsync }, 1999 { &vop_getattr_desc, (vop_t *) msdosfs_getattr }, 2000 { &vop_inactive_desc, (vop_t *) msdosfs_inactive }, | 1880 { &vop_bmap_desc, (vop_t *) msdosfs_bmap }, 1881 { &vop_cachedlookup_desc, (vop_t *) msdosfs_lookup }, 1882 { &vop_close_desc, (vop_t *) msdosfs_close }, 1883 { &vop_create_desc, (vop_t *) msdosfs_create }, 1884 { &vop_fsync_desc, (vop_t *) msdosfs_fsync }, 1885 { &vop_getattr_desc, (vop_t *) msdosfs_getattr }, 1886 { &vop_inactive_desc, (vop_t *) msdosfs_inactive }, |
2001 { &vop_ioctl_desc, (vop_t *) msdosfs_ioctl }, | |
2002 { &vop_islocked_desc, (vop_t *) msdosfs_islocked }, 2003 { &vop_link_desc, (vop_t *) msdosfs_link }, 2004 { &vop_lock_desc, (vop_t *) msdosfs_lock }, 2005 { &vop_lookup_desc, (vop_t *) vfs_cache_lookup }, 2006 { &vop_mkdir_desc, (vop_t *) msdosfs_mkdir }, 2007 { &vop_mknod_desc, (vop_t *) msdosfs_mknod }, | 1887 { &vop_islocked_desc, (vop_t *) msdosfs_islocked }, 1888 { &vop_link_desc, (vop_t *) msdosfs_link }, 1889 { &vop_lock_desc, (vop_t *) msdosfs_lock }, 1890 { &vop_lookup_desc, (vop_t *) vfs_cache_lookup }, 1891 { &vop_mkdir_desc, (vop_t *) msdosfs_mkdir }, 1892 { &vop_mknod_desc, (vop_t *) msdosfs_mknod }, |
2008 { &vop_mmap_desc, (vop_t *) msdosfs_mmap }, 2009 { &vop_open_desc, (vop_t *) msdosfs_open }, | |
2010 { &vop_pathconf_desc, (vop_t *) msdosfs_pathconf }, | 1893 { &vop_pathconf_desc, (vop_t *) msdosfs_pathconf }, |
2011 { &vop_poll_desc, (vop_t *) msdosfs_poll }, | |
2012 { &vop_print_desc, (vop_t *) msdosfs_print }, 2013 { &vop_read_desc, (vop_t *) msdosfs_read }, 2014 { &vop_readdir_desc, (vop_t *) msdosfs_readdir }, | 1894 { &vop_print_desc, (vop_t *) msdosfs_print }, 1895 { &vop_read_desc, (vop_t *) msdosfs_read }, 1896 { &vop_readdir_desc, (vop_t *) msdosfs_readdir }, |
2015 { &vop_readlink_desc, (vop_t *) msdosfs_readlink }, 2016 { &vop_reallocblks_desc, (vop_t *) msdosfs_reallocblks }, | |
2017 { &vop_reclaim_desc, (vop_t *) msdosfs_reclaim }, 2018 { &vop_remove_desc, (vop_t *) msdosfs_remove }, 2019 { &vop_rename_desc, (vop_t *) msdosfs_rename }, 2020 { &vop_rmdir_desc, (vop_t *) msdosfs_rmdir }, | 1897 { &vop_reclaim_desc, (vop_t *) msdosfs_reclaim }, 1898 { &vop_remove_desc, (vop_t *) msdosfs_remove }, 1899 { &vop_rename_desc, (vop_t *) msdosfs_rename }, 1900 { &vop_rmdir_desc, (vop_t *) msdosfs_rmdir }, |
2021 { &vop_seek_desc, (vop_t *) msdosfs_seek }, | |
2022 { &vop_setattr_desc, (vop_t *) msdosfs_setattr }, 2023 { &vop_strategy_desc, (vop_t *) msdosfs_strategy }, 2024 { &vop_symlink_desc, (vop_t *) msdosfs_symlink }, 2025 { &vop_unlock_desc, (vop_t *) msdosfs_unlock }, 2026 { &vop_write_desc, (vop_t *) msdosfs_write }, 2027 { NULL, NULL } 2028}; 2029static struct vnodeopv_desc msdosfs_vnodeop_opv_desc = 2030 { &msdosfs_vnodeop_p, msdosfs_vnodeop_entries }; 2031 2032VNODEOP_SET(msdosfs_vnodeop_opv_desc); | 1901 { &vop_setattr_desc, (vop_t *) msdosfs_setattr }, 1902 { &vop_strategy_desc, (vop_t *) msdosfs_strategy }, 1903 { &vop_symlink_desc, (vop_t *) msdosfs_symlink }, 1904 { &vop_unlock_desc, (vop_t *) msdosfs_unlock }, 1905 { &vop_write_desc, (vop_t *) msdosfs_write }, 1906 { NULL, NULL } 1907}; 1908static struct vnodeopv_desc msdosfs_vnodeop_opv_desc = 1909 { &msdosfs_vnodeop_p, msdosfs_vnodeop_entries }; 1910 1911VNODEOP_SET(msdosfs_vnodeop_opv_desc); |