Commit 4f375483 authored by J. Bruce Fields's avatar J. Bruce Fields
Browse files

Merge nfsd bugfixes

These are some nfsd bugfixes that I also want in the main branch that
will be submitted for the 5.4 merge window.
parents 64a38e84 78e70e78
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -571,7 +571,7 @@ nfsd_cache_append(struct svc_rqst *rqstp, struct kvec *data)
 */
static int nfsd_reply_cache_stats_show(struct seq_file *m, void *v)
{
	struct nfsd_net *nn = v;
	struct nfsd_net *nn = m->private;

	seq_printf(m, "max entries:           %u\n", nn->max_drc_entries);
	seq_printf(m, "num entries:           %u\n",
+9 −10
Original line number Diff line number Diff line
@@ -1171,13 +1171,17 @@ static struct inode *nfsd_get_inode(struct super_block *sb, umode_t mode)
	return inode;
}

static int __nfsd_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
static int __nfsd_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode, struct nfsdfs_client *ncl)
{
	struct inode *inode;

	inode = nfsd_get_inode(dir->i_sb, mode);
	if (!inode)
		return -ENOMEM;
	if (ncl) {
		inode->i_private = ncl;
		kref_get(&ncl->cl_ref);
	}
	d_add(dentry, inode);
	inc_nlink(dir);
	fsnotify_mkdir(dir, dentry);
@@ -1194,17 +1198,14 @@ static struct dentry *nfsd_mkdir(struct dentry *parent, struct nfsdfs_client *nc
	dentry = d_alloc_name(parent, name);
	if (!dentry)
		goto out_err;
	ret = __nfsd_mkdir(d_inode(parent), dentry, S_IFDIR | 0600);
	ret = __nfsd_mkdir(d_inode(parent), dentry, S_IFDIR | 0600, ncl);
	if (ret)
		goto out_err;
	if (ncl) {
		d_inode(dentry)->i_private = ncl;
		kref_get(&ncl->cl_ref);
	}
out:
	inode_unlock(dir);
	return dentry;
out_err:
	dput(dentry);
	dentry = ERR_PTR(ret);
	goto out;
}
@@ -1214,11 +1215,9 @@ static void clear_ncl(struct inode *inode)
	struct nfsdfs_client *ncl = inode->i_private;

	inode->i_private = NULL;
	synchronize_rcu();
	kref_put(&ncl->cl_ref, ncl->cl_release);
}


static struct nfsdfs_client *__get_nfsdfs_client(struct inode *inode)
{
	struct nfsdfs_client *nc = inode->i_private;
@@ -1232,9 +1231,9 @@ struct nfsdfs_client *get_nfsdfs_client(struct inode *inode)
{
	struct nfsdfs_client *nc;

	rcu_read_lock();
	inode_lock_shared(inode);
	nc = __get_nfsdfs_client(inode);
	rcu_read_unlock();
	inode_unlock_shared(inode);
	return nc;
}
/* from __rpc_unlink */