فهرست منبع

fsnotify: add pr_debug throughout

It can be hard to debug fsnotify since there are so few printks.  Use
pr_debug to allow for dynamic debugging.

Signed-off-by: Eric Paris <eparis@redhat.com>
Eric Paris 15 سال پیش
والد
کامیت
5ba08e2eeb
4فایلهای تغییر یافته به همراه33 افزوده شده و 0 حذف شده
  1. 4 0
      fs/notify/fsnotify.c
  2. 6 0
      fs/notify/inotify/inotify_fsnotify.c
  3. 10 0
      fs/notify/inotify/inotify_user.c
  4. 13 0
      fs/notify/notification.c

+ 4 - 0
fs/notify/fsnotify.c

@@ -174,6 +174,10 @@ static int send_to_group(struct fsnotify_group *group, struct inode *to_tell,
 			 int data_is, u32 cookie, const unsigned char *file_name,
 			 int data_is, u32 cookie, const unsigned char *file_name,
 			 struct fsnotify_event **event)
 			 struct fsnotify_event **event)
 {
 {
+	pr_debug("%s: group=%p to_tell=%p mnt=%p mask=%x data=%p data_is=%d"
+		 " cookie=%d event=%p\n", __func__, group, to_tell, mnt,
+		 mask, data, data_is, cookie, *event);
+
 	if (!group->ops->should_send_event(group, to_tell, mnt, mask,
 	if (!group->ops->should_send_event(group, to_tell, mnt, mask,
 					   data, data_is))
 					   data, data_is))
 		return 0;
 		return 0;

+ 6 - 0
fs/notify/inotify/inotify_fsnotify.c

@@ -98,6 +98,9 @@ static int inotify_handle_event(struct fsnotify_group *group, struct fsnotify_ev
 	struct fsnotify_event_private_data *fsn_event_priv;
 	struct fsnotify_event_private_data *fsn_event_priv;
 	int wd, ret;
 	int wd, ret;
 
 
+	pr_debug("%s: group=%p event=%p to_tell=%p mask=%x\n", __func__, group,
+		 event, event->to_tell, event->mask);
+
 	to_tell = event->to_tell;
 	to_tell = event->to_tell;
 
 
 	fsn_mark = fsnotify_find_inode_mark(group, to_tell);
 	fsn_mark = fsnotify_find_inode_mark(group, to_tell);
@@ -151,6 +154,9 @@ static bool inotify_should_send_event(struct fsnotify_group *group, struct inode
 	struct fsnotify_mark *fsn_mark;
 	struct fsnotify_mark *fsn_mark;
 	bool send;
 	bool send;
 
 
+	pr_debug("%s: group=%p inode=%p mask=%x data=%p data_type=%d\n",
+		 __func__, group, inode, mask, data, data_type);
+
 	fsn_mark = fsnotify_find_inode_mark(group, inode);
 	fsn_mark = fsnotify_find_inode_mark(group, inode);
 	if (!fsn_mark)
 	if (!fsn_mark)
 		return false;
 		return false;

+ 10 - 0
fs/notify/inotify/inotify_user.c

@@ -141,6 +141,8 @@ static struct fsnotify_event *get_one_event(struct fsnotify_group *group,
 
 
 	event = fsnotify_peek_notify_event(group);
 	event = fsnotify_peek_notify_event(group);
 
 
+	pr_debug("%s: group=%p event=%p\n", __func__, group, event);
+
 	if (event->name_len)
 	if (event->name_len)
 		event_size += roundup(event->name_len + 1, event_size);
 		event_size += roundup(event->name_len + 1, event_size);
 
 
@@ -170,6 +172,8 @@ static ssize_t copy_event_to_user(struct fsnotify_group *group,
 	size_t event_size = sizeof(struct inotify_event);
 	size_t event_size = sizeof(struct inotify_event);
 	size_t name_len = 0;
 	size_t name_len = 0;
 
 
+	pr_debug("%s: group=%p event=%p\n", __func__, group, event);
+
 	/* we get the inotify watch descriptor from the event private data */
 	/* we get the inotify watch descriptor from the event private data */
 	spin_lock(&event->lock);
 	spin_lock(&event->lock);
 	fsn_priv = fsnotify_remove_priv_from_event(group, event);
 	fsn_priv = fsnotify_remove_priv_from_event(group, event);
@@ -242,6 +246,8 @@ static ssize_t inotify_read(struct file *file, char __user *buf,
 		kevent = get_one_event(group, count);
 		kevent = get_one_event(group, count);
 		mutex_unlock(&group->notification_mutex);
 		mutex_unlock(&group->notification_mutex);
 
 
+		pr_debug("%s: group=%p kevent=%p\n", __func__, group, kevent);
+
 		if (kevent) {
 		if (kevent) {
 			ret = PTR_ERR(kevent);
 			ret = PTR_ERR(kevent);
 			if (IS_ERR(kevent))
 			if (IS_ERR(kevent))
@@ -286,6 +292,8 @@ static int inotify_release(struct inode *ignored, struct file *file)
 	struct fsnotify_group *group = file->private_data;
 	struct fsnotify_group *group = file->private_data;
 	struct user_struct *user = group->inotify_data.user;
 	struct user_struct *user = group->inotify_data.user;
 
 
+	pr_debug("%s: group=%p\n", __func__, group);
+
 	fsnotify_clear_marks_by_group(group);
 	fsnotify_clear_marks_by_group(group);
 
 
 	/* free this group, matching get was inotify_init->fsnotify_obtain_group */
 	/* free this group, matching get was inotify_init->fsnotify_obtain_group */
@@ -309,6 +317,8 @@ static long inotify_ioctl(struct file *file, unsigned int cmd,
 	group = file->private_data;
 	group = file->private_data;
 	p = (void __user *) arg;
 	p = (void __user *) arg;
 
 
+	pr_debug("%s: group=%p cmd=%u\n", __func__, group, cmd);
+
 	switch (cmd) {
 	switch (cmd) {
 	case FIONREAD:
 	case FIONREAD:
 		mutex_lock(&group->notification_mutex);
 		mutex_lock(&group->notification_mutex);

+ 13 - 0
fs/notify/notification.c

@@ -87,6 +87,8 @@ void fsnotify_put_event(struct fsnotify_event *event)
 		return;
 		return;
 
 
 	if (atomic_dec_and_test(&event->refcnt)) {
 	if (atomic_dec_and_test(&event->refcnt)) {
+		pr_debug("%s: event=%p\n", __func__, event);
+
 		if (event->data_type == FSNOTIFY_EVENT_PATH)
 		if (event->data_type == FSNOTIFY_EVENT_PATH)
 			path_put(&event->path);
 			path_put(&event->path);
 
 
@@ -146,6 +148,8 @@ int fsnotify_add_notify_event(struct fsnotify_group *group, struct fsnotify_even
 	struct list_head *list = &group->notification_list;
 	struct list_head *list = &group->notification_list;
 	int rc = 0;
 	int rc = 0;
 
 
+	pr_debug("%s: group=%p event=%p priv=%p\n", __func__, group, event, priv);
+
 	/*
 	/*
 	 * There is one fsnotify_event_holder embedded inside each fsnotify_event.
 	 * There is one fsnotify_event_holder embedded inside each fsnotify_event.
 	 * Check if we expect to be able to use that holder.  If not alloc a new
 	 * Check if we expect to be able to use that holder.  If not alloc a new
@@ -222,6 +226,8 @@ struct fsnotify_event *fsnotify_remove_notify_event(struct fsnotify_group *group
 
 
 	BUG_ON(!mutex_is_locked(&group->notification_mutex));
 	BUG_ON(!mutex_is_locked(&group->notification_mutex));
 
 
+	pr_debug("%s: group=%p\n", __func__, group);
+
 	holder = list_first_entry(&group->notification_list, struct fsnotify_event_holder, event_list);
 	holder = list_first_entry(&group->notification_list, struct fsnotify_event_holder, event_list);
 
 
 	event = holder->event;
 	event = holder->event;
@@ -307,6 +313,8 @@ int fsnotify_replace_event(struct fsnotify_event_holder *old_holder,
 		SPINLOCK_NEW,
 		SPINLOCK_NEW,
 	};
 	};
 
 
+	pr_debug("%s: old_event=%p new_event=%p\n", __func__, old_event, new_event);
+
 	/*
 	/*
 	 * if the new_event's embedded holder is in use someone
 	 * if the new_event's embedded holder is in use someone
 	 * screwed up and didn't give us a clean new event.
 	 * screwed up and didn't give us a clean new event.
@@ -340,6 +348,8 @@ struct fsnotify_event *fsnotify_clone_event(struct fsnotify_event *old_event)
 	if (!event)
 	if (!event)
 		return NULL;
 		return NULL;
 
 
+	pr_debug("%s: old_event=%p new_event=%p\n", __func__, old_event, event);
+
 	memcpy(event, old_event, sizeof(*event));
 	memcpy(event, old_event, sizeof(*event));
 	initialize_event(event);
 	initialize_event(event);
 
 
@@ -379,6 +389,9 @@ struct fsnotify_event *fsnotify_create_event(struct inode *to_tell, __u32 mask,
 	if (!event)
 	if (!event)
 		return NULL;
 		return NULL;
 
 
+	pr_debug("%s: event=%p to_tell=%p mask=%x data=%p data_type=%d\n",
+		 __func__, event, to_tell, mask, data, data_type);
+
 	initialize_event(event);
 	initialize_event(event);
 
 
 	if (name) {
 	if (name) {