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>
