afs: Flush outstanding writes when an fd is closed
Flush outstanding writes in afs when an fd is closed. This is what NFS and CIFS do. Reported-by: Marc Dionne <marc.c.dionne@gmail.com> Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
parent
e8e581a88c
commit
58fed94dfb
|
@ -30,6 +30,7 @@ static int afs_readpages(struct file *filp, struct address_space *mapping,
|
|||
|
||||
const struct file_operations afs_file_operations = {
|
||||
.open = afs_open,
|
||||
.flush = afs_flush,
|
||||
.release = afs_release,
|
||||
.llseek = generic_file_llseek,
|
||||
.read_iter = generic_file_read_iter,
|
||||
|
|
|
@ -720,6 +720,7 @@ extern int afs_writepages(struct address_space *, struct writeback_control *);
|
|||
extern void afs_pages_written_back(struct afs_vnode *, struct afs_call *);
|
||||
extern ssize_t afs_file_write(struct kiocb *, struct iov_iter *);
|
||||
extern int afs_writeback_all(struct afs_vnode *);
|
||||
extern int afs_flush(struct file *, fl_owner_t);
|
||||
extern int afs_fsync(struct file *, loff_t, loff_t, int);
|
||||
|
||||
|
||||
|
|
|
@ -757,6 +757,20 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Flush out all outstanding writes on a file opened for writing when it is
|
||||
* closed.
|
||||
*/
|
||||
int afs_flush(struct file *file, fl_owner_t id)
|
||||
{
|
||||
_enter("");
|
||||
|
||||
if ((file->f_mode & FMODE_WRITE) == 0)
|
||||
return 0;
|
||||
|
||||
return vfs_fsync(file, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* notification that a previously read-only page is about to become writable
|
||||
* - if it returns an error, the caller will deliver a bus error signal
|
||||
|
|
Loading…
Reference in New Issue