Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+21 -16
-3
fs/compat.c
··· 702 702 real->flags = raw->flags; 703 703 real->version = raw->version; 704 704 } 705 - else { 706 - return -EINVAL; 707 - } 708 705 709 706 return 0; 710 707 }
+12 -6
fs/nfs/callback.c
··· 105 105 */ 106 106 int nfs_callback_up(void) 107 107 { 108 - struct svc_serv *serv; 108 + struct svc_serv *serv = NULL; 109 109 int ret = 0; 110 110 111 111 lock_kernel(); ··· 122 122 ret = svc_create_xprt(serv, "tcp", nfs_callback_set_tcpport, 123 123 SVC_SOCK_ANONYMOUS); 124 124 if (ret <= 0) 125 - goto out_destroy; 125 + goto out_err; 126 126 nfs_callback_tcpport = ret; 127 127 dprintk("Callback port = 0x%x\n", nfs_callback_tcpport); 128 128 129 129 ret = svc_create_thread(nfs_callback_svc, serv); 130 130 if (ret < 0) 131 - goto out_destroy; 131 + goto out_err; 132 132 nfs_callback_info.serv = serv; 133 133 wait_for_completion(&nfs_callback_info.started); 134 134 out: 135 + /* 136 + * svc_create creates the svc_serv with sv_nrthreads == 1, and then 137 + * svc_create_thread increments that. So we need to call svc_destroy 138 + * on both success and failure so that the refcount is 1 when the 139 + * thread exits. 140 + */ 141 + if (serv) 142 + svc_destroy(serv); 135 143 mutex_unlock(&nfs_callback_mutex); 136 144 unlock_kernel(); 137 145 return ret; 138 - out_destroy: 146 + out_err: 139 147 dprintk("Couldn't create callback socket or server thread; err = %d\n", 140 148 ret); 141 - svc_destroy(serv); 142 - out_err: 143 149 nfs_callback_info.users--; 144 150 goto out; 145 151 }
+3 -5
fs/nfs/dir.c
··· 154 154 struct nfs_entry *entry; 155 155 decode_dirent_t decode; 156 156 int plus; 157 - int error; 158 157 unsigned long timestamp; 159 158 int timestamp_valid; 160 159 } nfs_readdir_descriptor_t; ··· 212 213 return 0; 213 214 error: 214 215 unlock_page(page); 215 - desc->error = error; 216 216 return -EIO; 217 217 } 218 218 ··· 481 483 goto out; 482 484 } 483 485 timestamp = jiffies; 484 - desc->error = NFS_PROTO(inode)->readdir(file->f_path.dentry, cred, *desc->dir_cookie, 485 - page, 486 + status = NFS_PROTO(inode)->readdir(file->f_path.dentry, cred, 487 + *desc->dir_cookie, page, 486 488 NFS_SERVER(inode)->dtsize, 487 489 desc->plus); 488 490 desc->page = page; 489 491 desc->ptr = kmap(page); /* matching kunmap in nfs_do_filldir */ 490 - if (desc->error >= 0) { 492 + if (status >= 0) { 491 493 desc->timestamp = timestamp; 492 494 desc->timestamp_valid = 1; 493 495 if ((status = dir_decode(desc)) == 0)
+2 -2
fs/nfs/nfs4state.c
··· 682 682 if (seqid->sequence->flags & NFS_SEQID_CONFIRMED) 683 683 return; 684 684 printk(KERN_WARNING "NFS: v4 server returned a bad" 685 - "sequence-id error on an" 686 - "unconfirmed sequence %p!\n", 685 + " sequence-id error on an" 686 + " unconfirmed sequence %p!\n", 687 687 seqid->sequence); 688 688 case -NFS4ERR_STALE_CLIENTID: 689 689 case -NFS4ERR_STALE_STATEID:
+4
fs/nfs/super.c
··· 190 190 { Opt_sec_lkeyi, "lkeyi" }, 191 191 { Opt_sec_lkeyp, "lkeyp" }, 192 192 193 + { Opt_sec_spkm, "spkm3" }, 194 + { Opt_sec_spkmi, "spkm3i" }, 195 + { Opt_sec_spkmp, "spkm3p" }, 196 + 193 197 { Opt_sec_err, NULL } 194 198 }; 195 199