4c728ef583
Fsync currently has a fdatawrite/fdatawait pair around the method call, and a mutex_lock/unlock of the inode mutex. All callers of fsync have to duplicate this, but we have a few and most of them don't quite get it right. This patch adds a new vfs_fsync that takes care of this. It's a little more complicated as usual as ->fsync might get a NULL file pointer and just a dentry from nfsd, but otherwise gets afile and we want to take the mapping and file operations from it when it is there. Notes on the fsync callers: - ecryptfs wasn't calling filemap_fdatawrite / filemap_fdatawait on the lower file - coda wasn't calling filemap_fdatawrite / filemap_fdatawait on the host file, and returning 0 when ->fsync was missing - shm wasn't calling either filemap_fdatawrite / filemap_fdatawait nor taking i_mutex. Now given that shared memory doesn't have disk backing not doing anything in fsync seems fine and I left it out of the vfs_fsync conversion for now, but in that case we might just not pass it through to the lower file at all but just call the no-op simple_sync_file directly. [and now actually export vfs_fsync] Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> |
||
---|---|---|
.. | ||
Kconfig | ||
Makefile | ||
amd5536udc.c | ||
amd5536udc.h | ||
at91_udc.c | ||
at91_udc.h | ||
atmel_usba_udc.c | ||
atmel_usba_udc.h | ||
cdc2.c | ||
composite.c | ||
config.c | ||
dummy_hcd.c | ||
epautoconf.c | ||
ether.c | ||
f_acm.c | ||
f_ecm.c | ||
f_loopback.c | ||
f_obex.c | ||
f_phonet.c | ||
f_rndis.c | ||
f_serial.c | ||
f_sourcesink.c | ||
f_subset.c | ||
file_storage.c | ||
fsl_qe_udc.c | ||
fsl_qe_udc.h | ||
fsl_usb2_udc.c | ||
fsl_usb2_udc.h | ||
g_zero.h | ||
gadget_chips.h | ||
gmidi.c | ||
goku_udc.c | ||
goku_udc.h | ||
inode.c | ||
lh7a40x_udc.c | ||
lh7a40x_udc.h | ||
m66592-udc.c | ||
m66592-udc.h | ||
ndis.h | ||
net2280.c | ||
net2280.h | ||
omap_udc.c | ||
omap_udc.h | ||
printer.c | ||
pxa25x_udc.c | ||
pxa25x_udc.h | ||
pxa27x_udc.c | ||
pxa27x_udc.h | ||
rndis.c | ||
rndis.h | ||
s3c2410_udc.c | ||
s3c2410_udc.h | ||
serial.c | ||
u_ether.c | ||
u_ether.h | ||
u_phonet.h | ||
u_serial.c | ||
u_serial.h | ||
usbstring.c | ||
zero.c |