Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 602b5366 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull NFS client fixes from Trond Myklebust:
 "Highlights:
   - fix a kernel warning when removing /proc/net/nfsfs
   - revert commit 49a4bda2 due to Oopses
   - fix a typo in the pNFS file layout commit code"

* tag 'nfs-for-3.17-4' of git://git.linux-nfs.org/projects/trondmy/linux-nfs:
  pnfs: fix filelayout_retry_commit when idx > 0
  nfs: revert "nfs4: queue free_lock_state job submission to nfsiod"
  nfs: fix kernel warning when removing proc entry
parents 7ed641be 224ecbf5
Loading
Loading
Loading
Loading
+3 −9
Original line number Diff line number Diff line
@@ -1412,24 +1412,18 @@ int nfs_fs_proc_net_init(struct net *net)
	p = proc_create("volumes", S_IFREG|S_IRUGO,
			nn->proc_nfsfs, &nfs_volume_list_fops);
	if (!p)
		goto error_2;
		goto error_1;
	return 0;

error_2:
	remove_proc_entry("servers", nn->proc_nfsfs);
error_1:
	remove_proc_entry("fs/nfsfs", NULL);
	remove_proc_subtree("nfsfs", net->proc_net);
error_0:
	return -ENOMEM;
}

void nfs_fs_proc_net_exit(struct net *net)
{
	struct nfs_net *nn = net_generic(net, nfs_net_id);

	remove_proc_entry("volumes", nn->proc_nfsfs);
	remove_proc_entry("servers", nn->proc_nfsfs);
	remove_proc_entry("fs/nfsfs", NULL);
	remove_proc_subtree("nfsfs", net->proc_net);
}

/*
+3 −2
Original line number Diff line number Diff line
@@ -1269,11 +1269,12 @@ filelayout_search_commit_reqs(struct nfs_commit_info *cinfo, struct page *page)
static void filelayout_retry_commit(struct nfs_commit_info *cinfo, int idx)
{
	struct pnfs_ds_commit_info *fl_cinfo = cinfo->ds;
	struct pnfs_commit_bucket *bucket = fl_cinfo->buckets;
	struct pnfs_commit_bucket *bucket;
	struct pnfs_layout_segment *freeme;
	int i;

	for (i = idx; i < fl_cinfo->nbuckets; i++, bucket++) {
	for (i = idx; i < fl_cinfo->nbuckets; i++) {
		bucket = &fl_cinfo->buckets[i];
		if (list_empty(&bucket->committing))
			continue;
		nfs_retry_commit(&bucket->committing, bucket->clseg, cinfo);
+6 −7
Original line number Diff line number Diff line
@@ -139,7 +139,6 @@ struct nfs4_lock_state {
	nfs4_stateid		ls_stateid;
	atomic_t		ls_count;
	fl_owner_t		ls_owner;
	struct work_struct		ls_release;
};

/* bits for nfs4_state->flags */
+6 −18
Original line number Diff line number Diff line
@@ -799,18 +799,6 @@ __nfs4_find_lock_state(struct nfs4_state *state, fl_owner_t fl_owner)
	return NULL;
}

static void
free_lock_state_work(struct work_struct *work)
{
	struct nfs4_lock_state *lsp = container_of(work,
					struct nfs4_lock_state, ls_release);
	struct nfs4_state *state = lsp->ls_state;
	struct nfs_server *server = state->owner->so_server;
	struct nfs_client *clp = server->nfs_client;

	clp->cl_mvops->free_lock_state(server, lsp);
}

/*
 * Return a compatible lock_state. If no initialized lock_state structure
 * exists, return an uninitialized one.
@@ -832,7 +820,6 @@ static struct nfs4_lock_state *nfs4_alloc_lock_state(struct nfs4_state *state, f
	if (lsp->ls_seqid.owner_id < 0)
		goto out_free;
	INIT_LIST_HEAD(&lsp->ls_locks);
	INIT_WORK(&lsp->ls_release, free_lock_state_work);
	return lsp;
out_free:
	kfree(lsp);
@@ -896,13 +883,14 @@ void nfs4_put_lock_state(struct nfs4_lock_state *lsp)
	if (list_empty(&state->lock_states))
		clear_bit(LK_STATE_IN_USE, &state->flags);
	spin_unlock(&state->state_lock);
	if (test_bit(NFS_LOCK_INITIALIZED, &lsp->ls_flags))
		queue_work(nfsiod_workqueue, &lsp->ls_release);
	else {
	server = state->owner->so_server;
	if (test_bit(NFS_LOCK_INITIALIZED, &lsp->ls_flags)) {
		struct nfs_client *clp = server->nfs_client;

		clp->cl_mvops->free_lock_state(server, lsp);
	} else
		nfs4_free_lock_state(server, lsp);
}
}

static void nfs4_fl_copy_lock(struct file_lock *dst, struct file_lock *src)
{