>>>>> " " == Linus Torvalds <[EMAIL PROTECTED]> writes:

    >> I was "borrowing" stuff from the nfs code and this looked
    >> strange:
    >>
    >> nfs_writepage_sync: struct dentry *dentry = file->f_dentry;
    >> struct rpc_cred *cred = nfs_file_cred(file);
    >>
    >> yet it is called like this from nfs_writepage: err =
    >> nfs_writepage_sync(NULL, inode, page, 0, offset);
    >>
    >> where file is the 1st argument. Oh, it calls
    >> nfs_writepage_async most of the time. All of the time?

     > That's bogus. But Trond probably overlooked it in testing,
     > because yes, it always calls the async version unless there has
     > been errors doing async writes (which should be rather
     > uncommon).

     > Trond? Can you massage the sync version to do the same as the
     > async one?

Oops. That was due to a stupid oversight... I grepped for dependencies
upon dentry->d_inode, but forgot to do the same in order to weed out
the remaining file->f_dentry.

The appended patch should remove the last 'struct file' dependencies
from both readpage() and writepage().

Cheers,
  Trond

diff -u --recursive --new-file linux-2.4.0-test12-pre6/fs/nfs/read.c 
linux-2.4.0-test12-fixme/fs/nfs/read.c
--- linux-2.4.0-test12-pre6/fs/nfs/read.c       Wed Dec  6 08:34:53 2000
+++ linux-2.4.0-test12-fixme/fs/nfs/read.c      Wed Dec  6 08:41:54 2000
@@ -84,8 +84,7 @@
 static int
 nfs_readpage_sync(struct file *file, struct inode *inode, struct page *page)
 {
-       struct dentry   *dentry = file->f_dentry;
-       struct rpc_cred *cred = nfs_file_cred(file);
+       struct rpc_cred *cred = NULL;
        struct nfs_fattr fattr;
        loff_t          offset = page_offset(page);
        char            *buffer;
@@ -97,6 +96,9 @@
 
        dprintk("NFS: nfs_readpage_sync(%p)\n", page);
 
+       if (file)
+               cred = nfs_file_cred(file);
+
        /*
         * This works now because the socket layer never tries to DMA
         * into this buffer directly.
@@ -106,9 +108,9 @@
                if (count < rsize)
                        rsize = count;
 
-               dprintk("NFS: nfs_proc_read(%s, (%s/%s), %Ld, %d, %p)\n",
+               dprintk("NFS: nfs_proc_read(%s, (%x/%Ld), %Ld, %d, %p)\n",
                        NFS_SERVER(inode)->hostname,
-                       dentry->d_parent->d_name.name, dentry->d_name.name,
+                       inode->i_dev, (long long)NFS_FILEID(inode),
                        (long long)offset, rsize, buffer);
 
                lock_kernel();
diff -u --recursive --new-file linux-2.4.0-test12-pre6/fs/nfs/write.c 
linux-2.4.0-test12-fixme/fs/nfs/write.c
--- linux-2.4.0-test12-pre6/fs/nfs/write.c      Wed Dec  6 08:34:53 2000
+++ linux-2.4.0-test12-fixme/fs/nfs/write.c     Wed Dec  6 08:43:52 2000
@@ -171,8 +171,7 @@
 nfs_writepage_sync(struct file *file, struct inode *inode, struct page *page,
                   unsigned int offset, unsigned int count)
 {
-       struct dentry   *dentry = file->f_dentry;
-       struct rpc_cred *cred = nfs_file_cred(file);
+       struct rpc_cred *cred = NULL;
        loff_t          base;
        unsigned int    wsize = NFS_SERVER(inode)->wsize;
        int             result, refresh = 0, written = 0, flags;
@@ -180,9 +179,13 @@
        struct nfs_fattr fattr;
        struct nfs_writeverf verf;
 
+
+       if (file)
+               cred = nfs_file_cred(file);
+
        lock_kernel();
-       dprintk("NFS:      nfs_writepage_sync(%s/%s %d@%Ld)\n",
-               dentry->d_parent->d_name.name, dentry->d_name.name,
+       dprintk("NFS:      nfs_writepage_sync(%x/%Ld %d@%Ld)\n",
+               inode->i_dev, (long long)NFS_FILEID(inode),
                count, (long long)(page_offset(page) + offset));
 
        buffer = kmap(page) + offset;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to