nfs4proc.c (876c553cb41026cb6ad3cef970a35e5f69c42a25) nfs4proc.c (7fe2a71dda349a1afa75781f0cc7975be9784d15)
1/*
2 * Server-side procedures for NFSv4.
3 *
4 * Copyright (c) 2002 The Regents of the University of Michigan.
5 * All rights reserved.
6 *
7 * Kendrick Smith <kmsmith@umich.edu>
8 * Andy Adamson <andros@umich.edu>

--- 272 unchanged lines hidden (view full) ---

281 *
282 * Upon return, caller must release @fhp and @resfhp.
283 */
284static __be32
285nfsd4_create_file(struct svc_rqst *rqstp, struct svc_fh *fhp,
286 struct svc_fh *resfhp, struct nfsd4_open *open)
287{
288 struct iattr *iap = &open->op_iattr;
1/*
2 * Server-side procedures for NFSv4.
3 *
4 * Copyright (c) 2002 The Regents of the University of Michigan.
5 * All rights reserved.
6 *
7 * Kendrick Smith <kmsmith@umich.edu>
8 * Andy Adamson <andros@umich.edu>

--- 272 unchanged lines hidden (view full) ---

281 *
282 * Upon return, caller must release @fhp and @resfhp.
283 */
284static __be32
285nfsd4_create_file(struct svc_rqst *rqstp, struct svc_fh *fhp,
286 struct svc_fh *resfhp, struct nfsd4_open *open)
287{
288 struct iattr *iap = &open->op_iattr;
289 struct nfsd_attrs attrs = {
290 .na_iattr = iap,
291 };
289 struct dentry *parent, *child;
290 __u32 v_mtime, v_atime;
291 struct inode *inode;
292 __be32 status;
293 int host_err;
294
295 if (isdotent(open->op_fname, open->op_fnamelen))
296 return nfserr_exist;

--- 102 unchanged lines hidden (view full) ---

399 ATTR_MTIME_SET|ATTR_ATIME_SET;
400 iap->ia_mtime.tv_sec = v_mtime;
401 iap->ia_atime.tv_sec = v_atime;
402 iap->ia_mtime.tv_nsec = 0;
403 iap->ia_atime.tv_nsec = 0;
404 }
405
406set_attr:
292 struct dentry *parent, *child;
293 __u32 v_mtime, v_atime;
294 struct inode *inode;
295 __be32 status;
296 int host_err;
297
298 if (isdotent(open->op_fname, open->op_fnamelen))
299 return nfserr_exist;

--- 102 unchanged lines hidden (view full) ---

402 ATTR_MTIME_SET|ATTR_ATIME_SET;
403 iap->ia_mtime.tv_sec = v_mtime;
404 iap->ia_atime.tv_sec = v_atime;
405 iap->ia_mtime.tv_nsec = 0;
406 iap->ia_atime.tv_nsec = 0;
407 }
408
409set_attr:
407 status = nfsd_create_setattr(rqstp, fhp, resfhp, iap);
410 status = nfsd_create_setattr(rqstp, fhp, resfhp, &attrs);
408
409out:
410 fh_unlock(fhp);
411 if (child && !IS_ERR(child))
412 dput(child);
413 fh_drop_write(fhp);
414 return status;
415}

--- 366 unchanged lines hidden (view full) ---

782 (__be32 *)commit->co_verf.data);
783}
784
785static __be32
786nfsd4_create(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
787 union nfsd4_op_u *u)
788{
789 struct nfsd4_create *create = &u->create;
411
412out:
413 fh_unlock(fhp);
414 if (child && !IS_ERR(child))
415 dput(child);
416 fh_drop_write(fhp);
417 return status;
418}

--- 366 unchanged lines hidden (view full) ---

