summaryrefslogtreecommitdiffstats
path: root/sys/fs/devfs/devfs_vnops.c
diff options
context:
space:
mode:
authorjh <jh@FreeBSD.org>2010-09-27 17:47:09 +0000
committerjh <jh@FreeBSD.org>2010-09-27 17:47:09 +0000
commitb6e78e30f23dbed7263727af46739f94ef85fd86 (patch)
treeaac5e5193fff6dc7e4ad901a2ea6b4bab1a82a25 /sys/fs/devfs/devfs_vnops.c
parent0901947e8d8500bb8120febd32587bc1eeabca98 (diff)
downloadFreeBSD-src-b6e78e30f23dbed7263727af46739f94ef85fd86.zip
FreeBSD-src-b6e78e30f23dbed7263727af46739f94ef85fd86.tar.gz
Add reference counting for devfs paths containing user created symbolic
links. The reference counting is needed to be able to determine if a specific devfs path exists. For true device file paths we can traverse the cdevp_list but a separate directory list is needed for user created symbolic links. Add a new directory entry flag DE_USER to mark entries which should unreference their parent directory on deletion. A new function to traverse cdevp_list and the directory list will be introduced in a separate commit. Idea from: kib Reviewed by: kib
Diffstat (limited to 'sys/fs/devfs/devfs_vnops.c')
-rw-r--r--sys/fs/devfs/devfs_vnops.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/fs/devfs/devfs_vnops.c b/sys/fs/devfs/devfs_vnops.c
index bbf0680..5f1063d 100644
--- a/sys/fs/devfs/devfs_vnops.c
+++ b/sys/fs/devfs/devfs_vnops.c
@@ -1564,6 +1564,7 @@ devfs_symlink(struct vop_symlink_args *ap)
dd = ap->a_dvp->v_data;
de = devfs_newdirent(ap->a_cnp->cn_nameptr, ap->a_cnp->cn_namelen);
+ de->de_flags = DE_USER;
de->de_uid = 0;
de->de_gid = 0;
de->de_mode = 0755;
@@ -1587,6 +1588,7 @@ devfs_symlink(struct vop_symlink_args *ap)
de_dotdot = TAILQ_FIRST(&dd->de_dlist); /* "." */
de_dotdot = TAILQ_NEXT(de_dotdot, de_list); /* ".." */
TAILQ_INSERT_AFTER(&dd->de_dlist, de_dotdot, de, de_list);
+ devfs_dir_ref_de(dmp, dd);
return (devfs_allocv(de, ap->a_dvp->v_mount, LK_EXCLUSIVE, ap->a_vpp));
}
OpenPOWER on IntegriCloud