aboutsummaryrefslogtreecommitdiff
path: root/korean/msdosfs/patches.5/patch-ag
diff options
context:
space:
mode:
Diffstat (limited to 'korean/msdosfs/patches.5/patch-ag')
-rw-r--r--korean/msdosfs/patches.5/patch-ag152
1 files changed, 152 insertions, 0 deletions
diff --git a/korean/msdosfs/patches.5/patch-ag b/korean/msdosfs/patches.5/patch-ag
new file mode 100644
index 000000000000..564133de374a
--- /dev/null
+++ b/korean/msdosfs/patches.5/patch-ag
@@ -0,0 +1,152 @@
+--- msdosfs_vnops.c.orig Mon Apr 10 04:32:37 2000
++++ msdosfs_vnops.c Sun Feb 11 17:00:36 2001
+@@ -51,7 +51,4 @@
+ #include "opt_msdosfs.h"
+
+-/*
+- * System include files.
+- */
+ #include <sys/param.h>
+ #include <sys/systm.h>
+@@ -60,4 +57,5 @@
+ #include <sys/kernel.h>
+ #include <sys/stat.h>
++#include <sys/bio.h>
+ #include <sys/buf.h>
+ #include <sys/proc.h>
+@@ -71,10 +69,8 @@
+ #include <vm/vm.h>
+ #include <vm/vm_extern.h>
+-#include <vm/vm_zone.h>
+ #include <vm/vnode_pager.h>
+
+-/*
+- * MSDOSFS include files.
+- */
++#include <machine/mutex.h>
++
+ #include <msdosfs/bpb.h>
+ #include <msdosfs/direntry.h>
+@@ -240,10 +236,10 @@
+ struct timespec ts;
+
+- simple_lock(&vp->v_interlock);
++ mtx_lock(&vp->v_interlock);
+ if (vp->v_usecount > 1) {
+ getnanotime(&ts);
+ DETIMES(dep, &ts, &ts, &ts);
+ }
+- simple_unlock(&vp->v_interlock);
++ mtx_unlock(&vp->v_interlock);
+ return 0;
+ }
+@@ -261,8 +257,5 @@
+ struct denode *dep = VTODE(ap->a_vp);
+ struct msdosfsmount *pmp = dep->de_pmp;
+- struct ucred *cred = ap->a_cred;
+- mode_t mask, file_mode, mode = ap->a_mode;
+- register gid_t *gp;
+- int i;
++ mode_t file_mode, mode = ap->a_mode;
+
+ file_mode = (S_IXUSR|S_IXGRP|S_IXOTH) | (S_IRUSR|S_IRGRP|S_IROTH) |
+@@ -288,41 +281,6 @@
+ }
+
+- /* User id 0 always gets access. */
+- if (cred->cr_uid == 0)
+- return 0;
+-
+- mask = 0;
+-
+- /* Otherwise, check the owner. */
+- if (cred->cr_uid == pmp->pm_uid) {
+- if (mode & VEXEC)
+- mask |= S_IXUSR;
+- if (mode & VREAD)
+- mask |= S_IRUSR;
+- if (mode & VWRITE)
+- mask |= S_IWUSR;
+- return (file_mode & mask) == mask ? 0 : EACCES;
+- }
+-
+- /* Otherwise, check the groups. */
+- for (i = 0, gp = cred->cr_groups; i < cred->cr_ngroups; i++, gp++)
+- if (pmp->pm_gid == *gp) {
+- if (mode & VEXEC)
+- mask |= S_IXGRP;
+- if (mode & VREAD)
+- mask |= S_IRGRP;
+- if (mode & VWRITE)
+- mask |= S_IWGRP;
+- return (file_mode & mask) == mask ? 0 : EACCES;
+- }
+-
+- /* Otherwise, check everyone else. */
+- if (mode & VEXEC)
+- mask |= S_IXOTH;
+- if (mode & VREAD)
+- mask |= S_IROTH;
+- if (mode & VWRITE)
+- mask |= S_IWOTH;
+- return (file_mode & mask) == mask ? 0 : EACCES;
++ return (vaccess(vp->v_type, file_mode, pmp->pm_uid, pmp->pm_gid,
++ ap->a_mode, ap->a_cred, NULL));
+ }
+
+@@ -915,7 +873,5 @@
+
+ /*
+- * DOS filesystems don't know what links are. But since we already called
+- * msdosfs_lookup() with create and lockparent, the parent is locked so we
+- * have to free it before we return the error.
++ * DOS filesystems don't know what links are.
+ */
+ static int
+@@ -975,9 +931,4 @@
+ * On exit:
+ * all denodes should be released
+- *
+- * Notes:
+- * I'm not sure how the memory containing the pathnames pointed at by the
+- * componentname structures is freed, there may be some memory bleeding
+- * for each rename done.
+ */
+ static int
+@@ -1109,5 +1060,4 @@
+ if (VTODE(fdvp)->de_StartCluster != VTODE(tdvp)->de_StartCluster)
+ newparent = 1;
+- vrele(fdvp);
+ if (doingdirectory && newparent) {
+ if (error) /* write access check above */
+@@ -1177,5 +1127,6 @@
+ if (!newparent)
+ VOP_UNLOCK(tdvp, 0, p);
+- (void) relookup(fdvp, &fvp, fcnp);
++ if (relookup(fdvp, &fvp, fcnp) == 0)
++ vrele(fdvp);
+ if (fvp == NULL) {
+ /*
+@@ -1857,6 +1808,6 @@
+ if (error) {
+ bp->b_error = error;
+- bp->b_flags |= B_ERROR;
+- biodone(bp);
++ bp->b_ioflags |= BIO_ERROR;
++ bufdone(bp);
+ return (error);
+ }
+@@ -1865,5 +1816,5 @@
+ }
+ if (bp->b_blkno == -1) {
+- biodone(bp);
++ bufdone(bp);
+ return (0);
+ }
+@@ -1890,5 +1841,5 @@
+ dep->de_StartCluster, dep->de_dirclust, dep->de_diroffset);
+ printf(" dev %d, %d", major(dep->de_dev), minor(dep->de_dev));
+- lockmgr_printinfo(&dep->de_lock);
++ lockmgr_printinfo(&ap->a_vp->v_lock);
+ printf("\n");
+ return (0);