From 274e6fefaa7925e789204b55a7afa840ec560db9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 18 Jun 2003 00:01:12 +0000 Subject: [PATCH] Removed the new_vnode() timeout for busy vnodes. Fixed the op-description send_notification() gives - notify_listener() now only prints out the op value, since it will call send_notification() anyway. The tracker doesn't try to query files on B_ATTR_CHANGED or when node == 0, or name == NULL. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3560 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/file_systems/fs_shell/fsh.c | 10 +++-- .../kernel/file_systems/fs_shell/kernel.c | 43 ++++++++++--------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/src/tests/add-ons/kernel/file_systems/fs_shell/fsh.c b/src/tests/add-ons/kernel/file_systems/fs_shell/fsh.c index 03dedc5da7..57041f8ebc 100644 --- a/src/tests/add-ons/kernel/file_systems/fs_shell/fsh.c +++ b/src/tests/add-ons/kernel/file_systems/fs_shell/fsh.c @@ -988,9 +988,12 @@ static void tracker_query_file(dev_t device, ino_t parent, char *name) { struct stat stat; - int status; + int status, fd; - int fd = sys_open_entry_ref(1, device, parent, name, O_RDONLY, 0); + if (name == NULL || parent == 0) + return; + + fd = sys_open_entry_ref(1, device, parent, name, O_RDONLY, 0); if (fd < 0) { printf("tracker: could not open file: %s\n", name); return; @@ -1026,7 +1029,8 @@ tracker_loop(void *data) if (code == FSH_NOTIFY_LISTENER) { printf("tracker: notify listener received\n"); - tracker_query_file(message.device, message.parentNode, message.name); + if (message.op != B_ATTR_CHANGED && message.op != B_DEVICE_UNMOUNTED) + tracker_query_file(message.device, message.parentNode, message.name); } else if (code == B_QUERY_UPDATE) { printf("tracker: query update received\n"); tracker_query_file(message.device, message.parentNode, message.name); diff --git a/src/tests/add-ons/kernel/file_systems/fs_shell/kernel.c b/src/tests/add-ons/kernel/file_systems/fs_shell/kernel.c index 408e0bbce4..f47860812a 100644 --- a/src/tests/add-ons/kernel/file_systems/fs_shell/kernel.c +++ b/src/tests/add-ons/kernel/file_systems/fs_shell/kernel.c @@ -2307,7 +2307,7 @@ put_vnode(nspace_id nsid, vnode_id vnid) int new_vnode(nspace_id nsid, vnode_id vnid, void *data) { - int retries = 20; +// int retries = 20; vnode *vn; int err; @@ -2321,11 +2321,14 @@ restart: if (vn->busy) { printf("new_vnode(): vnode exists and is busy!\n"); - snooze(500); - if (retries-- >= 0) + UNLOCK(vnlock); + snooze(5000); + LOCK(vnlock); + +// if (retries-- >= 0) goto restart; - printf("new_vnode(): still busy, but continue to our doom!\n"); +// printf("new_vnode(): still busy, but continue to our doom!\n"); } if (vn->data != data) @@ -3243,6 +3246,21 @@ free_fds(fdarray *fds) int notify_listener(int op, nspace_id nsid, vnode_id vnida, vnode_id vnidb, vnode_id vnidc, const char *name) { +#ifdef DEBUG + printf("notify_listener: op = %ld\n", op); +#endif + + return send_notification(0, 0, FSH_NOTIFY_LISTENER, op, nsid, -1, vnida, vnidb, vnidc, name); +} + + +int +send_notification(port_id port, long token, ulong what, long op, nspace_id nsida, + nspace_id nsidb, vnode_id vnida, vnode_id vnidb, vnode_id vnidc, + const char *name) +{ + update_message message; + #ifdef DEBUG char *text; @@ -3272,23 +3290,8 @@ notify_listener(int op, nspace_id nsid, vnode_id vnida, vnode_id vnidb, vnode_id text = "unknown operation..."; break; } - printf("notify_listener: %s\n", text); -#endif - - return send_notification(0, 0, FSH_NOTIFY_LISTENER, op, nsid, -1, vnida, vnidb, vnidc, name); -} - - -int -send_notification(port_id port, long token, ulong what, long op, nspace_id nsida, - nspace_id nsidb, vnode_id vnida, vnode_id vnidb, vnode_id vnidc, - const char *name) -{ - update_message message; - -#ifdef DEBUG printf("send_notification... op = %s, name = %s, port = %ld, token = %ld\n", - op == B_ENTRY_CREATED ? "B_ENTRY_CREATED" : "B_ENTRY_REMOVED", name, port, token); + text, name, port, token); #endif message.op = op;