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

Commit b5e61818 authored by Pavel Emelianov's avatar Pavel Emelianov Committed by Linus Torvalds
Browse files

Introduce a handy list_first_entry macro



There are many places in the kernel where the construction like

   foo = list_entry(head->next, struct foo_struct, list);

are used.
The code might look more descriptive and neat if using the macro

   list_first_entry(head, type, member) \
             list_entry((head)->next, type, member)

Here is the macro itself and the examples of its usage in the generic code.
 If it will turn out to be useful, I can prepare the set of patches to
inject in into arch-specific code, drivers, networking, etc.

Signed-off-by: default avatarPavel Emelianov <xemul@openvz.org>
Signed-off-by: default avatarKirill Korotaev <dev@openvz.org>
Cc: Randy Dunlap <randy.dunlap@oracle.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Zach Brown <zach.brown@oracle.com>
Cc: Davide Libenzi <davidel@xmailserver.org>
Cc: John McCutchan <ttb@tentacle.dhs.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: john stultz <johnstul@us.ibm.com>
Cc: Ram Pai <linuxram@us.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent db9c02fa
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -474,7 +474,7 @@ int vfs_quota_sync(struct super_block *sb, int type)
		spin_lock(&dq_list_lock);
		dirty = &dqopt->info[cnt].dqi_dirty_list;
		while (!list_empty(dirty)) {
			dquot = list_entry(dirty->next, struct dquot, dq_dirty);
			dquot = list_first_entry(dirty, struct dquot, dq_dirty);
			/* Dirty and inactive can be only bad dquot... */
			if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) {
				clear_dquot_dirty(dquot);
+3 −3
Original line number Diff line number Diff line
@@ -453,7 +453,7 @@ void eventpoll_release_file(struct file *file)
	mutex_lock(&epmutex);

	while (!list_empty(lsthead)) {
		epi = list_entry(lsthead->next, struct epitem, fllink);
		epi = list_first_entry(lsthead, struct epitem, fllink);

		ep = epi->ep;
		list_del_init(&epi->fllink);
@@ -1143,7 +1143,7 @@ static void ep_unregister_pollwait(struct eventpoll *ep, struct epitem *epi)

	if (nwait) {
		while (!list_empty(lsthead)) {
			pwq = list_entry(lsthead->next, struct eppoll_entry, llink);
			pwq = list_first_entry(lsthead, struct eppoll_entry, llink);

			list_del_init(&pwq->llink);
			remove_wait_queue(pwq->whead, &pwq->wait);
@@ -1359,7 +1359,7 @@ static int ep_send_events(struct eventpoll *ep, struct list_head *txlist,
	 * read.
	 */
	for (eventcnt = 0; !list_empty(txlist) && eventcnt < maxevents;) {
		epi = list_entry(txlist->next, struct epitem, rdllink);
		epi = list_first_entry(txlist, struct epitem, rdllink);
		prefetch(epi->rdllink.next);

		/*
+1 −1
Original line number Diff line number Diff line
@@ -275,7 +275,7 @@ static void dispose_list(struct list_head *head)
	while (!list_empty(head)) {
		struct inode *inode;

		inode = list_entry(head->next, struct inode, i_list);
		inode = list_first_entry(head, struct inode, i_list);
		list_del(&inode->i_list);

		if (inode->i_data.nrpages)
+1 −1
Original line number Diff line number Diff line
@@ -509,7 +509,7 @@ void inotify_destroy(struct inotify_handle *ih)
			mutex_unlock(&ih->mutex);
			break;
		}
		watch = list_entry(watches->next, struct inotify_watch, h_list);
		watch = list_first_entry(watches, struct inotify_watch, h_list);
		get_inotify_watch(watch);
		mutex_unlock(&ih->mutex);

+2 −2
Original line number Diff line number Diff line
@@ -499,7 +499,7 @@ void release_mounts(struct list_head *head)
{
	struct vfsmount *mnt;
	while (!list_empty(head)) {
		mnt = list_entry(head->next, struct vfsmount, mnt_hash);
		mnt = list_first_entry(head, struct vfsmount, mnt_hash);
		list_del_init(&mnt->mnt_hash);
		if (mnt->mnt_parent != mnt) {
			struct dentry *dentry;
@@ -1177,7 +1177,7 @@ static void expire_mount_list(struct list_head *graveyard, struct list_head *mou

	while (!list_empty(graveyard)) {
		LIST_HEAD(umounts);
		mnt = list_entry(graveyard->next, struct vfsmount, mnt_expire);
		mnt = list_first_entry(graveyard, struct vfsmount, mnt_expire);
		list_del_init(&mnt->mnt_expire);

		/* don't do anything if the namespace is dead - all the
Loading