diff options
Diffstat (limited to 'fs/cifs/inode.c')
| -rw-r--r-- | fs/cifs/inode.c | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index 4093764ef461..b88147c1dc27 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c | |||
| @@ -41,7 +41,7 @@ int cifs_get_inode_info_unix(struct inode **pinode, | |||
| 41 | char *tmp_path; | 41 | char *tmp_path; |
| 42 | 42 | ||
| 43 | pTcon = cifs_sb->tcon; | 43 | pTcon = cifs_sb->tcon; |
| 44 | cFYI(1, ("Getting info on %s ", search_path)); | 44 | cFYI(1, ("Getting info on %s", search_path)); |
| 45 | /* could have done a find first instead but this returns more info */ | 45 | /* could have done a find first instead but this returns more info */ |
| 46 | rc = CIFSSMBUnixQPathInfo(xid, pTcon, search_path, &findData, | 46 | rc = CIFSSMBUnixQPathInfo(xid, pTcon, search_path, &findData, |
| 47 | cifs_sb->local_nls, cifs_sb->mnt_cifs_flags & | 47 | cifs_sb->local_nls, cifs_sb->mnt_cifs_flags & |
| @@ -97,9 +97,9 @@ int cifs_get_inode_info_unix(struct inode **pinode, | |||
| 97 | inode = *pinode; | 97 | inode = *pinode; |
| 98 | cifsInfo = CIFS_I(inode); | 98 | cifsInfo = CIFS_I(inode); |
| 99 | 99 | ||
| 100 | cFYI(1, ("Old time %ld ", cifsInfo->time)); | 100 | cFYI(1, ("Old time %ld", cifsInfo->time)); |
| 101 | cifsInfo->time = jiffies; | 101 | cifsInfo->time = jiffies; |
| 102 | cFYI(1, ("New time %ld ", cifsInfo->time)); | 102 | cFYI(1, ("New time %ld", cifsInfo->time)); |
| 103 | /* this is ok to set on every inode revalidate */ | 103 | /* this is ok to set on every inode revalidate */ |
| 104 | atomic_set(&cifsInfo->inUse,1); | 104 | atomic_set(&cifsInfo->inUse,1); |
| 105 | 105 | ||
| @@ -180,11 +180,12 @@ int cifs_get_inode_info_unix(struct inode **pinode, | |||
| 180 | else /* not direct, send byte range locks */ | 180 | else /* not direct, send byte range locks */ |
| 181 | inode->i_fop = &cifs_file_ops; | 181 | inode->i_fop = &cifs_file_ops; |
| 182 | 182 | ||
| 183 | inode->i_data.a_ops = &cifs_addr_ops; | ||
| 184 | /* check if server can support readpages */ | 183 | /* check if server can support readpages */ |
| 185 | if(pTcon->ses->server->maxBuf < | 184 | if(pTcon->ses->server->maxBuf < |
| 186 | 4096 + MAX_CIFS_HDR_SIZE) | 185 | PAGE_CACHE_SIZE + MAX_CIFS_HDR_SIZE) |
| 187 | inode->i_data.a_ops->readpages = NULL; | 186 | inode->i_data.a_ops = &cifs_addr_ops_smallbuf; |
| 187 | else | ||
| 188 | inode->i_data.a_ops = &cifs_addr_ops; | ||
| 188 | } else if (S_ISDIR(inode->i_mode)) { | 189 | } else if (S_ISDIR(inode->i_mode)) { |
| 189 | cFYI(1, ("Directory inode")); | 190 | cFYI(1, ("Directory inode")); |
| 190 | inode->i_op = &cifs_dir_inode_ops; | 191 | inode->i_op = &cifs_dir_inode_ops; |
| @@ -421,23 +422,23 @@ int cifs_get_inode_info(struct inode **pinode, | |||
| 421 | inode = *pinode; | 422 | inode = *pinode; |
| 422 | cifsInfo = CIFS_I(inode); | 423 | cifsInfo = CIFS_I(inode); |
| 423 | cifsInfo->cifsAttrs = attr; | 424 | cifsInfo->cifsAttrs = attr; |
| 424 | cFYI(1, ("Old time %ld ", cifsInfo->time)); | 425 | cFYI(1, ("Old time %ld", cifsInfo->time)); |
| 425 | cifsInfo->time = jiffies; | 426 | cifsInfo->time = jiffies; |
| 426 | cFYI(1, ("New time %ld ", cifsInfo->time)); | 427 | cFYI(1, ("New time %ld", cifsInfo->time)); |
| 427 | 428 | ||
| 428 | /* blksize needs to be multiple of two. So safer to default to | 429 | /* blksize needs to be multiple of two. So safer to default to |
| 429 | blksize and blkbits set in superblock so 2**blkbits and blksize | 430 | blksize and blkbits set in superblock so 2**blkbits and blksize |
| 430 | will match rather than setting to: | 431 | will match rather than setting to: |
| 431 | (pTcon->ses->server->maxBuf - MAX_CIFS_HDR_SIZE) & 0xFFFFFE00;*/ | 432 | (pTcon->ses->server->maxBuf - MAX_CIFS_HDR_SIZE) & 0xFFFFFE00;*/ |
| 432 | 433 | ||
| 433 | /* Linux can not store file creation time unfortunately so we ignore it */ | 434 | /* Linux can not store file creation time so ignore it */ |
| 434 | inode->i_atime = | 435 | inode->i_atime = |
| 435 | cifs_NTtimeToUnix(le64_to_cpu(pfindData->LastAccessTime)); | 436 | cifs_NTtimeToUnix(le64_to_cpu(pfindData->LastAccessTime)); |
| 436 | inode->i_mtime = | 437 | inode->i_mtime = |
| 437 | cifs_NTtimeToUnix(le64_to_cpu(pfindData->LastWriteTime)); | 438 | cifs_NTtimeToUnix(le64_to_cpu(pfindData->LastWriteTime)); |
| 438 | inode->i_ctime = | 439 | inode->i_ctime = |
| 439 | cifs_NTtimeToUnix(le64_to_cpu(pfindData->ChangeTime)); | 440 | cifs_NTtimeToUnix(le64_to_cpu(pfindData->ChangeTime)); |
| 440 | cFYI(0, ("Attributes came in as 0x%x ", attr)); | 441 | cFYI(0, ("Attributes came in as 0x%x", attr)); |
| 441 | 442 | ||
| 442 | /* set default mode. will override for dirs below */ | 443 | /* set default mode. will override for dirs below */ |
| 443 | if (atomic_read(&cifsInfo->inUse) == 0) | 444 | if (atomic_read(&cifsInfo->inUse) == 0) |
| @@ -519,10 +520,11 @@ int cifs_get_inode_info(struct inode **pinode, | |||
| 519 | else /* not direct, send byte range locks */ | 520 | else /* not direct, send byte range locks */ |
| 520 | inode->i_fop = &cifs_file_ops; | 521 | inode->i_fop = &cifs_file_ops; |
| 521 | 522 | ||
| 522 | inode->i_data.a_ops = &cifs_addr_ops; | ||
| 523 | if(pTcon->ses->server->maxBuf < | 523 | if(pTcon->ses->server->maxBuf < |
| 524 | 4096 + MAX_CIFS_HDR_SIZE) | 524 | PAGE_CACHE_SIZE + MAX_CIFS_HDR_SIZE) |
| 525 | inode->i_data.a_ops->readpages = NULL; | 525 | inode->i_data.a_ops = &cifs_addr_ops_smallbuf; |
| 526 | else | ||
| 527 | inode->i_data.a_ops = &cifs_addr_ops; | ||
| 526 | } else if (S_ISDIR(inode->i_mode)) { | 528 | } else if (S_ISDIR(inode->i_mode)) { |
| 527 | cFYI(1, ("Directory inode")); | 529 | cFYI(1, ("Directory inode")); |
| 528 | inode->i_op = &cifs_dir_inode_ops; | 530 | inode->i_op = &cifs_dir_inode_ops; |
| @@ -731,7 +733,7 @@ int cifs_mkdir(struct inode *inode, struct dentry *direntry, int mode) | |||
| 731 | rc = CIFSSMBMkDir(xid, pTcon, full_path, cifs_sb->local_nls, | 733 | rc = CIFSSMBMkDir(xid, pTcon, full_path, cifs_sb->local_nls, |
| 732 | cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); | 734 | cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); |
| 733 | if (rc) { | 735 | if (rc) { |
| 734 | cFYI(1, ("cifs_mkdir returned 0x%x ", rc)); | 736 | cFYI(1, ("cifs_mkdir returned 0x%x", rc)); |
| 735 | d_drop(direntry); | 737 | d_drop(direntry); |
| 736 | } else { | 738 | } else { |
| 737 | inode->i_nlink++; | 739 | inode->i_nlink++; |
| @@ -798,7 +800,7 @@ int cifs_rmdir(struct inode *inode, struct dentry *direntry) | |||
| 798 | char *full_path = NULL; | 800 | char *full_path = NULL; |
| 799 | struct cifsInodeInfo *cifsInode; | 801 | struct cifsInodeInfo *cifsInode; |
| 800 | 802 | ||
| 801 | cFYI(1, ("cifs_rmdir, inode = 0x%p with ", inode)); | 803 | cFYI(1, ("cifs_rmdir, inode = 0x%p", inode)); |
| 802 | 804 | ||
| 803 | xid = GetXid(); | 805 | xid = GetXid(); |
| 804 | 806 | ||
| @@ -1121,7 +1123,7 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs) | |||
| 1121 | 1123 | ||
| 1122 | xid = GetXid(); | 1124 | xid = GetXid(); |
| 1123 | 1125 | ||
| 1124 | cFYI(1, ("In cifs_setattr, name = %s attrs->iavalid 0x%x ", | 1126 | cFYI(1, ("setattr on file %s attrs->iavalid 0x%x", |
| 1125 | direntry->d_name.name, attrs->ia_valid)); | 1127 | direntry->d_name.name, attrs->ia_valid)); |
| 1126 | 1128 | ||
| 1127 | cifs_sb = CIFS_SB(direntry->d_inode->i_sb); | 1129 | cifs_sb = CIFS_SB(direntry->d_inode->i_sb); |
| @@ -1157,6 +1159,7 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs) | |||
| 1157 | when the local oplock break takes longer to flush | 1159 | when the local oplock break takes longer to flush |
| 1158 | writebehind data than the SMB timeout for the SetPathInfo | 1160 | writebehind data than the SMB timeout for the SetPathInfo |
| 1159 | request would allow */ | 1161 | request would allow */ |
| 1162 | |||
| 1160 | open_file = find_writable_file(cifsInode); | 1163 | open_file = find_writable_file(cifsInode); |
| 1161 | if (open_file) { | 1164 | if (open_file) { |
| 1162 | __u16 nfid = open_file->netfid; | 1165 | __u16 nfid = open_file->netfid; |
| @@ -1289,7 +1292,7 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs) | |||
| 1289 | it may be useful to Windows - but we do | 1292 | it may be useful to Windows - but we do |
| 1290 | not want to set ctime unless some other | 1293 | not want to set ctime unless some other |
| 1291 | timestamp is changing */ | 1294 | timestamp is changing */ |
| 1292 | cFYI(1, ("CIFS - CTIME changed ")); | 1295 | cFYI(1, ("CIFS - CTIME changed")); |
| 1293 | time_buf.ChangeTime = | 1296 | time_buf.ChangeTime = |
| 1294 | cpu_to_le64(cifs_UnixTimeToNT(attrs->ia_ctime)); | 1297 | cpu_to_le64(cifs_UnixTimeToNT(attrs->ia_ctime)); |
| 1295 | } else | 1298 | } else |
| @@ -1356,7 +1359,7 @@ cifs_setattr_exit: | |||
| 1356 | 1359 | ||
| 1357 | void cifs_delete_inode(struct inode *inode) | 1360 | void cifs_delete_inode(struct inode *inode) |
| 1358 | { | 1361 | { |
| 1359 | cFYI(1, ("In cifs_delete_inode, inode = 0x%p ", inode)); | 1362 | cFYI(1, ("In cifs_delete_inode, inode = 0x%p", inode)); |
| 1360 | /* may have to add back in if and when safe distributed caching of | 1363 | /* may have to add back in if and when safe distributed caching of |
| 1361 | directories added e.g. via FindNotify */ | 1364 | directories added e.g. via FindNotify */ |
| 1362 | } | 1365 | } |
