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

Commit c4364f83 authored by Al Viro's avatar Al Viro
Browse files

Merge branches 'work.namei', 'work.dcache' and 'work.iov_iter' into for-linus

Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -181,7 +181,7 @@ static inline ssize_t vhci_get_user(struct vhci_data *data,
	if (!skb)
		return -ENOMEM;

	if (copy_from_iter(skb_put(skb, len), len, from) != len) {
	if (!copy_from_iter_full(skb_put(skb, len), len, from)) {
		kfree_skb(skb);
		return -EFAULT;
	}
+1 −3
Original line number Diff line number Diff line
@@ -673,7 +673,6 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
	int depth;
	bool zerocopy = false;
	size_t linear;
	ssize_t n;

	if (q->flags & IFF_VNET_HDR) {
		vnet_hdr_len = q->vnet_hdr_sz;
@@ -684,8 +683,7 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
		len -= vnet_hdr_len;

		err = -EFAULT;
		n = copy_from_iter(&vnet_hdr, sizeof(vnet_hdr), from);
		if (n != sizeof(vnet_hdr))
		if (!copy_from_iter_full(&vnet_hdr, sizeof(vnet_hdr), from))
			goto err;
		iov_iter_advance(from, vnet_hdr_len - sizeof(vnet_hdr));
		if ((vnet_hdr.flags & VIRTIO_NET_HDR_F_NEEDS_CSUM) &&
+2 −5
Original line number Diff line number Diff line
@@ -1171,7 +1171,6 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
	bool zerocopy = false;
	int err;
	u32 rxhash;
	ssize_t n;

	if (!(tun->dev->flags & IFF_UP))
		return -EIO;
@@ -1181,8 +1180,7 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
			return -EINVAL;
		len -= sizeof(pi);

		n = copy_from_iter(&pi, sizeof(pi), from);
		if (n != sizeof(pi))
		if (!copy_from_iter_full(&pi, sizeof(pi), from))
			return -EFAULT;
	}

@@ -1191,8 +1189,7 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
			return -EINVAL;
		len -= tun->vnet_hdr_sz;

		n = copy_from_iter(&gso, sizeof(gso), from);
		if (n != sizeof(gso))
		if (!copy_from_iter_full(&gso, sizeof(gso), from))
			return -EFAULT;

		if ((gso.flags & VIRTIO_NET_HDR_F_NEEDS_CSUM) &&
+7 −26
Original line number Diff line number Diff line
@@ -57,9 +57,6 @@ static void ll_release(struct dentry *de)

	LASSERT(de);
	lld = ll_d2d(de);
	if (!lld) /* NFS copies the de->d_op methods (bug 4655) */
		return;

	if (lld->lld_it) {
		ll_intent_release(lld->lld_it);
		kfree(lld->lld_it);
@@ -126,30 +123,13 @@ static int ll_ddelete(const struct dentry *de)
	return 0;
}

int ll_d_init(struct dentry *de)
static int ll_d_init(struct dentry *de)
{
	CDEBUG(D_DENTRY, "ldd on dentry %pd (%p) parent %p inode %p refc %d\n",
	       de, de, de->d_parent, d_inode(de), d_count(de));

	if (!de->d_fsdata) {
		struct ll_dentry_data *lld;

		lld = kzalloc(sizeof(*lld), GFP_NOFS);
		if (likely(lld)) {
			spin_lock(&de->d_lock);
			if (likely(!de->d_fsdata)) {
				de->d_fsdata = lld;
				__d_lustre_invalidate(de);
			} else {
				kfree(lld);
			}
			spin_unlock(&de->d_lock);
		} else {
	struct ll_dentry_data *lld = kzalloc(sizeof(*lld), GFP_KERNEL);
	if (unlikely(!lld))
		return -ENOMEM;
		}
	}
	LASSERT(de->d_op == &ll_d_ops);

	lld->lld_invalid = 1;
	de->d_fsdata = lld;
	return 0;
}

@@ -300,6 +280,7 @@ static int ll_revalidate_nd(struct dentry *dentry, unsigned int flags)
}

const struct dentry_operations ll_d_ops = {
	.d_init = ll_d_init,
	.d_revalidate = ll_revalidate_nd,
	.d_release = ll_release,
	.d_delete  = ll_ddelete,
+3 −14
Original line number Diff line number Diff line
@@ -801,7 +801,6 @@ int ll_hsm_release(struct inode *inode);

/* llite/dcache.c */

int ll_d_init(struct dentry *de);
extern const struct dentry_operations ll_d_ops;
void ll_intent_drop_lock(struct lookup_intent *);
void ll_intent_release(struct lookup_intent *);
@@ -1189,7 +1188,7 @@ dentry_may_statahead(struct inode *dir, struct dentry *dentry)
	 * 'lld_sa_generation == lli->lli_sa_generation'.
	 */
	ldd = ll_d2d(dentry);
	if (ldd && ldd->lld_sa_generation == lli->lli_sa_generation)
	if (ldd->lld_sa_generation == lli->lli_sa_generation)
		return false;

	return true;
@@ -1317,17 +1316,7 @@ static inline void ll_set_lock_data(struct obd_export *exp, struct inode *inode,

static inline int d_lustre_invalid(const struct dentry *dentry)
{
	struct ll_dentry_data *lld = ll_d2d(dentry);

	return !lld || lld->lld_invalid;
}

static inline void __d_lustre_invalidate(struct dentry *dentry)
{
	struct ll_dentry_data *lld = ll_d2d(dentry);

	if (lld)
		lld->lld_invalid = 1;
	return ll_d2d(dentry)->lld_invalid;
}

/*
@@ -1343,7 +1332,7 @@ static inline void d_lustre_invalidate(struct dentry *dentry, int nested)

	spin_lock_nested(&dentry->d_lock,
			 nested ? DENTRY_D_LOCK_NESTED : DENTRY_D_LOCK_NORMAL);
	__d_lustre_invalidate(dentry);
	ll_d2d(dentry)->lld_invalid = 1;
	/*
	 * We should be careful about dentries created by d_obtain_alias().
	 * These dentries are not put in the dentry tree, instead they are
Loading