mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
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 = {
|
const struct file_operations afs_file_operations = {
|
||||||
.open = afs_open,
|
.open = afs_open,
|
||||||
|
.flush = afs_flush,
|
||||||
.release = afs_release,
|
.release = afs_release,
|
||||||
.llseek = generic_file_llseek,
|
.llseek = generic_file_llseek,
|
||||||
.read_iter = generic_file_read_iter,
|
.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 void afs_pages_written_back(struct afs_vnode *, struct afs_call *);
|
||||||
extern ssize_t afs_file_write(struct kiocb *, struct iov_iter *);
|
extern ssize_t afs_file_write(struct kiocb *, struct iov_iter *);
|
||||||
extern int afs_writeback_all(struct afs_vnode *);
|
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);
|
extern int afs_fsync(struct file *, loff_t, loff_t, int);
|
||||||
|
|
||||||
|
|
||||||
|
@ -757,6 +757,20 @@ out:
|
|||||||
return ret;
|
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
|
* 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
|
* - if it returns an error, the caller will deliver a bus error signal
|
||||||
|
Loading…
Reference in New Issue
Block a user