msdosfs_vfsops.c (70536) | msdosfs_vfsops.c (71576) |
---|---|
1/* $FreeBSD: head/sys/fs/msdosfs/msdosfs_vfsops.c 70536 2000-12-31 10:24:19Z phk $ */ | 1/* $FreeBSD: head/sys/fs/msdosfs/msdosfs_vfsops.c 71576 2001-01-24 12:35:55Z jasone $ */ |
2/* $NetBSD: msdosfs_vfsops.c,v 1.51 1997/11/17 15:36:58 ws Exp $ */ 3 4/*- 5 * Copyright (C) 1994, 1995, 1997 Wolfgang Solfrank. 6 * Copyright (C) 1994, 1995, 1997 TooLs GmbH. 7 * All rights reserved. 8 * Original code by Paul Popelka (paulp@uts.amdahl.com) (see below). 9 * --- 46 unchanged lines hidden (view full) --- 56#include <sys/kernel.h> 57#include <sys/vnode.h> 58#include <sys/mount.h> 59#include <sys/bio.h> 60#include <sys/buf.h> 61#include <sys/fcntl.h> 62#include <sys/malloc.h> 63#include <sys/stat.h> /* defines ALLPERMS */ | 2/* $NetBSD: msdosfs_vfsops.c,v 1.51 1997/11/17 15:36:58 ws Exp $ */ 3 4/*- 5 * Copyright (C) 1994, 1995, 1997 Wolfgang Solfrank. 6 * Copyright (C) 1994, 1995, 1997 TooLs GmbH. 7 * All rights reserved. 8 * Original code by Paul Popelka (paulp@uts.amdahl.com) (see below). 9 * --- 46 unchanged lines hidden (view full) --- 56#include <sys/kernel.h> 57#include <sys/vnode.h> 58#include <sys/mount.h> 59#include <sys/bio.h> 60#include <sys/buf.h> 61#include <sys/fcntl.h> 62#include <sys/malloc.h> 63#include <sys/stat.h> /* defines ALLPERMS */ |
64#include <sys/mutex.h> |
|
64 | 65 |
65#include <machine/mutex.h> 66 | |
67#include <msdosfs/bpb.h> 68#include <msdosfs/bootsect.h> 69#include <msdosfs/direntry.h> 70#include <msdosfs/denode.h> 71#include <msdosfs/msdosfsmount.h> 72#include <msdosfs/fat.h> 73 74#define MSDOSFS_DFLTBSIZE 4096 --- 783 unchanged lines hidden (view full) --- 858 panic("msdosfs_sync: rofs mod"); 859 else { 860 /* update fats here */ 861 } 862 } 863 /* 864 * Write back each (modified) denode. 865 */ | 66#include <msdosfs/bpb.h> 67#include <msdosfs/bootsect.h> 68#include <msdosfs/direntry.h> 69#include <msdosfs/denode.h> 70#include <msdosfs/msdosfsmount.h> 71#include <msdosfs/fat.h> 72 73#define MSDOSFS_DFLTBSIZE 4096 --- 783 unchanged lines hidden (view full) --- 857 panic("msdosfs_sync: rofs mod"); 858 else { 859 /* update fats here */ 860 } 861 } 862 /* 863 * Write back each (modified) denode. 864 */ |
866 simple_lock(&mntvnode_slock); | 865 mtx_enter(&mntvnode_mtx, MTX_DEF); |
867loop: 868 for (vp = LIST_FIRST(&mp->mnt_vnodelist); vp != NULL; vp = nvp) { 869 /* 870 * If the vnode that we are about to sync is no longer 871 * associated with this mount point, start over. 872 */ 873 if (vp->v_mount != mp) 874 goto loop; 875 876 mtx_enter(&vp->v_interlock, MTX_DEF); 877 nvp = LIST_NEXT(vp, v_mntvnodes); 878 dep = VTODE(vp); 879 if (vp->v_type == VNON || 880 ((dep->de_flag & 881 (DE_ACCESS | DE_CREATE | DE_UPDATE | DE_MODIFIED)) == 0 && 882 (TAILQ_EMPTY(&vp->v_dirtyblkhd) || waitfor == MNT_LAZY))) { 883 mtx_exit(&vp->v_interlock, MTX_DEF); 884 continue; 885 } | 866loop: 867 for (vp = LIST_FIRST(&mp->mnt_vnodelist); vp != NULL; vp = nvp) { 868 /* 869 * If the vnode that we are about to sync is no longer 870 * associated with this mount point, start over. 871 */ 872 if (vp->v_mount != mp) 873 goto loop; 874 875 mtx_enter(&vp->v_interlock, MTX_DEF); 876 nvp = LIST_NEXT(vp, v_mntvnodes); 877 dep = VTODE(vp); 878 if (vp->v_type == VNON || 879 ((dep->de_flag & 880 (DE_ACCESS | DE_CREATE | DE_UPDATE | DE_MODIFIED)) == 0 && 881 (TAILQ_EMPTY(&vp->v_dirtyblkhd) || waitfor == MNT_LAZY))) { 882 mtx_exit(&vp->v_interlock, MTX_DEF); 883 continue; 884 } |
886 simple_unlock(&mntvnode_slock); | 885 mtx_exit(&mntvnode_mtx, MTX_DEF); |
887 error = vget(vp, LK_EXCLUSIVE | LK_NOWAIT | LK_INTERLOCK, p); 888 if (error) { | 886 error = vget(vp, LK_EXCLUSIVE | LK_NOWAIT | LK_INTERLOCK, p); 887 if (error) { |
889 simple_lock(&mntvnode_slock); | 888 mtx_enter(&mntvnode_mtx, MTX_DEF); |
890 if (error == ENOENT) 891 goto loop; 892 continue; 893 } 894 error = VOP_FSYNC(vp, cred, waitfor, p); 895 if (error) 896 allerror = error; 897 VOP_UNLOCK(vp, 0, p); 898 vrele(vp); | 889 if (error == ENOENT) 890 goto loop; 891 continue; 892 } 893 error = VOP_FSYNC(vp, cred, waitfor, p); 894 if (error) 895 allerror = error; 896 VOP_UNLOCK(vp, 0, p); 897 vrele(vp); |
899 simple_lock(&mntvnode_slock); | 898 mtx_enter(&mntvnode_mtx, MTX_DEF); |
900 } | 899 } |
901 simple_unlock(&mntvnode_slock); | 900 mtx_exit(&mntvnode_mtx, MTX_DEF); |
902 903 /* 904 * Flush filesystem control info. 905 */ 906 if (waitfor != MNT_LAZY) { 907 vn_lock(pmp->pm_devvp, LK_EXCLUSIVE | LK_RETRY, p); 908 error = VOP_FSYNC(pmp->pm_devvp, cred, waitfor, p); 909 if (error) --- 79 unchanged lines hidden --- | 901 902 /* 903 * Flush filesystem control info. 904 */ 905 if (waitfor != MNT_LAZY) { 906 vn_lock(pmp->pm_devvp, LK_EXCLUSIVE | LK_RETRY, p); 907 error = VOP_FSYNC(pmp->pm_devvp, cred, waitfor, p); 908 if (error) --- 79 unchanged lines hidden --- |