Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 21 Nov 2000 08:31:46 +0600 (ALMT)
From:      Boris Popov <bp@butya.kz>
To:        Marc van Woerkom <marc.vanwoerkom@science-factory.com>
Cc:        freebsd-fs@freebsd.org
Subject:   Re: MSDOS FS and flock?
Message-ID:  <Pine.BSF.4.21.0011210827440.42711-200000@lion.butya.kz>
In-Reply-To: <200011201400.eAKE0T613531@nil.science-factory.com>

index | next in thread | previous in thread | raw e-mail

[-- Attachment #1 --]
On Mon, 20 Nov 2000, Marc van Woerkom wrote:

> I wonder why Emacs' movemail program is not able to move
> mail on a MSDOS partion. 
> Under Linux this seems to be no problem (or no visible 
> problem yet :-)
> 
> My guess is that msdosfs does not allow flock().

	Yes, msdosfs doesn't implement advisory locks. Attached you'll
find a diff against recent -current (but should work on -stable
too) which adds necessary VOP to msdosfs.

--
Boris Popov
http://www.butya.kz/~bp/

[-- Attachment #2 --]
Index: denode.h
===================================================================
RCS file: /home/ncvs/src/sys/msdosfs/denode.h,v
retrieving revision 1.21
diff -u -r1.21 denode.h
--- denode.h	2000/10/22 14:22:17	1.21
+++ denode.h	2000/11/14 02:05:44
@@ -160,6 +160,7 @@
 	u_long de_FileSize;	/* size of file in bytes */
 	struct fatcache de_fc[FC_SIZE];	/* fat cache */
 	u_quad_t de_modrev;	/* Revision level for lease. */
+	struct lockf *de_lockf;	/* Locking record of file */
 };
 
 /*
Index: msdosfs_vnops.c
===================================================================
RCS file: /home/ncvs/src/sys/msdosfs/msdosfs_vnops.c,v
retrieving revision 1.106
diff -u -r1.106 msdosfs_vnops.c
--- msdosfs_vnops.c	2000/10/22 14:24:30	1.106
+++ msdosfs_vnops.c	2000/11/14 02:09:42
@@ -57,6 +57,7 @@
 #include <sys/bio.h>
 #include <sys/buf.h>
 #include <sys/proc.h>
+#include <sys/lockf.h>
 #include <sys/mount.h>
 #include <sys/unistd.h>
 #include <sys/vnode.h>
@@ -103,6 +104,7 @@
 static int msdosfs_pathconf __P((struct vop_pathconf_args *ap));
 static int msdosfs_getpages __P((struct vop_getpages_args *));
 static int msdosfs_putpages __P((struct vop_putpages_args *));
+static int msdosfs_advlock (struct vop_advlock_args *);
 
 /*
  * Some general notes:
@@ -1880,6 +1882,25 @@
 }
 
 /*
+ * Advisory byte-level locks.
+ */
+static int
+msdosfs_advlock(ap)
+	struct vop_advlock_args /* {
+		struct vnode *a_vp;
+		caddr_t  a_id;
+		int  a_op;
+		struct flock *a_fl;
+		int  a_flags;
+	} */ *ap;
+{
+	struct denode *dep = VTODE(ap->a_vp);
+
+	return (lf_advlock(ap, &dep->de_lockf, dep->de_FileSize));
+}
+
+
+/*
  * put page routine
  *
  * XXX By default, wimp out... note that a_offset is ignored (and always
@@ -1898,6 +1919,7 @@
 static struct vnodeopv_entry_desc msdosfs_vnodeop_entries[] = {
 	{ &vop_default_desc,		(vop_t *) vop_defaultop },
 	{ &vop_access_desc,		(vop_t *) msdosfs_access },
+	{ &vop_advlock_desc,		(vop_t *) msdosfs_advlock },
 	{ &vop_bmap_desc,		(vop_t *) msdosfs_bmap },
 	{ &vop_cachedlookup_desc,	(vop_t *) msdosfs_lookup },
 	{ &vop_close_desc,		(vop_t *) msdosfs_close },
help

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0011210827440.42711-200000>