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

Commit 2ea3f868 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'for-2.6.30' of git://linux-nfs.org/~bfields/linux

* 'for-2.6.30' of git://linux-nfs.org/~bfields/linux:
  nfsd: silence lockdep warning
  lockd: fix list corruption on lockd restart
  nfsd4: check for negative dentry before use in nfsv4 readdir
  nfsd41: slots are freed with session
  svcrdma: clean up error paths.
  svcrdma: Fix dma map direction for rdma read targets
parents bfe3891a 8daed1e5
Loading
Loading
Loading
Loading
+11 −4
Original line number Original line Diff line number Diff line
@@ -104,6 +104,16 @@ static void set_grace_period(void)
	schedule_delayed_work(&grace_period_end, grace_period);
	schedule_delayed_work(&grace_period_end, grace_period);
}
}


static void restart_grace(void)
{
	if (nlmsvc_ops) {
		cancel_delayed_work_sync(&grace_period_end);
		locks_end_grace(&lockd_manager);
		nlmsvc_invalidate_all();
		set_grace_period();
	}
}

/*
/*
 * This is the lockd kernel thread
 * This is the lockd kernel thread
 */
 */
@@ -149,10 +159,7 @@ lockd(void *vrqstp)


		if (signalled()) {
		if (signalled()) {
			flush_signals(current);
			flush_signals(current);
			if (nlmsvc_ops) {
			restart_grace();
				nlmsvc_invalidate_all();
				set_grace_period();
			}
			continue;
			continue;
		}
		}


+2 −2
Original line number Original line Diff line number Diff line
@@ -229,7 +229,7 @@ nfsd4_list_rec_dir(struct dentry *dir, recdir_func *f)
		goto out;
		goto out;
	status = vfs_readdir(filp, nfsd4_build_namelist, &names);
	status = vfs_readdir(filp, nfsd4_build_namelist, &names);
	fput(filp);
	fput(filp);
	mutex_lock(&dir->d_inode->i_mutex);
	mutex_lock_nested(&dir->d_inode->i_mutex, I_MUTEX_PARENT);
	while (!list_empty(&names)) {
	while (!list_empty(&names)) {
		entry = list_entry(names.next, struct name_list, list);
		entry = list_entry(names.next, struct name_list, list);


@@ -264,7 +264,7 @@ nfsd4_unlink_clid_dir(char *name, int namlen)


	dprintk("NFSD: nfsd4_unlink_clid_dir. name %.*s\n", namlen, name);
	dprintk("NFSD: nfsd4_unlink_clid_dir. name %.*s\n", namlen, name);


	mutex_lock(&rec_dir.dentry->d_inode->i_mutex);
	mutex_lock_nested(&rec_dir.dentry->d_inode->i_mutex, I_MUTEX_PARENT);
	dentry = lookup_one_len(name, rec_dir.dentry, namlen);
	dentry = lookup_one_len(name, rec_dir.dentry, namlen);
	if (IS_ERR(dentry)) {
	if (IS_ERR(dentry)) {
		status = PTR_ERR(dentry);
		status = PTR_ERR(dentry);
+0 −1
Original line number Original line Diff line number Diff line
@@ -580,7 +580,6 @@ free_session(struct kref *kref)
		struct nfsd4_cache_entry *e = &ses->se_slots[i].sl_cache_entry;
		struct nfsd4_cache_entry *e = &ses->se_slots[i].sl_cache_entry;
		nfsd4_release_respages(e->ce_respages, e->ce_resused);
		nfsd4_release_respages(e->ce_respages, e->ce_resused);
	}
	}
	kfree(ses->se_slots);
	kfree(ses);
	kfree(ses);
}
}


