#include <linux/fsnotify_backend.h>
#include <linux/path.h>
#include <linux/slab.h>

extern struct kmem_cache *fanotify_event_cachep;
extern struct kmem_cache *fanotify_perm_event_cachep;

/*
 * Structure for normal fanotify events. It gets allocated in
 * fanotify_handle_event() and freed when the information is retrieved by
 * userspace
 */
struct fanotify_event_info {
	struct fsnotify_event fse;
	/*
	 * We hold ref to this path so it may be dereferenced at any point
	 * during this object's lifetime
	 */
	struct path path;
	struct pid *tgid;
};

#ifdef CONFIG_FANOTIFY_ACCESS_PERMISSIONS
/*
 * Structure for permission fanotify events. It gets allocated and freed in
 * fanotify_handle_event() since we wait there for user response. When the
 * information is retrieved by userspace the structure is moved from
 * group->notification_list to group->fanotify_data.access_list to wait for
 * user response.
 */
struct fanotify_perm_event_info {
	struct fanotify_event_info fae;
	int response;	/* userspace answer to question */
	int fd;		/* fd we passed to userspace for this event */
};

static inline struct fanotify_perm_event_info *
FANOTIFY_PE(struct fsnotify_event *fse)
{
	return container_of(fse, struct fanotify_perm_event_info, fae.fse);
}
#endif

static inline struct fanotify_event_info *FANOTIFY_E(struct fsnotify_event *fse)
{
	return container_of(fse, struct fanotify_event_info, fse);
}

struct fanotify_event_info *fanotify_alloc_event(struct inode *inode, u32 mask,
						 const struct path *path);
