Messages in this thread Patch in this message | | | Subject | 2.3.51: NFSv3 uses multiplication with u64 | Date | Tue, 14 Mar 2000 16:31:10 -0400 | From | Horst von Brand <> |
| |
The build of the kernel on SPARC fails when linking due to use of _muldi3 in nfs3svc_encode_fsstatres (file fs/nfsd/nfs3xdr.c):
nfs3svc_encode_fsstatres(struct svc_rqst *rqstp, u32 *p, struct nfsd3_fsstatres *resp) { struct statfs *s = &resp->stats; u64 bs = s->f_bsize;
*p++ = xdr_zero; /* no post_op_attr */
if (resp->status == 0) { p = xdr_encode_hyper(p, bs * s->f_blocks); /* total bytes */ p = xdr_encode_hyper(p, bs * s->f_bfree); /* free bytes */ p = xdr_encode_hyper(p, bs * s->f_bavail); /* user available bytes */ p = xdr_encode_hyper(p, s->f_files); /* total inodes */ p = xdr_encode_hyper(p, s->f_ffree); /* free inodes */ p = xdr_encode_hyper(p, s->f_ffree); /* user available inodes */ *p++ = htonl(resp->invarsec); /* mean unchanged time */ } return xdr_ressize_check(rqstp, p); }
I assume bs is block size; a block size that needs a u64 to keep would be nice, but a bit impractical right now. In particular, the three multiplications above get the kernel not to link on SPARC.
Checking include/asm-*/statfs.h, everybody seems to agree it is a long, except alpha (int), and sparc64 has int in statfs32 and long in statfs. This should fix it (as long as there are no files > 2Gb). In the long run, f_bsize is always a power of 2, or isn't it? If so, this (and perhaps other such operations) should be replaced by shifts.
--- fs/nfsd/nfs3xdr.c.dist-2.3.51 Tue Mar 14 16:24:03 2000 +++ fs/nfsd/nfs3xdr.c Tue Mar 14 16:24:16 2000 @@ -775,7 +775,7 @@ if (resp->status == 0) { p = xdr_encode_hyper(p, (u64) bs * s->f_blocks); /* total bytes */ p = xdr_encode_hyper(p, (u64) bs * s->f_bfree); /* free bytes */- p = xdr_encode_hyper(p, bs * s->f_bavail); /* user available bytes */ + p = xdr_encode_hyper(p, (u64) bs * s->f_bavail); /* user available bytes */ p = xdr_encode_hyper(p, s->f_files); /* total inodes */ p = xdr_encode_hyper(p, s->f_ffree); /* free inodes */ p = xdr_encode_hyper(p, s->f_ffree); /* user available inodes */ -- Dr. Horst H. von Brand mailto:vonbrand@inf.utfsm.cl Departamento de Informatica Fono: +56 32 654431 Universidad Tecnica Federico Santa Maria +56 32 654239 Casilla 110-V, Valparaiso, Chile Fax: +56 32 797513 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |