Deleted Added
sdiff udiff text old ( 30474 ) new ( 30492 )
full compact
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 *));
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 *));
88static int msdosfs_fsync __P((struct vop_fsync_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 *));
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 *));
103static int msdosfs_pathconf __P((struct vop_pathconf_args *ap));
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
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
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
863static int
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
1700static 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
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
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 },
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 },
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 },
1893 { &vop_pathconf_desc, (vop_t *) msdosfs_pathconf },
1894 { &vop_print_desc, (vop_t *) msdosfs_print },
1895 { &vop_read_desc, (vop_t *) msdosfs_read },
1896 { &vop_readdir_desc, (vop_t *) msdosfs_readdir },
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 },
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);