diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-22 20:52:29 -0400 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-22 20:52:29 -0400 | 
| commit | d2ecad9faca2221ae6f664f146f0dcae661bf39d (patch) | |
| tree | 9a13aabd0925e41586a292d34990ac2df73c34b2 /fs/cifs/misc.c | |
| parent | c70b5296e775cde46cfcb2d860ba160108a5ec7a (diff) | |
| parent | cdff08e76612e53580139653403aedea979aa639 (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6: (56 commits)
  [CIFS] move close processing  from cifs_close to cifsFileInfo_put
  cifs: convert cifs_tcp_ses_lock from a rwlock to a spinlock
  cifs: cancel_delayed_work() + flush_scheduled_work() -> cancel_delayed_work_sync()
  Clean up two declarations of blob_len
  cifs: move cifsFileInfo_put to file.c
  cifs: convert GlobalSMBSeslock from a rwlock to regular spinlock
  [CIFS] Fix minor checkpatch warning and update cifs version
  cifs: move cifs_new_fileinfo to file.c
  cifs: eliminate pfile pointer from cifsFileInfo
  cifs: cifs_write argument change and cleanup
  cifs: clean up cifs_reopen_file
  cifs: eliminate the inode argument from cifs_new_fileinfo
  cifs: eliminate oflags option from cifs_new_fileinfo
  cifs: fix flags handling in cifs_posix_open
  cifs: eliminate cifs_posix_open_inode_helper
  cifs: handle FindFirst failure gracefully
  NTLM authentication and signing - Calculate auth response per smb session
  cifs: don't use vfsmount to pin superblock for oplock breaks
  cifs: keep dentry reference in cifsFileInfo instead of inode reference
  cifs: on multiuser mount, set ownership to current_fsuid/current_fsgid (try #7)
  ...
Fix up trivial conflict in fs/cifs/cifsfs.c due to added/removed header files
Diffstat (limited to 'fs/cifs/misc.c')
| -rw-r--r-- | fs/cifs/misc.c | 32 | 
1 files changed, 11 insertions, 21 deletions
| diff --git a/fs/cifs/misc.c b/fs/cifs/misc.c index 3ccadc1326d6..1c681f6a6803 100644 --- a/fs/cifs/misc.c +++ b/fs/cifs/misc.c | |||
| @@ -347,7 +347,7 @@ header_assemble(struct smb_hdr *buffer, char smb_command /* command */ , | |||
| 347 | if (current_fsuid() != treeCon->ses->linux_uid) { | 347 | if (current_fsuid() != treeCon->ses->linux_uid) { | 
| 348 | cFYI(1, "Multiuser mode and UID " | 348 | cFYI(1, "Multiuser mode and UID " | 
| 349 | "did not match tcon uid"); | 349 | "did not match tcon uid"); | 
| 350 | read_lock(&cifs_tcp_ses_lock); | 350 | spin_lock(&cifs_tcp_ses_lock); | 
| 351 | list_for_each(temp_item, &treeCon->ses->server->smb_ses_list) { | 351 | list_for_each(temp_item, &treeCon->ses->server->smb_ses_list) { | 
| 352 | ses = list_entry(temp_item, struct cifsSesInfo, smb_ses_list); | 352 | ses = list_entry(temp_item, struct cifsSesInfo, smb_ses_list); | 
| 353 | if (ses->linux_uid == current_fsuid()) { | 353 | if (ses->linux_uid == current_fsuid()) { | 
| @@ -361,7 +361,7 @@ header_assemble(struct smb_hdr *buffer, char smb_command /* command */ , | |||
| 361 | } | 361 | } | 
| 362 | } | 362 | } | 
| 363 | } | 363 | } | 
| 364 | read_unlock(&cifs_tcp_ses_lock); | 364 | spin_unlock(&cifs_tcp_ses_lock); | 
| 365 | } | 365 | } | 
| 366 | } | 366 | } | 
| 367 | } | 367 | } | 
| @@ -551,7 +551,7 @@ is_valid_oplock_break(struct smb_hdr *buf, struct TCP_Server_Info *srv) | |||
| 551 | return false; | 551 | return false; | 
| 552 | 552 | ||
| 553 | /* look up tcon based on tid & uid */ | 553 | /* look up tcon based on tid & uid */ | 
| 554 | read_lock(&cifs_tcp_ses_lock); | 554 | spin_lock(&cifs_tcp_ses_lock); | 
| 555 | list_for_each(tmp, &srv->smb_ses_list) { | 555 | list_for_each(tmp, &srv->smb_ses_list) { | 
| 556 | ses = list_entry(tmp, struct cifsSesInfo, smb_ses_list); | 556 | ses = list_entry(tmp, struct cifsSesInfo, smb_ses_list); | 
| 557 | list_for_each(tmp1, &ses->tcon_list) { | 557 | list_for_each(tmp1, &ses->tcon_list) { | 
| @@ -560,25 +560,15 @@ is_valid_oplock_break(struct smb_hdr *buf, struct TCP_Server_Info *srv) | |||
| 560 | continue; | 560 | continue; | 
| 561 | 561 | ||
| 562 | cifs_stats_inc(&tcon->num_oplock_brks); | 562 | cifs_stats_inc(&tcon->num_oplock_brks); | 
| 563 | read_lock(&GlobalSMBSeslock); | 563 | spin_lock(&cifs_file_list_lock); | 
| 564 | list_for_each(tmp2, &tcon->openFileList) { | 564 | list_for_each(tmp2, &tcon->openFileList) { | 
| 565 | netfile = list_entry(tmp2, struct cifsFileInfo, | 565 | netfile = list_entry(tmp2, struct cifsFileInfo, | 
| 566 | tlist); | 566 | tlist); | 
| 567 | if (pSMB->Fid != netfile->netfid) | 567 | if (pSMB->Fid != netfile->netfid) | 
| 568 | continue; | 568 | continue; | 
| 569 | 569 | ||
| 570 | /* | ||
| 571 | * don't do anything if file is about to be | ||
| 572 | * closed anyway. | ||
| 573 | */ | ||
| 574 | if (netfile->closePend) { | ||
| 575 | read_unlock(&GlobalSMBSeslock); | ||
| 576 | read_unlock(&cifs_tcp_ses_lock); | ||
| 577 | return true; | ||
| 578 | } | ||
| 579 | |||
| 580 | cFYI(1, "file id match, oplock break"); | 570 | cFYI(1, "file id match, oplock break"); | 
| 581 | pCifsInode = CIFS_I(netfile->pInode); | 571 | pCifsInode = CIFS_I(netfile->dentry->d_inode); | 
| 582 | pCifsInode->clientCanCacheAll = false; | 572 | pCifsInode->clientCanCacheAll = false; | 
| 583 | if (pSMB->OplockLevel == 0) | 573 | if (pSMB->OplockLevel == 0) | 
| 584 | pCifsInode->clientCanCacheRead = false; | 574 | pCifsInode->clientCanCacheRead = false; | 
| @@ -594,17 +584,17 @@ is_valid_oplock_break(struct smb_hdr *buf, struct TCP_Server_Info *srv) | |||
| 594 | cifs_oplock_break_get(netfile); | 584 | cifs_oplock_break_get(netfile); | 
| 595 | netfile->oplock_break_cancelled = false; | 585 | netfile->oplock_break_cancelled = false; | 
| 596 | 586 | ||
| 597 | read_unlock(&GlobalSMBSeslock); | 587 | spin_unlock(&cifs_file_list_lock); | 
| 598 | read_unlock(&cifs_tcp_ses_lock); | 588 | spin_unlock(&cifs_tcp_ses_lock); | 
| 599 | return true; | 589 | return true; | 
| 600 | } | 590 | } | 
| 601 | read_unlock(&GlobalSMBSeslock); | 591 | spin_unlock(&cifs_file_list_lock); | 
| 602 | read_unlock(&cifs_tcp_ses_lock); | 592 | spin_unlock(&cifs_tcp_ses_lock); | 
| 603 | cFYI(1, "No matching file for oplock break"); | 593 | cFYI(1, "No matching file for oplock break"); | 
| 604 | return true; | 594 | return true; | 
| 605 | } | 595 | } | 
| 606 | } | 596 | } | 
| 607 | read_unlock(&cifs_tcp_ses_lock); | 597 | spin_unlock(&cifs_tcp_ses_lock); | 
| 608 | cFYI(1, "Can not process oplock break for non-existent connection"); | 598 | cFYI(1, "Can not process oplock break for non-existent connection"); | 
| 609 | return true; | 599 | return true; | 
| 610 | } | 600 | } | 
| @@ -729,6 +719,6 @@ cifs_autodisable_serverino(struct cifs_sb_info *cifs_sb) | |||
| 729 | "properly. Hardlinks will not be recognized on this " | 719 | "properly. Hardlinks will not be recognized on this " | 
| 730 | "mount. Consider mounting with the \"noserverino\" " | 720 | "mount. Consider mounting with the \"noserverino\" " | 
| 731 | "option to silence this message.", | 721 | "option to silence this message.", | 
| 732 | cifs_sb->tcon->treeName); | 722 | cifs_sb_master_tcon(cifs_sb)->treeName); | 
| 733 | } | 723 | } | 
| 734 | } | 724 | } | 
