Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 213409
b: refs/heads/master
c: f3983c2
h: refs/heads/master
i:
  213407: 54ad648
v: v3
  • Loading branch information
Jeff Layton authored and Steve French committed Sep 29, 2010
1 parent 66cc1ca commit c91a8b5
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 32 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f7a40689fd1e963cb1006349e050c07584895db5
refs/heads/master: f3983c2133e9bea9c8b4f690737d15e3e9b02491
68 changes: 37 additions & 31 deletions trunk/fs/cifs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -1353,6 +1353,15 @@ static int cifs_writepages(struct address_space *mapping,
int scanned = 0;
int xid, long_op;

/*
* BB: Is this meaningful for a non-block-device file system?
* If it is, we should test it again after we do I/O
*/
if (wbc->nonblocking && bdi_write_congested(bdi)) {
wbc->encountered_congestion = 1;
return 0;
}

cifs_sb = CIFS_SB(mapping->host->i_sb);

/*
Expand All @@ -1362,26 +1371,28 @@ static int cifs_writepages(struct address_space *mapping,
if (cifs_sb->wsize < PAGE_CACHE_SIZE)
return generic_writepages(mapping, wbc);

if ((cifs_sb->tcon->ses) && (cifs_sb->tcon->ses->server))
if (cifs_sb->tcon->ses->server->secMode &
(SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED))
if (!experimEnabled)
return generic_writepages(mapping, wbc);

iov = kmalloc(32 * sizeof(struct kvec), GFP_KERNEL);
if (iov == NULL)
return generic_writepages(mapping, wbc);


/*
* BB: Is this meaningful for a non-block-device file system?
* If it is, we should test it again after we do I/O
* if there's no open file, then this is likely to fail too,
* but it'll at least handle the return. Maybe it should be
* a BUG() instead?
*/
if (wbc->nonblocking && bdi_write_congested(bdi)) {
wbc->encountered_congestion = 1;
open_file = find_writable_file(CIFS_I(mapping->host));
if (!open_file) {
kfree(iov);
return 0;
return generic_writepages(mapping, wbc);
}

tcon = open_file->tcon;
if (!experimEnabled && tcon->ses->server->secMode &
(SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED)) {
cifsFileInfo_put(open_file);
return generic_writepages(mapping, wbc);
}
cifsFileInfo_put(open_file);

xid = GetXid();

Expand Down Expand Up @@ -1486,38 +1497,33 @@ static int cifs_writepages(struct address_space *mapping,
break;
}
if (n_iov) {
/* Search for a writable handle every time we call
* CIFSSMBWrite2. We can't rely on the last handle
* we used to still be valid
*/
open_file = find_writable_file(CIFS_I(mapping->host));
if (!open_file) {
cERROR(1, "No writable handles for inode");
rc = -EBADF;
} else {
tcon = open_file->tcon;
long_op = cifs_write_timeout(cifsi, offset);
rc = CIFSSMBWrite2(xid, tcon,
open_file->netfid,
rc = CIFSSMBWrite2(xid, tcon, open_file->netfid,
bytes_to_write, offset,
&bytes_written, iov, n_iov,
long_op);
cifsFileInfo_put(open_file);
cifs_update_eof(cifsi, offset, bytes_written);
}

if (rc || bytes_written < bytes_to_write) {
cERROR(1, "Write2 ret %d, wrote %d",
rc, bytes_written);
/* BB what if continued retry is
requested via mount flags? */
if (rc == -ENOSPC)
set_bit(AS_ENOSPC, &mapping->flags);
else
set_bit(AS_EIO, &mapping->flags);
} else {
cifs_stats_bytes_written(tcon, bytes_written);
}
if (rc || bytes_written < bytes_to_write) {
cERROR(1, "Write2 ret %d, wrote %d",
rc, bytes_written);
/* BB what if continued retry is
requested via mount flags? */
if (rc == -ENOSPC)
set_bit(AS_ENOSPC, &mapping->flags);
else
set_bit(AS_EIO, &mapping->flags);
} else {
cifs_stats_bytes_written(tcon, bytes_written);
}

for (i = 0; i < n_iov; i++) {
page = pvec.pages[first + i];
/* Should we also set page error on
Expand Down

0 comments on commit c91a8b5

Please sign in to comment.