提交 602b5366 编写于 作者: L Linus Torvalds

Merge tag 'nfs-for-3.17-4' of git://git.linux-nfs.org/projects/trondmy/linux-nfs

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
...@@ -1412,24 +1412,18 @@ int nfs_fs_proc_net_init(struct net *net) ...@@ -1412,24 +1412,18 @@ int nfs_fs_proc_net_init(struct net *net)
p = proc_create("volumes", S_IFREG|S_IRUGO, p = proc_create("volumes", S_IFREG|S_IRUGO,
nn->proc_nfsfs, &nfs_volume_list_fops); nn->proc_nfsfs, &nfs_volume_list_fops);
if (!p) if (!p)
goto error_2; goto error_1;
return 0; return 0;
error_2:
remove_proc_entry("servers", nn->proc_nfsfs);
error_1: error_1:
remove_proc_entry("fs/nfsfs", NULL); remove_proc_subtree("nfsfs", net->proc_net);
error_0: error_0:
return -ENOMEM; return -ENOMEM;
} }
void nfs_fs_proc_net_exit(struct net *net) void nfs_fs_proc_net_exit(struct net *net)
{ {
struct nfs_net *nn = net_generic(net, nfs_net_id); remove_proc_subtree("nfsfs", net->proc_net);
remove_proc_entry("volumes", nn->proc_nfsfs);
remove_proc_entry("servers", nn->proc_nfsfs);
remove_proc_entry("fs/nfsfs", NULL);
} }
/* /*
......
...@@ -1269,11 +1269,12 @@ filelayout_search_commit_reqs(struct nfs_commit_info *cinfo, struct page *page) ...@@ -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) static void filelayout_retry_commit(struct nfs_commit_info *cinfo, int idx)
{ {
struct pnfs_ds_commit_info *fl_cinfo = cinfo->ds; 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; struct pnfs_layout_segment *freeme;
int i; 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)) if (list_empty(&bucket->committing))
continue; continue;
nfs_retry_commit(&bucket->committing, bucket->clseg, cinfo); nfs_retry_commit(&bucket->committing, bucket->clseg, cinfo);
......
...@@ -130,16 +130,15 @@ enum { ...@@ -130,16 +130,15 @@ enum {
*/ */
struct nfs4_lock_state { struct nfs4_lock_state {
struct list_head ls_locks; /* Other lock stateids */ struct list_head ls_locks; /* Other lock stateids */
struct nfs4_state * ls_state; /* Pointer to open state */ struct nfs4_state * ls_state; /* Pointer to open state */
#define NFS_LOCK_INITIALIZED 0 #define NFS_LOCK_INITIALIZED 0
#define NFS_LOCK_LOST 1 #define NFS_LOCK_LOST 1
unsigned long ls_flags; unsigned long ls_flags;
struct nfs_seqid_counter ls_seqid; struct nfs_seqid_counter ls_seqid;
nfs4_stateid ls_stateid; nfs4_stateid ls_stateid;
atomic_t ls_count; atomic_t ls_count;
fl_owner_t ls_owner; fl_owner_t ls_owner;
struct work_struct ls_release;
}; };
/* bits for nfs4_state->flags */ /* bits for nfs4_state->flags */
......
...@@ -799,18 +799,6 @@ __nfs4_find_lock_state(struct nfs4_state *state, fl_owner_t fl_owner) ...@@ -799,18 +799,6 @@ __nfs4_find_lock_state(struct nfs4_state *state, fl_owner_t fl_owner)
return NULL; 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 * Return a compatible lock_state. If no initialized lock_state structure
* exists, return an uninitialized one. * exists, return an uninitialized one.
...@@ -832,7 +820,6 @@ static struct nfs4_lock_state *nfs4_alloc_lock_state(struct nfs4_state *state, f ...@@ -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) if (lsp->ls_seqid.owner_id < 0)
goto out_free; goto out_free;
INIT_LIST_HEAD(&lsp->ls_locks); INIT_LIST_HEAD(&lsp->ls_locks);
INIT_WORK(&lsp->ls_release, free_lock_state_work);
return lsp; return lsp;
out_free: out_free:
kfree(lsp); kfree(lsp);
...@@ -896,12 +883,13 @@ void nfs4_put_lock_state(struct nfs4_lock_state *lsp) ...@@ -896,12 +883,13 @@ void nfs4_put_lock_state(struct nfs4_lock_state *lsp)
if (list_empty(&state->lock_states)) if (list_empty(&state->lock_states))
clear_bit(LK_STATE_IN_USE, &state->flags); clear_bit(LK_STATE_IN_USE, &state->flags);
spin_unlock(&state->state_lock); spin_unlock(&state->state_lock);
if (test_bit(NFS_LOCK_INITIALIZED, &lsp->ls_flags)) server = state->owner->so_server;
queue_work(nfsiod_workqueue, &lsp->ls_release); if (test_bit(NFS_LOCK_INITIALIZED, &lsp->ls_flags)) {
else { struct nfs_client *clp = server->nfs_client;
server = state->owner->so_server;
clp->cl_mvops->free_lock_state(server, lsp);
} else
nfs4_free_lock_state(server, lsp); nfs4_free_lock_state(server, lsp);
}
} }
static void nfs4_fl_copy_lock(struct file_lock *dst, struct file_lock *src) static void nfs4_fl_copy_lock(struct file_lock *dst, struct file_lock *src)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册