Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 297978
b: refs/heads/master
c: 597b027
h: refs/heads/master
v: v3
  • Loading branch information
Jeff Layton committed Mar 23, 2012
1 parent f885d95 commit 223b713
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 3 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: e9492871fb0546f1b73f309d9e8c0f030bfdfdca
refs/heads/master: 597b027f694481ffeebcffe634c24b807198d46c
2 changes: 1 addition & 1 deletion trunk/fs/cifs/cifsglob.h
Original file line number Diff line number Diff line change
Expand Up @@ -626,7 +626,7 @@ struct cifsInodeInfo {
bool delete_pending; /* DELETE_ON_CLOSE is set */
bool invalid_mapping; /* pagecache is invalid */
unsigned long time; /* jiffies of last update of inode */
u64 server_eof; /* current file size on server */
u64 server_eof; /* current file size on server -- protected by i_lock */
u64 uniqueid; /* server inode number */
u64 createtime; /* creation time on server */
#ifdef CONFIG_CIFS_FSCACHE
Expand Down
2 changes: 2 additions & 0 deletions trunk/fs/cifs/cifssmb.c
Original file line number Diff line number Diff line change
Expand Up @@ -2044,7 +2044,9 @@ cifs_writev_complete(struct work_struct *work)
int i = 0;

if (wdata->result == 0) {
spin_lock(&inode->i_lock);
cifs_update_eof(CIFS_I(inode), wdata->offset, wdata->bytes);
spin_unlock(&inode->i_lock);
cifs_stats_bytes_written(tlink_tcon(wdata->cfile->tlink),
wdata->bytes);
} else if (wdata->sync_mode == WB_SYNC_ALL && wdata->result == -EAGAIN)
Expand Down
9 changes: 8 additions & 1 deletion trunk/fs/cifs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -1399,7 +1399,10 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *flock)
return rc;
}

/* update the file size (if needed) after a write */
/*
* update the file size (if needed) after a write. Should be called with
* the inode->i_lock held
*/
void
cifs_update_eof(struct cifsInodeInfo *cifsi, loff_t offset,
unsigned int bytes_written)
Expand Down Expand Up @@ -1471,7 +1474,9 @@ static ssize_t cifs_write(struct cifsFileInfo *open_file, __u32 pid,
return rc;
}
} else {
spin_lock(&dentry->d_inode->i_lock);
cifs_update_eof(cifsi, *poffset, bytes_written);
spin_unlock(&dentry->d_inode->i_lock);
*poffset += bytes_written;
}
}
Expand Down Expand Up @@ -2197,7 +2202,9 @@ cifs_iovec_write(struct file *file, const struct iovec *iov,
if (written) {
len -= written;
total_written += written;
spin_lock(&inode->i_lock);
cifs_update_eof(CIFS_I(inode), *poffset, written);
spin_unlock(&inode->i_lock);
*poffset += written;
} else if (rc < 0) {
if (!total_written)
Expand Down

0 comments on commit 223b713

Please sign in to comment.