785 (__be32 *)commit->co_verf.data);
786}
787
788static __be32
789nfsd4_create(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
790 union nfsd4_op_u *u)
791{
792 struct nfsd4_create *create = &u->create;
793 struct nfsd_attrs attrs = {
794 .na_iattr = &create->cr_iattr,
795 };
790 struct svc_fh resfh;
791 __be32 status;
792 dev_t rdev;
793
794 fh_init(&resfh, NFS4_FHSIZE);
795
796 status = fh_verify(rqstp, &cstate->current_fh, S_IFDIR, NFSD_MAY_NOP);
797 if (status)

--- 15 unchanged lines hidden (view full) ---

813 case NF4BLK:
814 status = nfserr_inval;
815 rdev = MKDEV(create->cr_specdata1, create->cr_specdata2);
816 if (MAJOR(rdev) != create->cr_specdata1 ||
817 MINOR(rdev) != create->cr_specdata2)
818 goto out_umask;
819 status = nfsd_create(rqstp, &cstate->current_fh,
820 create->cr_name, create->cr_namelen,
796 struct svc_fh resfh;
797 __be32 status;
798 dev_t rdev;
799
800 fh_init(&resfh, NFS4_FHSIZE);
801
802 status = fh_verify(rqstp, &cstate->current_fh, S_IFDIR, NFSD_MAY_NOP);
803 if (status)

--- 15 unchanged lines hidden (view full) ---

819 case NF4BLK:
820 status = nfserr_inval;
821 rdev = MKDEV(create->cr_specdata1, create->cr_specdata2);
822 if (MAJOR(rdev) != create->cr_specdata1 ||
823 MINOR(rdev) != create->cr_specdata2)
824 goto out_umask;
825 status = nfsd_create(rqstp, &cstate->current_fh,
826 create->cr_name, create->cr_namelen,
821 &create->cr_iattr, S_IFBLK, rdev, &resfh);
827 &attrs, S_IFBLK, rdev, &resfh);
822 break;
823
824 case NF4CHR:
825 status = nfserr_inval;
826 rdev = MKDEV(create->cr_specdata1, create->cr_specdata2);
827 if (MAJOR(rdev) != create->cr_specdata1 ||
828 MINOR(rdev) != create->cr_specdata2)
829 goto out_umask;
830 status = nfsd_create(rqstp, &cstate->current_fh,
831 create->cr_name, create->cr_namelen,
828 break;
829
830 case NF4CHR:
831 status = nfserr_inval;
832 rdev = MKDEV(create->cr_specdata1, create->cr_specdata2);
833 if (MAJOR(rdev) != create->cr_specdata1 ||
834 MINOR(rdev) != create->cr_specdata2)
835 goto out_umask;
836 status = nfsd_create(rqstp, &cstate->current_fh,
837 create->cr_name, create->cr_namelen,
832 &create->cr_iattr, S_IFCHR, rdev, &resfh);
838 &attrs, S_IFCHR, rdev, &resfh);
833 break;
834
835 case NF4SOCK:
836 status = nfsd_create(rqstp, &cstate->current_fh,
837 create->cr_name, create->cr_namelen,
839 break;
840
841 case NF4SOCK:
842 status = nfsd_create(rqstp, &cstate->current_fh,
843 create->cr_name, create->cr_namelen,
838 &create->cr_iattr, S_IFSOCK, 0, &resfh);
844 &attrs, S_IFSOCK, 0, &resfh);
839 break;
840
841 case NF4FIFO:
842 status = nfsd_create(rqstp, &cstate->current_fh,
843 create->cr_name, create->cr_namelen,
845 break;
846
847 case NF4FIFO:
848 status = nfsd_create(rqstp, &cstate->current_fh,
849 create->cr_name, create->cr_namelen,
844 &create->cr_iattr, S_IFIFO, 0, &resfh);
850 &attrs, S_IFIFO, 0, &resfh);
845 break;
846
847 case NF4DIR:
848 create->cr_iattr.ia_valid &= ~ATTR_SIZE;
849 status = nfsd_create(rqstp, &cstate->current_fh,
850 create->cr_name, create->cr_namelen,
851 break;
852
853 case NF4DIR:
854 create->cr_iattr.ia_valid &= ~ATTR_SIZE;
855 status = nfsd_create(rqstp, &cstate->current_fh,
856 create->cr_name, create->cr_namelen,
851 &create->cr_iattr, S_IFDIR, 0, &resfh);
857 &attrs, S_IFDIR, 0, &resfh);
852 break;
853
854 default:
855 status = nfserr_badtype;
856 }
857
858 if (status)
859 goto out;

--- 277 unchanged lines hidden (view full) ---

1137 exp_put(u->secinfo_no_name.sin_exp);
1138}
1139
1140static __be32
1141nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
1142 union nfsd4_op_u *u)
1143{
1144 struct nfsd4_setattr *setattr = &u->setattr;
858 break;
859
860 default:
861 status = nfserr_badtype;
862 }
863
864 if (status)
865 goto out;

--- 277 unchanged lines hidden (view full) ---

1143 exp_put(u->secinfo_no_name.sin_exp);
1144}
1145
1146static __be32
1147nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
1148 union nfsd4_op_u *u)
1149{
1150 struct nfsd4_setattr *setattr = &u->setattr;
1151 struct nfsd_attrs attrs = {
1152 .na_iattr = &setattr->sa_iattr,
1153 };
1145 __be32 status = nfs_ok;
1146 int err;
1147
1148 if (setattr->sa_iattr.ia_valid & ATTR_SIZE) {
1149 status = nfs4_preprocess_stateid_op(rqstp, cstate,
1150 &cstate->current_fh, &setattr->sa_stateid,
1151 WR_STATE, NULL, NULL);
1152 if (status) {

--- 16 unchanged lines hidden (view full) ---

1169 setattr->sa_acl);
1170 if (status)
1171 goto out;
1172 if (setattr->sa_label.len)
1173 status = nfsd4_set_nfs4_label(rqstp, &cstate->current_fh,
1174 &setattr->sa_label);
1175 if (status)
1176 goto out;
1154 __be32 status = nfs_ok;
1155 int err;
1156
1157 if (setattr->sa_iattr.ia_valid & ATTR_SIZE) {
1158 status = nfs4_preprocess_stateid_op(rqstp, cstate,
1159 &cstate->current_fh, &setattr->sa_stateid,
1160 WR_STATE, NULL, NULL);
1161 if (status) {

--- 16 unchanged lines hidden (view full) ---

1178 setattr->sa_acl);
1179 if (status)
1180 goto out;
1181 if (setattr->sa_label.len)
1182 status = nfsd4_set_nfs4_label(rqstp, &cstate->current_fh,
1183 &setattr->sa_label);
1184 if (status)
1185 goto out;
1177 status = nfsd_setattr(rqstp, &cstate->current_fh, &setattr->sa_iattr,
1186 status = nfsd_setattr(rqstp, &cstate->current_fh, &attrs,
1178 0, (time64_t)0);
1179out:
1180 fh_drop_write(&cstate->current_fh);
1181 return status;
1182}
1183
1184static __be32
1185nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,

--- 2456 unchanged lines hidden ---
1187 0, (time64_t)0);
1188out:
1189 fh_drop_write(&cstate->current_fh);
1190 return status;
1191}
1192
1193static __be32
1194nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,

--- 2456 unchanged lines hidden ---