1c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 2c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Inode based directory notification for Linux 3c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 4c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Copyright (C) 2005 John McCutchan 5c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 6c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 7c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef _LINUX_INOTIFY_H 8c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define _LINUX_INOTIFY_H 9c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 10c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/types.h> 11c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 12c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 13c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * struct inotify_event - structure read from the inotify device for each event 14c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 15c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * When you are watching a directory, you will receive the filename for events 16c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * such as IN_CREATE, IN_DELETE, IN_OPEN, IN_CLOSE, ..., relative to the wd. 17c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 18c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct inotify_event { 19c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __s32 wd; /* watch descriptor */ 20c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 mask; /* watch mask */ 21c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 cookie; /* cookie to synchronize two events */ 22c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 len; /* length (including nulls) of name */ 23c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru char name[0]; /* stub for possible name */ 24c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 25c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 26c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* the following are legal, implemented events that user-space can watch for */ 27c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_ACCESS 0x00000001 /* File was accessed */ 28c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_MODIFY 0x00000002 /* File was modified */ 29c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_ATTRIB 0x00000004 /* Metadata changed */ 30c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_CLOSE_WRITE 0x00000008 /* Writtable file was closed */ 31c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_CLOSE_NOWRITE 0x00000010 /* Unwrittable file closed */ 32c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_OPEN 0x00000020 /* File was opened */ 33c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_MOVED_FROM 0x00000040 /* File was moved from X */ 34c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_MOVED_TO 0x00000080 /* File was moved to Y */ 35c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_CREATE 0x00000100 /* Subfile was created */ 36c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_DELETE 0x00000200 /* Subfile was deleted */ 37c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_DELETE_SELF 0x00000400 /* Self was deleted */ 38c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_MOVE_SELF 0x00000800 /* Self was moved */ 39c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 40c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* the following are legal events. they are sent as needed to any watch */ 41c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_UNMOUNT 0x00002000 /* Backing fs was unmounted */ 42c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_Q_OVERFLOW 0x00004000 /* Event queued overflowed */ 43c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_IGNORED 0x00008000 /* File was ignored */ 44c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 45c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* helper events */ 46c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* close */ 47c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* moves */ 48c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 49c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* special flags */ 50c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_ONLYDIR 0x01000000 /* only watch the path if it is a directory */ 51c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_DONT_FOLLOW 0x02000000 /* don't follow a sym link */ 52c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_MASK_ADD 0x20000000 /* add to the mask of an already existing watch */ 53c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_ISDIR 0x40000000 /* event occurred against dir */ 54c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_ONESHOT 0x80000000 /* only send event once */ 55c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 56c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 57c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * All of the events - we build the list by hand so that we can add flags in 58c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * the future and not break backward compatibility. Apps will get only the 59c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * events that they originally wanted. Be sure to add new events here! 60c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 61c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define IN_ALL_EVENTS (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE | \ 62c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM | \ 63c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru IN_MOVED_TO | IN_DELETE | IN_CREATE | IN_DELETE_SELF | \ 64c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru IN_MOVE_SELF) 65c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 66c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef __KERNEL__ 67c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 68c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/dcache.h> 69c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/fs.h> 70c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 71c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 72c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * struct inotify_watch - represents a watch request on a specific inode 73c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 74c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * h_list is protected by ih->mutex of the associated inotify_handle. 75c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * i_list, mask are protected by inode->inotify_mutex of the associated inode. 76c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * ih, inode, and wd are never written to once the watch is created. 77c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 78c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Callers must use the established inotify interfaces to access inotify_watch 79c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * contents. The content of this structure is private to the inotify 80c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * implementation. 81c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 82c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct inotify_watch { 83c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct list_head h_list; /* entry in inotify_handle's list */ 84c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct list_head i_list; /* entry in inode's list */ 85c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru atomic_t count; /* reference count */ 86c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct inotify_handle *ih; /* associated inotify handle */ 87c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct inode *inode; /* associated inode */ 88c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __s32 wd; /* watch descriptor */ 89c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 mask; /* event mask for this watch */ 90c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 91c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 92c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct inotify_operations { 93c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru void (*handle_event)(struct inotify_watch *, u32, u32, u32, 94c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru const char *, struct inode *); 95c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru void (*destroy_watch)(struct inotify_watch *); 96c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 97c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 98c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef CONFIG_INOTIFY 99c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 100c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Kernel API for producing events */ 101c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 102c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void inotify_d_instantiate(struct dentry *, struct inode *); 103c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void inotify_d_move(struct dentry *); 104c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void inotify_inode_queue_event(struct inode *, __u32, __u32, 105c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru const char *, struct inode *); 106c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void inotify_dentry_parent_queue_event(struct dentry *, __u32, __u32, 107c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru const char *); 108c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void inotify_unmount_inodes(struct list_head *); 109c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void inotify_inode_is_dead(struct inode *); 110c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern u32 inotify_get_cookie(void); 111c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 112c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Kernel Consumer API */ 113c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 114c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct inotify_handle *inotify_init(const struct inotify_operations *); 115c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void inotify_init_watch(struct inotify_watch *); 116c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void inotify_destroy(struct inotify_handle *); 117c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern __s32 inotify_find_watch(struct inotify_handle *, struct inode *, 118c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct inotify_watch **); 119c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern __s32 inotify_find_update_watch(struct inotify_handle *, struct inode *, 120c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru u32); 121c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern __s32 inotify_add_watch(struct inotify_handle *, struct inotify_watch *, 122c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct inode *, __u32); 123c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int inotify_rm_watch(struct inotify_handle *, struct inotify_watch *); 124c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int inotify_rm_wd(struct inotify_handle *, __u32); 125c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void inotify_remove_watch_locked(struct inotify_handle *, 126c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct inotify_watch *); 127c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void get_inotify_watch(struct inotify_watch *); 128c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void put_inotify_watch(struct inotify_watch *); 129c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 130c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#else 131c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 132c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline void inotify_d_instantiate(struct dentry *dentry, 133c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct inode *inode) 134c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 135c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 136c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 137c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline void inotify_d_move(struct dentry *dentry) 138c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 139c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 140c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 141c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline void inotify_inode_queue_event(struct inode *inode, 142c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 mask, __u32 cookie, 143c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru const char *filename, 144c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct inode *n_inode) 145c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 146c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 147c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 148c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline void inotify_dentry_parent_queue_event(struct dentry *dentry, 149c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u32 mask, __u32 cookie, 150c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru const char *filename) 151c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 152c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 153c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 154c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline void inotify_unmount_inodes(struct list_head *list) 155c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 156c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 157c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 158c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline void inotify_inode_is_dead(struct inode *inode) 159c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 160c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 161c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 162c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline u32 inotify_get_cookie(void) 163c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 164c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return 0; 165c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 166c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 167c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline struct inotify_handle *inotify_init(const struct inotify_operations *ops) 168c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 169c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return ERR_PTR(-EOPNOTSUPP); 170c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 171c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 172c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline void inotify_init_watch(struct inotify_watch *watch) 173c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 174c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 175c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 176c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline void inotify_destroy(struct inotify_handle *ih) 177c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 178c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 179c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 180c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline __s32 inotify_find_watch(struct inotify_handle *ih, struct inode *inode, 181c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct inotify_watch **watchp) 182c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 183c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return -EOPNOTSUPP; 184c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 185c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 186c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline __s32 inotify_find_update_watch(struct inotify_handle *ih, 187c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct inode *inode, u32 mask) 188c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 189c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return -EOPNOTSUPP; 190c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 191c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 192c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline __s32 inotify_add_watch(struct inotify_handle *ih, 193c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct inotify_watch *watch, 194c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct inode *inode, __u32 mask) 195c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 196c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return -EOPNOTSUPP; 197c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 198c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 199c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline int inotify_rm_watch(struct inotify_handle *ih, 200c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct inotify_watch *watch) 201c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 202c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return -EOPNOTSUPP; 203c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 204c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 205c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline int inotify_rm_wd(struct inotify_handle *ih, __u32 wd) 206c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 207c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return -EOPNOTSUPP; 208c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 209c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 210c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline void inotify_remove_watch_locked(struct inotify_handle *ih, 211c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct inotify_watch *watch) 212c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 213c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 214c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 215c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline void get_inotify_watch(struct inotify_watch *watch) 216c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 217c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 218c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 219c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline void put_inotify_watch(struct inotify_watch *watch) 220c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 221c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 222c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 223c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* CONFIG_INOTIFY */ 224c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 225c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* __KERNEL __ */ 226c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 227c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* _LINUX_INOTIFY_H */ 228