misc server patches
Subsystems (2)
These are a few more server patches I'm queueing up for 3.4, absent objections.
--b.
PATCH 1/3 nfsd4: delay setting current filehandle till success
From: "J. Bruce Fields" <[email protected]>
Compound processing stops on error, so the current filehandle won't be used on error. Thus the order here doesn't really matter. It'll be more convenient to do it later, though.
--- fs/nfsd/nfs4proc.c | 8 +++----- 1 files changed, 3 insertions(+), 5 deletions(-)
fs/nfsd/nfs4proc.c +3 -5
@@ -247,16 +247,14 @@ do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_oif (is_create_with_attrs (open) && open->op_acl !=NULL )do_set_nfs4_acl (rqstp, &resfh, open->op_acl, open->op_bmval); -set_change_info (&open->op_cinfo, current_fh); -fh_dup2 (current_fh, &resfh); -/* set reply cache */ fh_copy_shallow (&open->op_openowner->oo_owner.so_replay.rp_openfh, &resfh.fh_handle);if (!open->op_created) - status =do_open_permission (rqstp, current_fh, open, + status =do_open_permission (rqstp, &resfh, open,NFSD_MAY_NOP ); - +set_change_info (&open->op_cinfo, current_fh); +fh_dup2 (current_fh, &resfh); out:fh_put (&resfh);return status;
Signature · 1 line
1.7.5.4
PATCH 2/3 nfsd4: reduce do_open_lookup() stack usage
In reply to J. Bruce FieldsFrom: "J. Bruce Fields" <[email protected]>
I get 320 bytes for struct svc_fh on x86_64, really a little large to be putting on the stack; kmalloc() instead.
--- fs/nfsd/nfs4proc.c | 24 ++++++++++++++---------- 1 files changed, 14 insertions(+), 10 deletions(-)
fs/nfsd/nfs4proc.c +14 -10
@@ -193,10 +193,13 @@ static __be32 nfsd_check_obj_isreg(struct svc_fh *fh)static __be32 do_open_lookup (struct svc_rqst *rqstp,struct svc_fh *current_fh,struct nfsd4_open *open) { -struct svc_fh resfh; +struct svc_fh *resfh;__be32 status; -fh_init (&resfh,NFS4_FHSIZE ); + resfh =kmalloc (sizeof (struct svc_fh ),GFP_KERNEL ); +if (!resfh) +return nfserr_jukebox; +fh_init (resfh,NFS4_FHSIZE ); open->op_truncate =0 ;if (open->op_create) {
@@ -221,7 +224,7 @@ do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_o*/ status =do_nfsd_create (rqstp, current_fh, open->op_fname.data, open->op_fname.len, &open->op_iattr, - &resfh, open->op_createmode, + resfh, open->op_createmode, (u32 *)open->op_verf.data, &open->op_truncate, &open->op_created);
@@ -235,28 +238,29 @@ do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_o FATTR4_WORD1_TIME_MODIFY); }else { status =nfsd_lookup (rqstp, current_fh, - open->op_fname.data, open->op_fname.len, &resfh); + open->op_fname.data, open->op_fname.len, resfh);fh_unlock (current_fh);if (status) goto out; - status =nfsd_check_obj_isreg (&resfh); + status =nfsd_check_obj_isreg (resfh); }if (status) goto out;if (is_create_with_attrs (open) && open->op_acl !=NULL ) -do_set_nfs4_acl (rqstp, &resfh, open->op_acl, open->op_bmval); +do_set_nfs4_acl (rqstp, resfh, open->op_acl, open->op_bmval);/* set reply cache */ fh_copy_shallow (&open->op_openowner->oo_owner.so_replay.rp_openfh, - &resfh.fh_handle); + &resfh->fh_handle);if (!open->op_created) - status =do_open_permission (rqstp, &resfh, open, + status =do_open_permission (rqstp, resfh, open,NFSD_MAY_NOP );set_change_info (&open->op_cinfo, current_fh); -fh_dup2 (current_fh, &resfh); +fh_dup2 (current_fh, resfh); out: -fh_put (&resfh); +fh_put (resfh); +kfree (resfh);return status; }
Signature · 1 line
1.7.5.4
PATCH 3/3 nfsd4: make sure set CB_PATH_DOWN sequence flag set
In reply to J. Bruce FieldsFrom: "J. Bruce Fields" <[email protected]>
Make sure this is set whenever there is no callback channel.
If a client does not set up a callback channel at all, then it will get this flag set from the very start. That's OK, it can just ignore the flag if it doesn't care. If a client does care, I think it's better to inform it of the problem as early as possible.
--- fs/nfsd/nfs4callback.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
fs/nfsd/nfs4callback.c +1 -1
@@ -986,7 +986,7 @@ static void nfsd4_process_cb_update(struct nfsd4_callback *cb) err =setup_callback_client (clp, &conn, ses);if (err) { -warn_no_callback_path (clp, err); +nfsd4_mark_cb_down (clp, err);return ; }/* Yay, the callback channel's back! Restart any callbacks: */
Signature · 1 line
1.7.5.4