Commit 03df25dc authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'hotfixes' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6

* 'hotfixes' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6:
  NFS: add missing spkm3 strings to mount option parser
  NFS: remove error field from nfs_readdir_descriptor_t
  NFS: missing spaces in KERN_WARNING
  NFS: Allow text-based mounts via compat_sys_mount
  NFS: fix reference counting for NFSv4 callback thread
parents f6866fec 52833e89
...@@ -702,9 +702,6 @@ static int do_nfs4_super_data_conv(void *raw_data) ...@@ -702,9 +702,6 @@ static int do_nfs4_super_data_conv(void *raw_data)
real->flags = raw->flags; real->flags = raw->flags;
real->version = raw->version; real->version = raw->version;
} }
else {
return -EINVAL;
}
return 0; return 0;
} }
......
...@@ -105,7 +105,7 @@ static void nfs_callback_svc(struct svc_rqst *rqstp) ...@@ -105,7 +105,7 @@ static void nfs_callback_svc(struct svc_rqst *rqstp)
*/ */
int nfs_callback_up(void) int nfs_callback_up(void)
{ {
struct svc_serv *serv; struct svc_serv *serv = NULL;
int ret = 0; int ret = 0;
lock_kernel(); lock_kernel();
...@@ -122,24 +122,30 @@ int nfs_callback_up(void) ...@@ -122,24 +122,30 @@ int nfs_callback_up(void)
ret = svc_create_xprt(serv, "tcp", nfs_callback_set_tcpport, ret = svc_create_xprt(serv, "tcp", nfs_callback_set_tcpport,
SVC_SOCK_ANONYMOUS); SVC_SOCK_ANONYMOUS);
if (ret <= 0) if (ret <= 0)
goto out_destroy; goto out_err;
nfs_callback_tcpport = ret; nfs_callback_tcpport = ret;
dprintk("Callback port = 0x%x\n", nfs_callback_tcpport); dprintk("Callback port = 0x%x\n", nfs_callback_tcpport);
ret = svc_create_thread(nfs_callback_svc, serv); ret = svc_create_thread(nfs_callback_svc, serv);
if (ret < 0) if (ret < 0)
goto out_destroy; goto out_err;
nfs_callback_info.serv = serv; nfs_callback_info.serv = serv;
wait_for_completion(&nfs_callback_info.started); wait_for_completion(&nfs_callback_info.started);
out: out:
/*
* svc_create creates the svc_serv with sv_nrthreads == 1, and then
* svc_create_thread increments that. So we need to call svc_destroy
* on both success and failure so that the refcount is 1 when the
* thread exits.
*/
if (serv)
svc_destroy(serv);
mutex_unlock(&nfs_callback_mutex); mutex_unlock(&nfs_callback_mutex);
unlock_kernel(); unlock_kernel();
return ret; return ret;
out_destroy: out_err:
dprintk("Couldn't create callback socket or server thread; err = %d\n", dprintk("Couldn't create callback socket or server thread; err = %d\n",
ret); ret);
svc_destroy(serv);
out_err:
nfs_callback_info.users--; nfs_callback_info.users--;
goto out; goto out;
} }
......
...@@ -154,7 +154,6 @@ typedef struct { ...@@ -154,7 +154,6 @@ typedef struct {
struct nfs_entry *entry; struct nfs_entry *entry;
decode_dirent_t decode; decode_dirent_t decode;
int plus; int plus;
int error;
unsigned long timestamp; unsigned long timestamp;
int timestamp_valid; int timestamp_valid;
} nfs_readdir_descriptor_t; } nfs_readdir_descriptor_t;
...@@ -213,7 +212,6 @@ int nfs_readdir_filler(nfs_readdir_descriptor_t *desc, struct page *page) ...@@ -213,7 +212,6 @@ int nfs_readdir_filler(nfs_readdir_descriptor_t *desc, struct page *page)
return 0; return 0;
error: error:
unlock_page(page); unlock_page(page);
desc->error = error;
return -EIO; return -EIO;
} }
...@@ -483,13 +481,13 @@ int uncached_readdir(nfs_readdir_descriptor_t *desc, void *dirent, ...@@ -483,13 +481,13 @@ int uncached_readdir(nfs_readdir_descriptor_t *desc, void *dirent,
goto out; goto out;
} }
timestamp = jiffies; timestamp = jiffies;
desc->error = NFS_PROTO(inode)->readdir(file->f_path.dentry, cred, *desc->dir_cookie, status = NFS_PROTO(inode)->readdir(file->f_path.dentry, cred,
page, *desc->dir_cookie, page,
NFS_SERVER(inode)->dtsize, NFS_SERVER(inode)->dtsize,
desc->plus); desc->plus);
desc->page = page; desc->page = page;
desc->ptr = kmap(page); /* matching kunmap in nfs_do_filldir */ desc->ptr = kmap(page); /* matching kunmap in nfs_do_filldir */
if (desc->error >= 0) { if (status >= 0) {
desc->timestamp = timestamp; desc->timestamp = timestamp;
desc->timestamp_valid = 1; desc->timestamp_valid = 1;
if ((status = dir_decode(desc)) == 0) if ((status = dir_decode(desc)) == 0)
......
...@@ -682,8 +682,8 @@ static void nfs_increment_seqid(int status, struct nfs_seqid *seqid) ...@@ -682,8 +682,8 @@ static void nfs_increment_seqid(int status, struct nfs_seqid *seqid)
if (seqid->sequence->flags & NFS_SEQID_CONFIRMED) if (seqid->sequence->flags & NFS_SEQID_CONFIRMED)
return; return;
printk(KERN_WARNING "NFS: v4 server returned a bad" printk(KERN_WARNING "NFS: v4 server returned a bad"
"sequence-id error on an" " sequence-id error on an"
"unconfirmed sequence %p!\n", " unconfirmed sequence %p!\n",
seqid->sequence); seqid->sequence);
case -NFS4ERR_STALE_CLIENTID: case -NFS4ERR_STALE_CLIENTID:
case -NFS4ERR_STALE_STATEID: case -NFS4ERR_STALE_STATEID:
......
...@@ -190,6 +190,10 @@ static match_table_t nfs_secflavor_tokens = { ...@@ -190,6 +190,10 @@ static match_table_t nfs_secflavor_tokens = {
{ Opt_sec_lkeyi, "lkeyi" }, { Opt_sec_lkeyi, "lkeyi" },
{ Opt_sec_lkeyp, "lkeyp" }, { Opt_sec_lkeyp, "lkeyp" },
{ Opt_sec_spkm, "spkm3" },
{ Opt_sec_spkmi, "spkm3i" },
{ Opt_sec_spkmp, "spkm3p" },
{ Opt_sec_err, NULL } { Opt_sec_err, NULL }
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment