summaryrefslogtreecommitdiff
path: root/libdiskfs/fsys-getfile.c
diff options
context:
space:
mode:
Diffstat (limited to 'libdiskfs/fsys-getfile.c')
-rw-r--r--libdiskfs/fsys-getfile.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/libdiskfs/fsys-getfile.c b/libdiskfs/fsys-getfile.c
index efa0cdf0..2fe9495e 100644
--- a/libdiskfs/fsys-getfile.c
+++ b/libdiskfs/fsys-getfile.c
@@ -1,6 +1,6 @@
/* Return the file for a given handle (for nfs server support)
- Copyright (C) 1997,99,2001 Free Software Foundation, Inc.
+ Copyright (C) 1997,99,2001,02 Free Software Foundation, Inc.
This file is part of the GNU Hurd.
@@ -39,6 +39,7 @@ diskfs_S_fsys_getfile (mach_port_t fsys,
struct node *node;
const union diskfs_fhandle *f;
struct protid *new_cred;
+ struct peropen *new_po;
struct iouser *user;
struct port_info *pt =
ports_lookup_port (diskfs_port_bucket, fsys, diskfs_control_class);
@@ -86,8 +87,13 @@ diskfs_S_fsys_getfile (mach_port_t fsys,
&& ! diskfs_check_readonly ())
flags |= O_WRITE;
- err = diskfs_create_protid (diskfs_make_peropen (node, flags, 0),
- user, &new_cred);
+ err = diskfs_make_peropen (node, flags, 0, &new_po);
+ if (! err)
+ {
+ err = diskfs_create_protid (new_po, user, &new_cred);
+ if (err)
+ diskfs_release_peropen (new_po);
+ }
iohelp_free_iouser (user);