ass='sub right'>Tobias Klauser</td></tr></table>
<table class='tabs'><tr><td>
<a href='/cgit.cgi/linux/net-next.git/?h=nds-private-remove'>summary</a><a href='/cgit.cgi/linux/net-next.git/refs/?h=nds-private-remove&amp;id=775a2e29c3bbcf853432f47d3caa9ff8808807ad'>refs</a><a href='/cgit.cgi/linux/net-next.git/log/include/trace?h=nds-private-remove'>log</a><a href='/cgit.cgi/linux/net-next.git/tree/include/trace?h=nds-private-remove&amp;id=775a2e29c3bbcf853432f47d3caa9ff8808807ad'>tree</a><a class='active' href='/cgit.cgi/linux/net-next.git/commit/include/trace?h=nds-private-remove&amp;id=775a2e29c3bbcf853432f47d3caa9ff8808807ad'>commit</a><a href='/cgit.cgi/linux/net-next.git/diff/include/trace?h=nds-private-remove&amp;id=775a2e29c3bbcf853432f47d3caa9ff8808807ad'>diff</a></td><td class='form'><form class='right' method='get' action='/cgit.cgi/linux/net-next.git/log/include/trace'>
<input type='hidden' name='h' value='nds-private-remove'/><input type='hidden' name='id' value='775a2e29c3bbcf853432f47d3caa9ff8808807ad'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/cgit.cgi/linux/net-next.git/commit/?h=nds-private-remove&amp;id=775a2e29c3bbcf853432f47d3caa9ff8808807ad'>root</a>/<a href='/cgit.cgi/linux/net-next.git/commit/include?h=nds-private-remove&amp;id=775a2e29c3bbcf853432f47d3caa9ff8808807ad'>include</a>/<a href='/cgit.cgi/linux/net-next.git/commit/include/trace?h=nds-private-remove&amp;id=775a2e29c3bbcf853432f47d3caa9ff8808807ad'>trace</a></div><div class='content'><div class='cgit-panel'><b>diff options</b><form method='get'><input type='hidden' name='h' value='nds-private-remove'/><input type='hidden' name='id' value='775a2e29c3bbcf853432f47d3caa9ff8808807ad'/><table><tr><td colspan='2'/></tr><tr><td class='label'>context:</td><td class='ctrl'><select name='context' onchange='this.form.submit();'><option value='1'>1</option><option value='2'>2</option><option value='3' selected='selected'>3</option><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='15'>15</option><option value='20'>20</option><option value='25'>25</option><option value='30'>30</option><option value='35'>35</option><option value='40'>40</option></select></td></tr><tr><td class='label'>space:</td><td class='ctrl'><select name='ignorews' onchange='this.form.submit();'><option value='0' selected='selected'>include</option><option value='1'>ignore</option></select></td></tr><tr><td class='label'>mode:</td><td class='ctrl'><select name='dt' onchange='this.form.submit();'><option value='0' selected='selected'>unified</option><option value='1'>ssdiff</option><option value='2'>stat only</option></select></td></tr><tr><td/><td class='ctrl'><noscript><input type='submit' value='reload'/></noscript></td></tr></table></form></div><table summary='commit info' class='commit-info'>
<tr><th>author</th><td>Linus Torvalds &lt;torvalds@linux-foundation.org&gt;</td><td class='right'>2016-12-14 11:01:00 -0800</td></tr>
<tr><th>committer</th><td>Linus Torvalds &lt;torvalds@linux-foundation.org&gt;</td><td class='right'>2016-12-14 11:01:00 -0800</td></tr>
<tr><th>commit</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/commit/include/trace?h=nds-private-remove&amp;id=775a2e29c3bbcf853432f47d3caa9ff8808807ad'>775a2e29c3bbcf853432f47d3caa9ff8808807ad</a> (<a href='/cgit.cgi/linux/net-next.git/patch/include/trace?id=775a2e29c3bbcf853432f47d3caa9ff8808807ad'>patch</a>)</td></tr>
<tr><th>tree</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/tree/?h=nds-private-remove&amp;id=775a2e29c3bbcf853432f47d3caa9ff8808807ad'>614a7481b68dc9b0b628f392ab9bbdc53bbfe447</a> /<a href='/cgit.cgi/linux/net-next.git/tree/include/trace?h=nds-private-remove&amp;id=775a2e29c3bbcf853432f47d3caa9ff8808807ad'>include/trace</a></td></tr>
<tr><th>parent</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/commit/include/trace?h=nds-private-remove&amp;id=2a4c32edd39b7de166e723b1991abcde4db3a701'>2a4c32edd39b7de166e723b1991abcde4db3a701</a> (<a href='/cgit.cgi/linux/net-next.git/diff/include/trace?h=nds-private-remove&amp;id=775a2e29c3bbcf853432f47d3caa9ff8808807ad&amp;id2=2a4c32edd39b7de166e723b1991abcde4db3a701'>diff</a>)</td></tr><tr><th>parent</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/commit/include/trace?h=nds-private-remove&amp;id=ef548c551e72dbbdcc6d9ed7c7b3b01083fea8e2'>ef548c551e72dbbdcc6d9ed7c7b3b01083fea8e2</a> (<a href='/cgit.cgi/linux/net-next.git/diff/include/trace?h=nds-private-remove&amp;id=775a2e29c3bbcf853432f47d3caa9ff8808807ad&amp;id2=ef548c551e72dbbdcc6d9ed7c7b3b01083fea8e2'>diff</a>)</td></tr></table>
<div class='commit-subject'>Merge tag 'dm-4.10-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm</div><div class='commit-msg'>Pull device mapper updates from Mike Snitzer:

 - various fixes and improvements to request-based DM and DM multipath

 - some locking improvements in DM bufio

 - add Kconfig option to disable the DM block manager's extra locking
   which mainly serves as a developer tool

 - a few bug fixes to DM's persistent-data

 - a couple changes to prepare for multipage biovec support in the block
   layer

 - various improvements and cleanups in the DM core, DM cache, DM raid
   and DM crypt

 - add ability to have DM crypt use keys from the kernel key retention
   service

 - add a new "error_writes" feature to the DM flakey target, reads are
   left unchanged in this mode

* tag 'dm-4.10-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm: (40 commits)
  dm flakey: introduce "error_writes" feature
  dm cache policy smq: use hash_32() instead of hash_32_generic()
  dm crypt: reject key strings containing whitespace chars
  dm space map: always set ev if sm_ll_mutate() succeeds
  dm space map metadata: skip useless memcpy in metadata_ll_init_index()
  dm space map metadata: fix 'struct sm_metadata' leak on failed create
  Documentation: dm raid: define data_offset status field
  dm raid: fix discard support regression
  dm raid: don't allow "write behind" with raid4/5/6
  dm mpath: use hw_handler_params if attached hw_handler is same as requested
  dm crypt: add ability to use keys from the kernel key retention service
  dm array: remove a dead assignment in populate_ablock_with_values()
  dm ioctl: use offsetof() instead of open-coding it
  dm rq: simplify use_blk_mq initialization
  dm: use blk_set_queue_dying() in __dm_destroy()
  dm bufio: drop the lock when doing GFP_NOIO allocation
  dm bufio: don't take the lock in dm_bufio_shrink_count
  dm bufio: avoid sleeping while holding the dm_bufio lock
  dm table: simplify dm_table_determine_type()
  dm table: an 'all_blk_mq' table must be loaded for a blk-mq DM device
  ...
</div><div class='diffstat-header'><a href='/cgit.cgi/linux/net-next.git/diff/?h=nds-private-remove&amp;id=775a2e29c3bbcf853432f47d3caa9ff8808807ad'>Diffstat</a> (limited to 'include/trace')</div><table summary='diffstat' class='diffstat'>