+15 −1
Original line number Original line Diff line number Diff line
@@ -2214,6 +2214,15 @@ nfsd4_encode_dirent_fattr(struct nfsd4_readdir *cd,
	dentry = lookup_one_len(name, cd->rd_fhp->fh_dentry, namlen);
	dentry = lookup_one_len(name, cd->rd_fhp->fh_dentry, namlen);
	if (IS_ERR(dentry))
	if (IS_ERR(dentry))
		return nfserrno(PTR_ERR(dentry));
		return nfserrno(PTR_ERR(dentry));
	if (!dentry->d_inode) {
		/*
		 * nfsd_buffered_readdir drops the i_mutex between
		 * readdir and calling this callback, leaving a window
		 * where this directory entry could have gone away.
		 */
		dput(dentry);
		return nfserr_noent;
	}


	exp_get(exp);
	exp_get(exp);
	/*
	/*
@@ -2276,6 +2285,7 @@ nfsd4_encode_dirent(void *ccdv, const char *name, int namlen,
	struct nfsd4_readdir *cd = container_of(ccd, struct nfsd4_readdir, common);
	struct nfsd4_readdir *cd = container_of(ccd, struct nfsd4_readdir, common);
	int buflen;
	int buflen;
	__be32 *p = cd->buffer;
	__be32 *p = cd->buffer;
	__be32 *cookiep;
	__be32 nfserr = nfserr_toosmall;
	__be32 nfserr = nfserr_toosmall;


	/* In nfsv4, "." and ".." never make it onto the wire.. */
	/* In nfsv4, "." and ".." never make it onto the wire.. */
@@ -2292,7 +2302,7 @@ nfsd4_encode_dirent(void *ccdv, const char *name, int namlen,
		goto fail;
		goto fail;


	*p++ = xdr_one;                             /* mark entry present */
	*p++ = xdr_one;                             /* mark entry present */
	cd->offset = p;                             /* remember pointer */
	cookiep = p;
	p = xdr_encode_hyper(p, NFS_OFFSET_MAX);    /* offset of next entry */
	p = xdr_encode_hyper(p, NFS_OFFSET_MAX);    /* offset of next entry */
	p = xdr_encode_array(p, name, namlen);      /* name length & name */
	p = xdr_encode_array(p, name, namlen);      /* name length & name */


@@ -2306,6 +2316,8 @@ nfsd4_encode_dirent(void *ccdv, const char *name, int namlen,
		goto fail;
		goto fail;
	case nfserr_dropit:
	case nfserr_dropit:
		goto fail;
		goto fail;
	case nfserr_noent:
		goto skip_entry;
	default:
	default:
		/*
		/*
		 * If the client requested the RDATTR_ERROR attribute,
		 * If the client requested the RDATTR_ERROR attribute,
@@ -2324,6 +2336,8 @@ nfsd4_encode_dirent(void *ccdv, const char *name, int namlen,
	}
	}
	cd->buflen -= (p - cd->buffer);
	cd->buflen -= (p - cd->buffer);
	cd->buffer = p;
	cd->buffer = p;
	cd->offset = cookiep;
skip_entry:
	cd->common.err = nfs_ok;
	cd->common.err = nfs_ok;
	return 0;
	return 0;
fail:
fail:
+1 −1
Original line number Original line Diff line number Diff line
@@ -265,7 +265,7 @@ static int fast_reg_read_chunks(struct svcxprt_rdma *xprt,
		frmr->page_list->page_list[page_no] =
		frmr->page_list->page_list[page_no] =
			ib_dma_map_single(xprt->sc_cm_id->device,
			ib_dma_map_single(xprt->sc_cm_id->device,
					  page_address(rqstp->rq_arg.pages[page_no]),
					  page_address(rqstp->rq_arg.pages[page_no]),
					  PAGE_SIZE, DMA_TO_DEVICE);
					  PAGE_SIZE, DMA_FROM_DEVICE);
		if (ib_dma_mapping_error(xprt->sc_cm_id->device,
		if (ib_dma_mapping_error(xprt->sc_cm_id->device,
					 frmr->page_list->page_list[page_no]))
					 frmr->page_list->page_list[page_no]))
			goto fatal_err;
			goto fatal_err;
Loading