Page MenuHomeFreeBSD

D59503.id.diff
No OneTemporary

D59503.id.diff

diff --git a/sys/fs/p9fs/p9fs.h b/sys/fs/p9fs/p9fs.h
--- a/sys/fs/p9fs/p9fs.h
+++ b/sys/fs/p9fs/p9fs.h
@@ -114,6 +114,7 @@
#define P9FS_NODE_ROOT 0x2 /* indicating root p9fs node */
#define P9FS_NODE_DELETED 0x4 /* indicating file or directory delete */
#define P9FS_NODE_IN_SESSION 0x8 /* p9fs_node is in the session - virt_node_list */
+#define P9FS_NODE_SKIP_VFID 0x10 /* indicating whether to clunk vfid */
#define IS_ROOT(node) (((node)->flags & P9FS_NODE_ROOT) != 0)
#define P9FS_NODE_SETF(n, f) atomic_set_int(&(n)->flags, (f))
diff --git a/sys/fs/p9fs/p9fs_subr.c b/sys/fs/p9fs/p9fs_subr.c
--- a/sys/fs/p9fs/p9fs_subr.c
+++ b/sys/fs/p9fs/p9fs_subr.c
@@ -191,9 +191,11 @@
{
struct p9_fid *fid, *tfid;
- STAILQ_FOREACH_SAFE(fid, &np->vfid_list, fid_next, tfid) {
- STAILQ_REMOVE(&np->vfid_list, fid, p9_fid, fid_next);
- p9_client_clunk(fid);
+ if ((np->flags & P9FS_NODE_SKIP_VFID) == 0) {
+ STAILQ_FOREACH_SAFE(fid, &np->vfid_list, fid_next, tfid) {
+ STAILQ_REMOVE(&np->vfid_list, fid, p9_fid, fid_next);
+ p9_client_clunk(fid);
+ }
}
if (!leave_ofids) {
diff --git a/sys/fs/p9fs/p9fs_vfsops.c b/sys/fs/p9fs/p9fs_vfsops.c
--- a/sys/fs/p9fs/p9fs_vfsops.c
+++ b/sys/fs/p9fs/p9fs_vfsops.c
@@ -336,6 +336,7 @@
/*Fill the name of the file in inode */
inode->i_name = malloc(strlen(name)+1, M_TEMP, M_NOWAIT | M_ZERO);
strlcpy(inode->i_name, name, strlen(name)+1);
+ P9FS_NODE_SETF(np, P9FS_NODE_SKIP_VFID);
} else {
vp->v_type = VDIR; /* root vp is a directory */
vp->v_vflag |= VV_ROOT;
@@ -374,6 +375,7 @@
P9FS_NODE_SETF(np, P9FS_NODE_IN_SESSION);
P9FS_UNLOCK(vses);
vn_set_state(vp, VSTATE_CONSTRUCTED);
+ P9FS_NODE_CLRF(np, P9FS_NODE_SKIP_VFID);
*vpp = vp;
return (0);

File Metadata

Mime Type
text/plain
Expires
Wed, Sep 9, 9:10 AM (11 h, 47 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
38576608
Default Alt Text
D59503.id.diff (1 KB)

Event Timeline