The branch main has been updated by kib:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=6acc5ed5f9c3e1b462e7ae0d1ae1c5196328fa9f

commit 6acc5ed5f9c3e1b462e7ae0d1ae1c5196328fa9f
Author:     Konstantin Belousov <k...@freebsd.org>
AuthorDate: 2025-08-18 02:46:18 +0000
Commit:     Konstantin Belousov <k...@freebsd.org>
CommitDate: 2025-08-22 11:28:53 +0000

    nfsclient: va_rdev should be NODEV for non-special nodes
    
    Server is allowed to fill any value into the rdev attribute, clear it to
    satisfy the local requirements.
    
    Reported by:    bakul
    Reviewed by:    rmacklem
    Tested by:      pho
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D51988
---
 sys/fs/nfs/nfsport.h           | 2 +-
 sys/fs/nfsclient/nfs_clport.c  | 6 +++---
 sys/fs/nfsclient/nfs_clvnops.c | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/sys/fs/nfs/nfsport.h b/sys/fs/nfs/nfsport.h
index 5a019b4989cf..4e9aae70da6f 100644
--- a/sys/fs/nfs/nfsport.h
+++ b/sys/fs/nfs/nfsport.h
@@ -1017,7 +1017,7 @@ MALLOC_DECLARE(M_NEWNFSDSESSION);
 int nfscl_loadattrcache(struct vnode **, struct nfsvattr *, void *, int, int);
 int newnfs_realign(struct mbuf **, int);
 bool ncl_pager_setsize(struct vnode *vp, u_quad_t *nsizep);
-void ncl_copy_vattr(struct vattr *dst, struct vattr *src);
+void ncl_copy_vattr(struct vnode *vp, struct vattr *dst, struct vattr *src);
 
 /*
  * If the port runs on an SMP box that can enforce Atomic ops with low
diff --git a/sys/fs/nfsclient/nfs_clport.c b/sys/fs/nfsclient/nfs_clport.c
index 704aeeeabdf2..e9f1dc23ddbe 100644
--- a/sys/fs/nfsclient/nfs_clport.c
+++ b/sys/fs/nfsclient/nfs_clport.c
@@ -412,7 +412,7 @@ nfscl_warn_fileid(struct nfsmount *nmp, struct nfsvattr 
*oldnap,
 }
 
 void
-ncl_copy_vattr(struct vattr *dst, struct vattr *src)
+ncl_copy_vattr(struct vnode *vp, struct vattr *dst, struct vattr *src)
 {
        dst->va_type = src->va_type;
        dst->va_mode = src->va_mode;
@@ -429,7 +429,7 @@ ncl_copy_vattr(struct vattr *dst, struct vattr *src)
        dst->va_birthtime = src->va_birthtime;
        dst->va_gen = src->va_gen;
        dst->va_flags = src->va_flags;
-       dst->va_rdev = src->va_rdev;
+       dst->va_rdev = VN_ISDEV(vp) ? src->va_rdev : NODEV;
        dst->va_bytes = src->va_bytes;
        dst->va_filerev = src->va_filerev;
 }
@@ -595,7 +595,7 @@ nfscl_loadattrcache(struct vnode **vpp, struct nfsvattr 
*nap, void *nvaper,
                KDTRACE_NFS_ATTRCACHE_FLUSH_DONE(vp);
        }
        if (vaper != NULL) {
-               ncl_copy_vattr(vaper, vap);
+               ncl_copy_vattr(vp, vaper, vap);
                if (np->n_flag & NCHG) {
                        if (np->n_flag & NACC)
                                vaper->va_atime = np->n_atim;
diff --git a/sys/fs/nfsclient/nfs_clvnops.c b/sys/fs/nfsclient/nfs_clvnops.c
index 52f72dc43c3f..a8b06fdb261b 100644
--- a/sys/fs/nfsclient/nfs_clvnops.c
+++ b/sys/fs/nfsclient/nfs_clvnops.c
@@ -1026,7 +1026,7 @@ nfs_getattr(struct vop_getattr_args *ap)
         * cached attributes should be ignored.
         */
        if (nmp->nm_fhsize > 0 && ncl_getattrcache(vp, &vattr) == 0) {
-               ncl_copy_vattr(vap, &vattr);
+               ncl_copy_vattr(vp, vap, &vattr);
 
                /*
                 * Get the local modify time for the case of a write

Reply via email to