Deleted Added
full compact
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);