]> Pileus Git - ~andy/linux/blobdiff - fs/nfs/nfs4xdr.c
Merge tag 'jfs-3.10' of git://github.com/kleikamp/linux-shaggy
[~andy/linux] / fs / nfs / nfs4xdr.c
index ae0190b82694999be8f320f09f3ffdb1f43e4338..3c79c5878c6da6689df58f4b0990a777798fdf9e 100644 (file)
@@ -1054,8 +1054,7 @@ static void encode_attrs(struct xdr_stream *xdr, const struct iattr *iap, const
        if (iap->ia_valid & ATTR_ATIME_SET) {
                bmval1 |= FATTR4_WORD1_TIME_ACCESS_SET;
                *p++ = cpu_to_be32(NFS4_SET_TO_CLIENT_TIME);
-               *p++ = cpu_to_be32(0);
-               *p++ = cpu_to_be32(iap->ia_atime.tv_sec);
+               p = xdr_encode_hyper(p, (s64)iap->ia_atime.tv_sec);
                *p++ = cpu_to_be32(iap->ia_atime.tv_nsec);
        }
        else if (iap->ia_valid & ATTR_ATIME) {
@@ -1065,8 +1064,7 @@ static void encode_attrs(struct xdr_stream *xdr, const struct iattr *iap, const
        if (iap->ia_valid & ATTR_MTIME_SET) {
                bmval1 |= FATTR4_WORD1_TIME_MODIFY_SET;
                *p++ = cpu_to_be32(NFS4_SET_TO_CLIENT_TIME);
-               *p++ = cpu_to_be32(0);
-               *p++ = cpu_to_be32(iap->ia_mtime.tv_sec);
+               p = xdr_encode_hyper(p, (s64)iap->ia_mtime.tv_sec);
                *p++ = cpu_to_be32(iap->ia_mtime.tv_nsec);
        }
        else if (iap->ia_valid & ATTR_MTIME) {
@@ -1362,33 +1360,28 @@ static inline void encode_openhdr(struct xdr_stream *xdr, const struct nfs_opena
 
 static inline void encode_createmode(struct xdr_stream *xdr, const struct nfs_openargs *arg)
 {
+       struct iattr dummy;
        __be32 *p;
-       struct nfs_client *clp;
 
        p = reserve_space(xdr, 4);
-       switch(arg->open_flags & O_EXCL) {
-       case 0:
+       switch(arg->createmode) {
+       case NFS4_CREATE_UNCHECKED:
                *p = cpu_to_be32(NFS4_CREATE_UNCHECKED);
                encode_attrs(xdr, arg->u.attrs, arg->server);
                break;
-       default:
-               clp = arg->server->nfs_client;
-               if (clp->cl_mvops->minor_version > 0) {
-                       if (nfs4_has_persistent_session(clp)) {
-                               *p = cpu_to_be32(NFS4_CREATE_GUARDED);
-                               encode_attrs(xdr, arg->u.attrs, arg->server);
-                       } else {
-                               struct iattr dummy;
-
-                               *p = cpu_to_be32(NFS4_CREATE_EXCLUSIVE4_1);
-                               encode_nfs4_verifier(xdr, &arg->u.verifier);
-                               dummy.ia_valid = 0;
-                               encode_attrs(xdr, &dummy, arg->server);
-                       }
-               } else {
-                       *p = cpu_to_be32(NFS4_CREATE_EXCLUSIVE);
-                       encode_nfs4_verifier(xdr, &arg->u.verifier);
-               }
+       case NFS4_CREATE_GUARDED:
+               *p = cpu_to_be32(NFS4_CREATE_GUARDED);
+               encode_attrs(xdr, arg->u.attrs, arg->server);
+               break;
+       case NFS4_CREATE_EXCLUSIVE:
+               *p = cpu_to_be32(NFS4_CREATE_EXCLUSIVE);
+               encode_nfs4_verifier(xdr, &arg->u.verifier);
+               break;
+       case NFS4_CREATE_EXCLUSIVE4_1:
+               *p = cpu_to_be32(NFS4_CREATE_EXCLUSIVE4_1);
+               encode_nfs4_verifier(xdr, &arg->u.verifier);
+               dummy.ia_valid = 0;
+               encode_attrs(xdr, &dummy, arg->server);
        }
 }