Commit 971ad4e4 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'akpm' (fixes from Andrew Morton)

Merge misc fixes from Andrew Morton:
 "15 fixes"

* emailed patches from Andrew Morton <akpm@linux-foundation.org>:
  MAINTAINERS: add IIO include files
  kernel/panic.c: update comments for print_tainted
  mem-hotplug: reset node present pages when hot-adding a new pgdat
  mem-hotplug: reset node managed pages when hot-adding a new pgdat
  mm/debug-pagealloc: correct freepage accounting and order resetting
  fanotify: fix notification of groups with inode & mount marks
  mm, compaction: prevent infinite loop in compact_zone
  mm: alloc_contig_range: demote pages busy message from warn to info
  mm/slab: fix unalignment problem on Malta with EVA due to slab merge
  mm/page_alloc: restrict max order of merging on isolated pageblock
  mm/page_alloc: move freepage counting logic to __free_one_page()
  mm/page_alloc: add freepage on isolate pageblock to correct buddy list
  mm/page_alloc: fix incorrect isolation behavior by rechecking migratetype
  mm/compaction: skip the range until proper target pageblock is met
  zram: avoid kunmap_atomic() of a NULL pointer
parents b0ab3f19 8fe671fc
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -4716,6 +4716,7 @@ L: linux-iio@vger.kernel.org
S:	Maintained
F:	drivers/iio/
F:	drivers/staging/iio/
F:	include/linux/iio/

IKANOS/ADI EAGLE ADSL USB DRIVER
M:	Matthieu Castet <castet.matthieu@free.fr>
+2 −1
Original line number Diff line number Diff line
@@ -560,6 +560,7 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
	}

	if (page_zero_filled(uncmem)) {
		if (user_mem)
			kunmap_atomic(user_mem);
		/* Free memory associated with this sector now. */
		bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value);
+21 −15
Original line number Diff line number Diff line
@@ -229,8 +229,16 @@ int fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is,
					      &fsnotify_mark_srcu);
	}

	/*
	 * We need to merge inode & vfsmount mark lists so that inode mark
	 * ignore masks are properly reflected for mount mark notifications.
	 * That's why this traversal is so complicated...
	 */
	while (inode_node || vfsmount_node) {
		inode_group = vfsmount_group = NULL;
		inode_group = NULL;
		inode_mark = NULL;
		vfsmount_group = NULL;
		vfsmount_mark = NULL;

		if (inode_node) {
			inode_mark = hlist_entry(srcu_dereference(inode_node, &fsnotify_mark_srcu),
@@ -244,21 +252,19 @@ int fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is,
			vfsmount_group = vfsmount_mark->group;
		}

		if (inode_group > vfsmount_group) {
			/* handle inode */
			ret = send_to_group(to_tell, inode_mark, NULL, mask,
					    data, data_is, cookie, file_name);
			/* we didn't use the vfsmount_mark */
			vfsmount_group = NULL;
		} else if (vfsmount_group > inode_group) {
			ret = send_to_group(to_tell, NULL, vfsmount_mark, mask,
					    data, data_is, cookie, file_name);
		if (inode_group && vfsmount_group) {
			int cmp = fsnotify_compare_groups(inode_group,
							  vfsmount_group);
			if (cmp > 0) {
				inode_group = NULL;
		} else {
			ret = send_to_group(to_tell, inode_mark, vfsmount_mark,
					    mask, data, data_is, cookie,
					    file_name);
				inode_mark = NULL;
			} else if (cmp < 0) {
				vfsmount_group = NULL;
				vfsmount_mark = NULL;
			}
		}
		ret = send_to_group(to_tell, inode_mark, vfsmount_mark, mask,
				    data, data_is, cookie, file_name);

		if (ret && (mask & ALL_FSNOTIFY_PERM_EVENTS))
			goto out;
+4 −0
Original line number Diff line number Diff line
@@ -12,6 +12,10 @@ extern void fsnotify_flush_notify(struct fsnotify_group *group);
/* protects reads of inode and vfsmount marks list */
extern struct srcu_struct fsnotify_mark_srcu;

/* compare two groups for sorting of marks lists */
extern int fsnotify_compare_groups(struct fsnotify_group *a,
				   struct fsnotify_group *b);

extern void fsnotify_set_inode_mark_mask_locked(struct fsnotify_mark *fsn_mark,
						__u32 mask);
/* add a mark to an inode */
+3 −5
Original line number Diff line number Diff line
@@ -194,6 +194,7 @@ int fsnotify_add_inode_mark(struct fsnotify_mark *mark,
{
	struct fsnotify_mark *lmark, *last = NULL;
	int ret = 0;
	int cmp;

	mark->flags |= FSNOTIFY_MARK_FLAG_INODE;

@@ -219,11 +220,8 @@ int fsnotify_add_inode_mark(struct fsnotify_mark *mark,
			goto out;
		}

		if (mark->group->priority < lmark->group->priority)
			continue;

		if ((mark->group->priority == lmark->group->priority) &&
		    (mark->group < lmark->group))
		cmp = fsnotify_compare_groups(lmark->group, mark->group);
		if (cmp < 0)
			continue;

		hlist_add_before_rcu(&mark->i.i_list, &lmark->i.i_list);
Loading