MFC r257898:
Change VFS_PROLOGUE() to evaluate the mp once, convert MNTK_SHARED_WRITES and MNTK_EXTENDED_SHARED tests into inline functions.
This commit is contained in:
parent
c4e5b24a25
commit
d296e566a2
@ -424,13 +424,8 @@ needs_exclusive_leaf(struct mount *mp, int flags)
|
||||
* extended shared operations, then use a shared lock for the
|
||||
* leaf node, otherwise use an exclusive lock.
|
||||
*/
|
||||
if (flags & ISOPEN) {
|
||||
if (mp != NULL &&
|
||||
(mp->mnt_kern_flag & MNTK_EXTENDED_SHARED))
|
||||
return (0);
|
||||
else
|
||||
return (1);
|
||||
}
|
||||
if ((flags & ISOPEN) != 0)
|
||||
return (!MNT_EXTENDED_SHARED(mp));
|
||||
|
||||
/*
|
||||
* Lookup requests outside of open() that specify LOCKSHARED
|
||||
|
@ -360,8 +360,8 @@ vn_close(vp, flags, file_cred, td)
|
||||
struct mount *mp;
|
||||
int error, lock_flags;
|
||||
|
||||
if (vp->v_type != VFIFO && !(flags & FWRITE) && vp->v_mount != NULL &&
|
||||
vp->v_mount->mnt_kern_flag & MNTK_EXTENDED_SHARED)
|
||||
if (vp->v_type != VFIFO && (flags & FWRITE) == 0 &&
|
||||
MNT_EXTENDED_SHARED(vp->v_mount))
|
||||
lock_flags = LK_SHARED;
|
||||
else
|
||||
lock_flags = LK_EXCLUSIVE;
|
||||
|
@ -362,8 +362,19 @@ void __mnt_vnode_markerfree_active(struct vnode **mvp, struct mount *);
|
||||
#define MNTK_LOOKUP_SHARED 0x40000000 /* FS supports shared lock lookups */
|
||||
#define MNTK_NOKNOTE 0x80000000 /* Don't send KNOTEs from VOP hooks */
|
||||
|
||||
#define MNT_SHARED_WRITES(mp) (((mp) != NULL) && \
|
||||
((mp)->mnt_kern_flag & MNTK_SHARED_WRITES))
|
||||
static inline int
|
||||
MNT_SHARED_WRITES(struct mount *mp)
|
||||
{
|
||||
|
||||
return (mp != NULL && (mp->mnt_kern_flag & MNTK_SHARED_WRITES) != 0);
|
||||
}
|
||||
|
||||
static inline int
|
||||
MNT_EXTENDED_SHARED(struct mount *mp)
|
||||
{
|
||||
|
||||
return (mp != NULL && (mp->mnt_kern_flag & MNTK_EXTENDED_SHARED) != 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Sysctl CTL_VFS definitions.
|
||||
@ -636,10 +647,12 @@ struct vfsops {
|
||||
vfs_statfs_t __vfs_statfs;
|
||||
|
||||
#define VFS_PROLOGUE(MP) do { \
|
||||
struct mount *mp__; \
|
||||
int _enable_stops; \
|
||||
\
|
||||
_enable_stops = ((MP) != NULL && \
|
||||
((MP)->mnt_vfc->vfc_flags & VFCF_SBDRY) && sigdeferstop())
|
||||
mp__ = (MP); \
|
||||
_enable_stops = (mp__ != NULL && \
|
||||
(mp__->mnt_vfc->vfc_flags & VFCF_SBDRY) && sigdeferstop())
|
||||
|
||||
#define VFS_EPILOGUE(MP) \
|
||||
if (_enable_stops) \
|
||||
|
Loading…
x
Reference in New Issue
Block a user