Skip to content

Commit

Permalink
Merge branch 'for-next' of git://git.samba.org/sfrench/cifs-2.6
Browse files Browse the repository at this point in the history
Pull CIFS fixes from Steve French:
 "Two minor cifs fixes and a minor documentation cleanup for cifs.txt"

* 'for-next' of git://git.samba.org/sfrench/cifs-2.6:
  cifs: update cifs.txt and remove some outdated infos
  cifs: Avoid calling unlock_page() twice in cifs_readpage() when using fscache
  cifs: Do not take a reference to the page in cifs_readpage_worker()
  • Loading branch information
torvalds committed Sep 16, 2013
2 parents f1da345 + 81b6622 commit 3369d11
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 36 deletions.
42 changes: 11 additions & 31 deletions Documentation/filesystems/cifs/cifs.txt
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
This is the client VFS module for the Common Internet File System
(CIFS) protocol which is the successor to the Server Message Block
(SMB) protocol, the native file sharing mechanism for most early
PC operating systems. CIFS is fully supported by current network
file servers such as Windows 2000, Windows 2003 (including
Windows XP) as well by Samba (which provides excellent CIFS
PC operating systems. New and improved versions of CIFS are now
called SMB2 and SMB3. These dialects are also supported by the
CIFS VFS module. CIFS is fully supported by network
file servers such as Windows 2000, 2003, 2008 and 2012
as well by Samba (which provides excellent CIFS
server support for Linux and many other operating systems), so
this network filesystem client can mount to a wide variety of
servers. The smbfs module should be used instead of this cifs module
for mounting to older SMB servers such as OS/2. The smbfs and cifs
modules can coexist and do not conflict. The CIFS VFS filesystem
module is designed to work well with servers that implement the
newer versions (dialects) of the SMB/CIFS protocol such as Samba,
the program written by Andrew Tridgell that turns any Unix host
into a SMB/CIFS file server.
servers.

The intent of this module is to provide the most advanced network
file system function for CIFS compliant servers, including better
Expand All @@ -24,28 +20,12 @@
alternative to NFSv4 for fileserving in some Linux to Linux environments,
not just in Linux to Windows environments.

This filesystem has an optional mount utility (mount.cifs) that can
be obtained from the project page and installed in the path in the same
directory with the other mount helpers (such as mount.smbfs).
Mounting using the cifs filesystem without installing the mount helper
requires specifying the server's ip address.
This filesystem has an mount utility (mount.cifs) that can be obtained from

For Linux 2.4:
mount //anything/here /mnt_target -o
user=username,pass=password,unc=//ip_address_of_server/sharename
https://ftp.samba.org/pub/linux-cifs/cifs-utils/

For Linux 2.5:
mount //ip_address_of_server/sharename /mnt_target -o user=username, pass=password
It must be installed in the directory with the other mount helpers.

For more information on the module see the project wiki page at

For more information on the module see the project page at

http://us1.samba.org/samba/Linux_CIFS_client.html

For more information on CIFS see:

http://www.snia.org/tech_activities/CIFS

or the Samba site:

http://www.samba.org
https://wiki.samba.org/index.php/LinuxCIFS_utils
15 changes: 10 additions & 5 deletions fs/cifs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -3379,6 +3379,9 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
return rc;
}

/*
* cifs_readpage_worker must be called with the page pinned
*/
static int cifs_readpage_worker(struct file *file, struct page *page,
loff_t *poffset)
{
Expand All @@ -3390,7 +3393,6 @@ static int cifs_readpage_worker(struct file *file, struct page *page,
if (rc == 0)
goto read_complete;

page_cache_get(page);
read_data = kmap(page);
/* for reads over a certain size could initiate async read ahead */

Expand All @@ -3417,7 +3419,7 @@ static int cifs_readpage_worker(struct file *file, struct page *page,

io_error:
kunmap(page);
page_cache_release(page);
unlock_page(page);

read_complete:
return rc;
Expand All @@ -3442,8 +3444,6 @@ static int cifs_readpage(struct file *file, struct page *page)

rc = cifs_readpage_worker(file, page, &offset);

unlock_page(page);

free_xid(xid);
return rc;
}
Expand Down Expand Up @@ -3497,6 +3497,7 @@ static int cifs_write_begin(struct file *file, struct address_space *mapping,
loff_t pos, unsigned len, unsigned flags,
struct page **pagep, void **fsdata)
{
int oncethru = 0;
pgoff_t index = pos >> PAGE_CACHE_SHIFT;
loff_t offset = pos & (PAGE_CACHE_SIZE - 1);
loff_t page_start = pos & PAGE_MASK;
Expand All @@ -3506,6 +3507,7 @@ static int cifs_write_begin(struct file *file, struct address_space *mapping,

cifs_dbg(FYI, "write_begin from %lld len %d\n", (long long)pos, len);

start:
page = grab_cache_page_write_begin(mapping, index, flags);
if (!page) {
rc = -ENOMEM;
Expand Down Expand Up @@ -3547,13 +3549,16 @@ static int cifs_write_begin(struct file *file, struct address_space *mapping,
}
}

if ((file->f_flags & O_ACCMODE) != O_WRONLY) {
if ((file->f_flags & O_ACCMODE) != O_WRONLY && !oncethru) {
/*
* might as well read a page, it is fast enough. If we get
* an error, we don't need to return it. cifs_write_end will
* do a sync write instead since PG_uptodate isn't set.
*/
cifs_readpage_worker(file, page, &page_start);
page_cache_release(page);
oncethru = 1;
goto start;
} else {
/* we could try using another file handle if there is one -
but how would we lock it to prevent close of that handle
Expand Down

0 comments on commit 3369d11

Please sign in to comment.