Merge git://git.linux-nfs.org/pub/linux/nfs-2.6
* git://git.linux-nfs.org/pub/linux/nfs-2.6: SUNRPC: Dead code in net/sunrpc/auth_gss/auth_gss.c NFS: remove needless check in nfs_opendir() NFS: nfs_show_stats; for_each_possible_cpu(), not NR_CPUS NFS: make 2 functions static NFS,SUNRPC: Fix compiler warnings if CONFIG_PROC_FS & CONFIG_SYSCTL are unset NFS: fix PROC_FS=n compile error VFS: Fix another open intent Oops RPCSEC_GSS: fix leak in krb5 code caused by superfluous kmalloc
This commit is contained in:
@@ -650,7 +650,7 @@ static void nlmsvc_grant_callback(struct rpc_task *task, void *data)
|
|||||||
svc_wake_up(block->b_daemon);
|
svc_wake_up(block->b_daemon);
|
||||||
}
|
}
|
||||||
|
|
||||||
void nlmsvc_grant_release(void *data)
|
static void nlmsvc_grant_release(void *data)
|
||||||
{
|
{
|
||||||
struct nlm_rqst *call = data;
|
struct nlm_rqst *call = data;
|
||||||
|
|
||||||
|
@@ -128,15 +128,14 @@ struct inode_operations nfs4_dir_inode_operations = {
|
|||||||
static int
|
static int
|
||||||
nfs_opendir(struct inode *inode, struct file *filp)
|
nfs_opendir(struct inode *inode, struct file *filp)
|
||||||
{
|
{
|
||||||
int res = 0;
|
int res;
|
||||||
|
|
||||||
dfprintk(VFS, "NFS: opendir(%s/%ld)\n",
|
dfprintk(VFS, "NFS: opendir(%s/%ld)\n",
|
||||||
inode->i_sb->s_id, inode->i_ino);
|
inode->i_sb->s_id, inode->i_ino);
|
||||||
|
|
||||||
lock_kernel();
|
lock_kernel();
|
||||||
/* Call generic open code in order to cache credentials */
|
/* Call generic open code in order to cache credentials */
|
||||||
if (!res)
|
res = nfs_open(inode, filp);
|
||||||
res = nfs_open(inode, filp);
|
|
||||||
unlock_kernel();
|
unlock_kernel();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@@ -112,10 +112,9 @@ static void nfs_direct_write_complete(struct nfs_direct_req *dreq, struct inode
|
|||||||
*/
|
*/
|
||||||
ssize_t nfs_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, loff_t pos, unsigned long nr_segs)
|
ssize_t nfs_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, loff_t pos, unsigned long nr_segs)
|
||||||
{
|
{
|
||||||
struct dentry *dentry = iocb->ki_filp->f_dentry;
|
|
||||||
|
|
||||||
dprintk("NFS: nfs_direct_IO (%s) off/no(%Ld/%lu) EINVAL\n",
|
dprintk("NFS: nfs_direct_IO (%s) off/no(%Ld/%lu) EINVAL\n",
|
||||||
dentry->d_name.name, (long long) pos, nr_segs);
|
iocb->ki_filp->f_dentry->d_name.name,
|
||||||
|
(long long) pos, nr_segs);
|
||||||
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
@@ -468,7 +467,6 @@ static const struct rpc_call_ops nfs_commit_direct_ops = {
|
|||||||
static void nfs_direct_commit_schedule(struct nfs_direct_req *dreq)
|
static void nfs_direct_commit_schedule(struct nfs_direct_req *dreq)
|
||||||
{
|
{
|
||||||
struct nfs_write_data *data = dreq->commit_data;
|
struct nfs_write_data *data = dreq->commit_data;
|
||||||
struct rpc_task *task = &data->task;
|
|
||||||
|
|
||||||
data->inode = dreq->inode;
|
data->inode = dreq->inode;
|
||||||
data->cred = dreq->ctx->cred;
|
data->cred = dreq->ctx->cred;
|
||||||
@@ -489,7 +487,7 @@ static void nfs_direct_commit_schedule(struct nfs_direct_req *dreq)
|
|||||||
/* Note: task.tk_ops->rpc_release will free dreq->commit_data */
|
/* Note: task.tk_ops->rpc_release will free dreq->commit_data */
|
||||||
dreq->commit_data = NULL;
|
dreq->commit_data = NULL;
|
||||||
|
|
||||||
dprintk("NFS: %5u initiated commit call\n", task->tk_pid);
|
dprintk("NFS: %5u initiated commit call\n", data->task.tk_pid);
|
||||||
|
|
||||||
lock_kernel();
|
lock_kernel();
|
||||||
rpc_execute(&data->task);
|
rpc_execute(&data->task);
|
||||||
|
@@ -534,10 +534,9 @@ static int nfs_lock(struct file *filp, int cmd, struct file_lock *fl)
|
|||||||
*/
|
*/
|
||||||
static int nfs_flock(struct file *filp, int cmd, struct file_lock *fl)
|
static int nfs_flock(struct file *filp, int cmd, struct file_lock *fl)
|
||||||
{
|
{
|
||||||
struct inode * inode = filp->f_mapping->host;
|
|
||||||
|
|
||||||
dprintk("NFS: nfs_flock(f=%s/%ld, t=%x, fl=%x)\n",
|
dprintk("NFS: nfs_flock(f=%s/%ld, t=%x, fl=%x)\n",
|
||||||
inode->i_sb->s_id, inode->i_ino,
|
filp->f_dentry->d_inode->i_sb->s_id,
|
||||||
|
filp->f_dentry->d_inode->i_ino,
|
||||||
fl->fl_type, fl->fl_flags);
|
fl->fl_type, fl->fl_flags);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -700,12 +700,9 @@ static int nfs_show_stats(struct seq_file *m, struct vfsmount *mnt)
|
|||||||
/*
|
/*
|
||||||
* Display superblock I/O counters
|
* Display superblock I/O counters
|
||||||
*/
|
*/
|
||||||
for (cpu = 0; cpu < NR_CPUS; cpu++) {
|
for_each_possible_cpu(cpu) {
|
||||||
struct nfs_iostats *stats;
|
struct nfs_iostats *stats;
|
||||||
|
|
||||||
if (!cpu_possible(cpu))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
preempt_disable();
|
preempt_disable();
|
||||||
stats = per_cpu_ptr(nfss->io_stats, cpu);
|
stats = per_cpu_ptr(nfss->io_stats, cpu);
|
||||||
|
|
||||||
|
@@ -1218,7 +1218,7 @@ out:
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void nfs4_intent_set_file(struct nameidata *nd, struct dentry *dentry, struct nfs4_state *state)
|
static int nfs4_intent_set_file(struct nameidata *nd, struct dentry *dentry, struct nfs4_state *state)
|
||||||
{
|
{
|
||||||
struct file *filp;
|
struct file *filp;
|
||||||
|
|
||||||
@@ -1227,8 +1227,10 @@ static void nfs4_intent_set_file(struct nameidata *nd, struct dentry *dentry, st
|
|||||||
struct nfs_open_context *ctx;
|
struct nfs_open_context *ctx;
|
||||||
ctx = (struct nfs_open_context *)filp->private_data;
|
ctx = (struct nfs_open_context *)filp->private_data;
|
||||||
ctx->state = state;
|
ctx->state = state;
|
||||||
} else
|
return 0;
|
||||||
nfs4_close_state(state, nd->intent.open.flags);
|
}
|
||||||
|
nfs4_close_state(state, nd->intent.open.flags);
|
||||||
|
return PTR_ERR(filp);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct dentry *
|
struct dentry *
|
||||||
@@ -1835,7 +1837,7 @@ nfs4_proc_create(struct inode *dir, struct dentry *dentry, struct iattr *sattr,
|
|||||||
nfs_setattr_update_inode(state->inode, sattr);
|
nfs_setattr_update_inode(state->inode, sattr);
|
||||||
}
|
}
|
||||||
if (status == 0 && nd != NULL && (nd->flags & LOOKUP_OPEN))
|
if (status == 0 && nd != NULL && (nd->flags & LOOKUP_OPEN))
|
||||||
nfs4_intent_set_file(nd, dentry, state);
|
status = nfs4_intent_set_file(nd, dentry, state);
|
||||||
else
|
else
|
||||||
nfs4_close_state(state, flags);
|
nfs4_close_state(state, flags);
|
||||||
out:
|
out:
|
||||||
|
@@ -69,9 +69,21 @@ struct rpc_clnt;
|
|||||||
/*
|
/*
|
||||||
* EXPORTed functions for managing rpc_iostats structures
|
* EXPORTed functions for managing rpc_iostats structures
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef CONFIG_PROC_FS
|
||||||
|
|
||||||
struct rpc_iostats * rpc_alloc_iostats(struct rpc_clnt *);
|
struct rpc_iostats * rpc_alloc_iostats(struct rpc_clnt *);
|
||||||
void rpc_count_iostats(struct rpc_task *);
|
void rpc_count_iostats(struct rpc_task *);
|
||||||
void rpc_print_iostats(struct seq_file *, struct rpc_clnt *);
|
void rpc_print_iostats(struct seq_file *, struct rpc_clnt *);
|
||||||
void rpc_free_iostats(struct rpc_iostats *);
|
void rpc_free_iostats(struct rpc_iostats *);
|
||||||
|
|
||||||
|
#else /* CONFIG_PROC_FS */
|
||||||
|
|
||||||
|
static inline struct rpc_iostats *rpc_alloc_iostats(struct rpc_clnt *clnt) { return NULL; }
|
||||||
|
static inline void rpc_count_iostats(struct rpc_task *task) {}
|
||||||
|
static inline void rpc_print_iostats(struct seq_file *seq, struct rpc_clnt *clnt) {}
|
||||||
|
static inline void rpc_free_iostats(struct rpc_iostats *stats) {}
|
||||||
|
|
||||||
|
#endif /* CONFIG_PROC_FS */
|
||||||
|
|
||||||
#endif /* _LINUX_SUNRPC_METRICS_H */
|
#endif /* _LINUX_SUNRPC_METRICS_H */
|
||||||
|
@@ -53,6 +53,7 @@ struct rpc_timeout {
|
|||||||
|
|
||||||
struct rpc_task;
|
struct rpc_task;
|
||||||
struct rpc_xprt;
|
struct rpc_xprt;
|
||||||
|
struct seq_file;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This describes a complete RPC request
|
* This describes a complete RPC request
|
||||||
|
@@ -794,7 +794,6 @@ gss_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags)
|
|||||||
|
|
||||||
out_err:
|
out_err:
|
||||||
dprintk("RPC: gss_create_cred failed with error %d\n", err);
|
dprintk("RPC: gss_create_cred failed with error %d\n", err);
|
||||||
if (cred) gss_destroy_cred(&cred->gc_base);
|
|
||||||
return ERR_PTR(err);
|
return ERR_PTR(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -212,7 +212,6 @@ make_checksum(s32 cksumtype, char *header, int hdrlen, struct xdr_buf *body,
|
|||||||
char *cksumname;
|
char *cksumname;
|
||||||
struct crypto_tfm *tfm = NULL; /* XXX add to ctx? */
|
struct crypto_tfm *tfm = NULL; /* XXX add to ctx? */
|
||||||
struct scatterlist sg[1];
|
struct scatterlist sg[1];
|
||||||
u32 code = GSS_S_FAILURE;
|
|
||||||
|
|
||||||
switch (cksumtype) {
|
switch (cksumtype) {
|
||||||
case CKSUMTYPE_RSA_MD5:
|
case CKSUMTYPE_RSA_MD5:
|
||||||
@@ -221,13 +220,11 @@ make_checksum(s32 cksumtype, char *header, int hdrlen, struct xdr_buf *body,
|
|||||||
default:
|
default:
|
||||||
dprintk("RPC: krb5_make_checksum:"
|
dprintk("RPC: krb5_make_checksum:"
|
||||||
" unsupported checksum %d", cksumtype);
|
" unsupported checksum %d", cksumtype);
|
||||||
goto out;
|
return GSS_S_FAILURE;
|
||||||
}
|
}
|
||||||
if (!(tfm = crypto_alloc_tfm(cksumname, CRYPTO_TFM_REQ_MAY_SLEEP)))
|
if (!(tfm = crypto_alloc_tfm(cksumname, CRYPTO_TFM_REQ_MAY_SLEEP)))
|
||||||
goto out;
|
return GSS_S_FAILURE;
|
||||||
cksum->len = crypto_tfm_alg_digestsize(tfm);
|
cksum->len = crypto_tfm_alg_digestsize(tfm);
|
||||||
if ((cksum->data = kmalloc(cksum->len, GFP_KERNEL)) == NULL)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
crypto_digest_init(tfm);
|
crypto_digest_init(tfm);
|
||||||
sg_set_buf(sg, header, hdrlen);
|
sg_set_buf(sg, header, hdrlen);
|
||||||
@@ -235,10 +232,8 @@ make_checksum(s32 cksumtype, char *header, int hdrlen, struct xdr_buf *body,
|
|||||||
process_xdr_buf(body, body_offset, body->len - body_offset,
|
process_xdr_buf(body, body_offset, body->len - body_offset,
|
||||||
checksummer, tfm);
|
checksummer, tfm);
|
||||||
crypto_digest_final(tfm, cksum->data);
|
crypto_digest_final(tfm, cksum->data);
|
||||||
code = 0;
|
|
||||||
out:
|
|
||||||
crypto_free_tfm(tfm);
|
crypto_free_tfm(tfm);
|
||||||
return code;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(make_checksum);
|
EXPORT_SYMBOL(make_checksum);
|
||||||
|
@@ -176,7 +176,8 @@ void rpc_count_iostats(struct rpc_task *task)
|
|||||||
op_metrics->om_execute += execute;
|
op_metrics->om_execute += execute;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _print_name(struct seq_file *seq, unsigned int op, struct rpc_procinfo *procs)
|
static void _print_name(struct seq_file *seq, unsigned int op,
|
||||||
|
struct rpc_procinfo *procs)
|
||||||
{
|
{
|
||||||
if (procs[op].p_name)
|
if (procs[op].p_name)
|
||||||
seq_printf(seq, "\t%12s: ", procs[op].p_name);
|
seq_printf(seq, "\t%12s: ", procs[op].p_name);
|
||||||
|
Reference in New Issue
Block a user