diff options
| -rw-r--r-- | include/nfs_prot.h | 1 | ||||
| -rw-r--r-- | plpnfsd/mp_pfs_ops.c | 5 | 
2 files changed, 4 insertions, 2 deletions
diff --git a/include/nfs_prot.h b/include/nfs_prot.h index 8bc490f..acba688 100644 --- a/include/nfs_prot.h +++ b/include/nfs_prot.h @@ -40,6 +40,7 @@  #define NFSMODE_LNK 0120000  #define NFSMODE_SOCK 0140000  #define NFSMODE_FIFO 0010000 +#define NFSMODE_MASK 07770000  #if !defined(hpux) && !defined(__sgi)  enum nfsstat { diff --git a/plpnfsd/mp_pfs_ops.c b/plpnfsd/mp_pfs_ops.c index e90b7a5..03b0811 100644 --- a/plpnfsd/mp_pfs_ops.c +++ b/plpnfsd/mp_pfs_ops.c @@ -1001,7 +1001,7 @@ nfsproc_setattr_2(sattrargs *sa)  		if (rfsv_isalive())  			add_cache(&attrcache, inode->inode, fp);  	} -	if ((sa->attributes.mode != fp->mode) && +	if ((sa->attributes.mode != (fp->mode & ~NFSMODE_MASK)) &&  	    (sa->attributes.mode != -1)) {  		long psisattr, psidattr;  		attr2pattr(sa->attributes.mode, fp->mode, &psisattr, &psidattr); @@ -1017,7 +1017,8 @@ nfsproc_setattr_2(sattrargs *sa)  				return &res;  			}  		} -		fp->mode = sa->attributes.mode; +		debuglog("changing mode from %o to %o\n", fp->mode, (fp->mode & NFSMODE_MASK) | sa->attributes.mode); +		fp->mode = (fp->mode & NFSMODE_MASK) | sa->attributes.mode;  		rem_cache(&attrcache, inode->inode);  		if (rfsv_isalive() && !builtin)  			add_cache(&attrcache, inode->inode, fp);  | 
