summaryrefslogtreecommitdiffstats
path: root/sys/fs/tmpfs/tmpfs_vnops.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2015-02-11 09:02:21 +0000
committerkib <kib@FreeBSD.org>2015-02-11 09:02:21 +0000
commit7ca5c317aee117a4f147780b44663907203afc11 (patch)
tree544d9b4141cc31e9d2012916d768135800fbd2ca /sys/fs/tmpfs/tmpfs_vnops.c
parentf5a4512544e1004f761b474f350ae4ebd61bb09c (diff)
downloadFreeBSD-src-7ca5c317aee117a4f147780b44663907203afc11.zip
FreeBSD-src-7ca5c317aee117a4f147780b44663907203afc11.tar.gz
MFC r277828:
Update mtime for tmpfs files modified through memory mapping. MFC r277969: Update both ctime and mtime for writes to tmpfs files. MFC r277972: Remove single-use boolean. MFC r278151: Remove duplicated assignment.
Diffstat (limited to 'sys/fs/tmpfs/tmpfs_vnops.c')
-rw-r--r--sys/fs/tmpfs/tmpfs_vnops.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/sys/fs/tmpfs/tmpfs_vnops.c b/sys/fs/tmpfs/tmpfs_vnops.c
index c811b9a..885f84c 100644
--- a/sys/fs/tmpfs/tmpfs_vnops.c
+++ b/sys/fs/tmpfs/tmpfs_vnops.c
@@ -453,7 +453,6 @@ tmpfs_write(struct vop_write_args *v)
struct tmpfs_node *node;
off_t oldsize;
int error, ioflag;
- boolean_t extended;
vp = v->a_vp;
uio = v->a_uio;
@@ -473,8 +472,7 @@ tmpfs_write(struct vop_write_args *v)
return (EFBIG);
if (vn_rlimit_fsize(vp, uio, uio->uio_td))
return (EFBIG);
- extended = uio->uio_offset + uio->uio_resid > node->tn_size;
- if (extended) {
+ if (uio->uio_offset + uio->uio_resid > node->tn_size) {
error = tmpfs_reg_resize(vp, uio->uio_offset + uio->uio_resid,
FALSE);
if (error != 0)
@@ -483,7 +481,7 @@ tmpfs_write(struct vop_write_args *v)
error = uiomove_object(node->tn_reg.tn_aobj, node->tn_size, uio);
node->tn_status |= TMPFS_NODE_ACCESSED | TMPFS_NODE_MODIFIED |
- (extended ? TMPFS_NODE_CHANGED : 0);
+ TMPFS_NODE_CHANGED;
if (node->tn_mode & (S_ISUID | S_ISGID)) {
if (priv_check_cred(v->a_cred, PRIV_VFS_RETAINSUGID, 0))
node->tn_mode &= ~(S_ISUID | S_ISGID);
@@ -505,6 +503,7 @@ tmpfs_fsync(struct vop_fsync_args *v)
MPASS(VOP_ISLOCKED(vp));
+ tmpfs_check_mtime(vp);
tmpfs_update(vp);
return 0;
@@ -1222,16 +1221,16 @@ tmpfs_readlink(struct vop_readlink_args *v)
static int
tmpfs_inactive(struct vop_inactive_args *v)
{
- struct vnode *vp = v->a_vp;
-
+ struct vnode *vp;
struct tmpfs_node *node;
+ vp = v->a_vp;
node = VP_TO_TMPFS_NODE(vp);
-
if (node->tn_links == 0)
vrecycle(vp);
-
- return 0;
+ else
+ tmpfs_check_mtime(vp);
+ return (0);
}
int
OpenPOWER on IntegriCloud