diff -u --recursive --new-file linux-2.5.32-vfs1.5/fs/smbfs/file.c linux-2.5.32-vfs1.75/fs/smbfs/file.c --- linux-2.5.32-vfs1.5/fs/smbfs/file.c Thu Aug 29 22:27:25 2002 +++ linux-2.5.32-vfs1.75/fs/smbfs/file.c Mon Sep 2 21:51:06 2002 @@ -50,37 +50,30 @@ * Read a page synchronously. */ static int -smb_readpage_sync(struct dentry *dentry, struct page *page) +smb_readpage_sync(struct inode *inode, struct page *page) { char *buffer = kmap(page); loff_t offset = (loff_t)page->index << PAGE_CACHE_SHIFT; - struct smb_sb_info *server = server_from_dentry(dentry); + struct smb_sb_info *server = server_from_inode(inode); unsigned int rsize = smb_get_rsize(server); int count = PAGE_SIZE; int result; - VERBOSE("file %s/%s, count=%d@%Ld, rsize=%d\n", - DENTRY_PATH(dentry), count, offset, rsize); - - result = smb_open(dentry, SMB_O_RDONLY); - if (result < 0) { - PARANOIA("%s/%s open failed, error=%d\n", - DENTRY_PATH(dentry), result); - goto io_error; - } + VERBOSE("file ino=%ld, fileid=%d, count=%d@%Ld, rsize=%d\n", + inode->i_ino, SMB_I(inode)->fileid, count, offset, rsize); do { if (count < rsize) rsize = count; - result = server->ops->read(dentry->d_inode,offset,rsize,buffer); + result = server->ops->read(inode,offset,rsize,buffer); if (result < 0) goto io_error; count -= result; offset += result; buffer += result; - dentry->d_inode->i_atime = CURRENT_TIME; + inode->i_atime = CURRENT_TIME; if (result < rsize) break; } while (count); @@ -102,11 +95,11 @@ static int smb_readpage(struct file *file, struct page *page) { + struct inode *inode = page->mapping->host; int error; - struct dentry *dentry = file->f_dentry; page_cache_get(page); - error = smb_readpage_sync(dentry, page); + error = smb_readpage_sync(inode, page); page_cache_release(page); return error; } @@ -230,6 +223,10 @@ goto out; } + result = smb_open(dentry, SMB_O_RDONLY); + if (result < 0) + goto out; + VERBOSE("before read, size=%ld, flags=%x, atime=%ld\n", (long)dentry->d_inode->i_size, dentry->d_inode->i_flags, dentry->d_inode->i_atime);