Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 1 Mar 1998 00:49:43 +1100
From:      Bruce Evans <bde@zeta.org.au>
To:        bde@zeta.org.au, eivind@yes.no, jlemon@americantv.com
Cc:        fs@FreeBSD.ORG
Subject:   Re: syncer / SMP question
Message-ID:  <199802281349.AAA03879@godzilla.zeta.org.au>

next in thread | raw e-mail | index | archive | help
>Are you saying the release of the mountlist lock on success normal?

Yes, whatever interlock is passed to lockmgr() is always released,
and for vfs_busy(), that lock is mountlist_slock.

>It looks very much abnormal to me; it is at the wrong layer.  If this
>is normal, it means I'll have to remember 200 locking calls instead of
>5, as any call that mess with the locks must be considered a locking
>call.  Ouch.

There aren't quite that many.  vfs_busy() is apparently supposed to
simplify one common case.

>Now, here is what sync() would look like if I had free reign (I've cut
>the comment at the end here, for readbility):
>
>int
>sync(p, uap)
>	struct proc *p;
>        struct sync_args *uap;
>{
>        struct mount *mp;        /* mountpoint - walked through the list */
>	struct mount *nmp;       /* next-pointer (internal use in WALK_M_L) */
>        int asyncflag;
> 
>	WALK_MOUNT_LIST(&mountlist, mp, nmp, p) {
>                if ((mp->mnt_flag & MNT_RDONLY) == 0) {
>                        asyncflag = mp->mnt_flag & MNT_ASYNC;
>                        mp->mnt_flag &= ~MNT_ASYNC;
>                        vfs_msync(mp, MNT_NOWAIT);
>                        VFS_SYNC(mp, MNT_NOWAIT,
>				p != NULL ? p->p_ucred : NOCRED, p);
>                        mp->mnt_flag |= asyncflag;
>                }
>        }
>}
>
>This is about half the code of the previous version, and to me it is
>much clearer than before.  

It seems to make one case simpler.  How would you handle a return from
inside the loop, like the one in getfsstat()?  Requiring a single exit
point is not an option :-).

Bruce

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-fs" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199802281349.AAA03879>