Messages in this thread Patch in this message | | | Subject | Re: 2.1.133-1: NFS: Arghhh, stuck RPC requests! | From | Trond Myklebust <> | Date | 25 Dec 1998 15:13:02 +0100 |
| |
Steffen Zahn <zahn@berlin.snafu.de> writes:
> Hello, > > I get the following syslog messages on a NFS client under high NFS load: [snip] > Dec 23 17:04:33 zahn vmunix: RPC: rpciod waiting on sync task! >
Hi, Does the following patch get rid of them?
Cheers, Trond
Linus (if you're reading this): Shouldn't we really also be protecting asynchronous read requests using a dput/dget? I'm thinking about the case in which a silly-delete clobbers the dentry/inode before the read request is handled.
--- linux/fs/nfs/write.c-2.1.132 Fri Dec 18 00:54:25 1998 +++ linux/fs/nfs/write.c Fri Dec 25 15:04:20 1998 @@ -266,6 +266,7 @@ if (!--req->wb_count) { struct inode *inode = req->wb_inode; remove_write_request(&NFS_WRITEBACK(inode), req); + dput(req->wb_dentry); kfree(req); nr_write_requests--; } @@ -302,7 +303,7 @@ goto out_req; /* Put the task on inode's writeback request list. */ - wreq->wb_dentry = dentry; + wreq->wb_dentry = dget(dentry); wreq->wb_inode = inode; wreq->wb_pid = current->pid; wreq->wb_page = page; @@ -459,7 +460,6 @@ * The IO completion will then free the page and the dentry. */ atomic_inc(&page->count); - dget(dentry); /* Schedule request */ synchronous = schedule_write_request(req, sync); @@ -698,7 +698,6 @@ clear_bit(PG_uptodate, &page->flags); __free_page(page); - dput(req->wb_dentry); wake_up(&req->wb_wait); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |