User Details
- User Since
- Jan 13 2015, 10:58 PM (599 w, 1 d)
Tue, Jul 7
Mon, Jul 6
Sun, Jul 5
Sat, Jul 4
Thu, Jul 2
Wed, Jul 1
In the NFS game there are two things...
- The RFCs. They don't define exactly when an NFS server should return ESTALE, so I don't think either the current behaviour or the behaviour with this patch is incorrect.
- Linux. It has become the "defacto standard" for NFS. (Solaris once was the "defacto standard" but??)
So, if this patch results in behaviour consistent with
Linux, I think it is reasonable to do.
Sat, Jun 27
Fri, Jun 26
Thu, Jun 25
Tue, Jun 23
Sun, Jun 21
I also updated the comment in kgss_load().
Sat, Jun 20
Fri, Jun 19
I guess it does. I don't know UFS, but it does seem "inefficient" to first do
UFS_INODE_SET_FLAG_SHARED(), which locks/unlocks the vnode interlock and
then call ufs_itimes(), which locks the vnode interlock again and calls ufs_itimes_locked().
This looks ok to me, although I'll admit I am not
conversant with UFS semantics, so I'll leave that
to others.
Thu, Jun 18
Made changes as suggested by kib@.
Wed, Jun 17
Changed return value to EBUSY when the nfsd
are running and got rid of the locking around
reading the list head, as suggested by markj@.
Tue, Jun 16
Add vfs_netexport_reset() as suggested by markj@.
Also, add KASSERT()s to check ne_ref > 0.
Mon, Jun 15
Sun, Jun 14
Updated with changes recommended by markj@
and kib@. Mostly removal of unnecessary locking
calls, plus a couple of important typo fixes.
Added vfs_netexport_acquire() as suggested by markj@
and renamed vfs_netexport_free() to vfs_netexport_release(),
since that seemed more consistent.
This looks fine to me and seemed to behave when I
tested with lotsa printf()s.
Ok, so I finally think I remember how this works;-)
Your patch tests out well, but I think it needs something like the following:
- sys/rpc/rpcsec_tls/rpctls_impl.c.yyy 2026-06-14 09:08:45.910463000 -0700
+++ sys/rpc/rpcsec_tls/rpctls_impl.c 2026-06-14 09:01:06.722976000 -0700
@@ -298,8 +298,18 @@ printf("rpctls_connect soref so=%p\n", so);
stat = rpctlscd_connect_2(&arg, &res, rpctls_connect_handle); if (stat == RPC_SUCCESS) *reterr = res.reterr;
- else
+ else {
+ struct ct_data *ct = (struct ct_data *)newclient->cl_private;
+
+printf("clnt at rpctls_rpc_failed so=%p\n", so);
rpctls_rpc_failed(&ups, so);
+ /*
+ * Since rpctls_rpc_failed() will do a soclose() if the
+ * daemon is not running, set ct_tlsstate to avoid doing
+ * a close in clnt_vc_destroy().
+ */
+ ct->ct_tlsstate = RPCTLS_INHANDSHAKE;
+ }
Now that I am testing it, this does not seem to be needed.
(You get to the "else" case if rpc.tlsservd is running on the
server and you use your little tls_trigger.c test against it.)
Once I've put it through some testing, I'll update the patch.
Ok, so now I see what you've done. You are now taking the
soref() when it is inserted in the RB tree instead of when it
is taken out.
Sat, Jun 13
Fix the memset() so that it only zeros out
part of the structure, as spotted by markj@.
I don't see why adding another soref() stops a socket
from being leaked?
Use refcount_init() as suggested by kib@.
Modified patch to use a local static bool instead
of kgss_gssd_cl. I also moved the svc_nl_create()
and svc_reg() function calls in gssd.c to before
the daemon() call, to avoid any race with nfsd
startup.
As suggested by glebius@.
Do you need me to commit it or do you have a
commit bit for src?
Thanks for the comments.
Fri, Jun 12
Jun 8 2026
Jun 5 2026
Jun 4 2026
Jun 3 2026
Jun 2 2026
I'll just leave things in their current state.
May 28 2026
May 25 2026
May 23 2026
May 22 2026
I'll commit it authored by you, since I don't recall
that you are a committer.
Oh, and I'd leave the comment (or something like it)
in the code, so that it is obvious why the cast'ng is done.
If we cast the ids to (uintmax_t) and then use %ju,
it will still work if uid_t/gid_t ever becomes 64bits.
