linux/fs/gfs2
Andreas Gruenbacher 80baab88bb iomap/gfs2: Unlock and put folio in page_done handler
When an iomap defines a ->page_done() handler in its page_ops, delegate
unlocking the folio and putting the folio reference to that handler.

This allows to fix a race between journaled data writes and folio
writeback in gfs2: before this change, gfs2_iomap_page_done() was called
after unlocking the folio, so writeback could start writing back the
folio's buffers before they could be marked for writing to the journal.
Also, try_to_free_buffers() could free the buffers before
gfs2_iomap_page_done() was done adding the buffers to the current
current transaction.  With this change, gfs2_iomap_page_done() adds the
buffers to the current transaction while the folio is still locked, so
the problems described above can no longer occur.

The only current user of ->page_done() is gfs2, so other filesystems are
not affected.  To catch out any out-of-tree users, switch from a page to
a folio in ->page_done().

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
2023-01-18 10:44:04 -08:00
..
acl.c fs: pass dentry to set acl method 2022-10-19 12:55:42 +02:00
acl.h fs: pass dentry to set acl method 2022-10-19 12:55:42 +02:00
aops.c gfs2: Always check inode size of inline inodes 2022-12-06 16:06:31 +01:00
aops.h
bmap.c iomap/gfs2: Unlock and put folio in page_done handler 2023-01-18 10:44:04 -08:00
bmap.h
dentry.c
dir.c gfs2 fixes 2022-08-06 14:44:49 -07:00
dir.h
export.c Change calling conventions for filldir_t 2022-08-17 17:25:04 -04:00
file.c gfs2: Make gfs2_glock_hold return its glock argument 2022-12-06 16:06:31 +01:00
gfs2.h
glock.c gfs2: Remove support for glock holder auto-demotion (2) 2022-12-15 12:41:22 +01:00
glock.h gfs2: Remove support for glock holder auto-demotion 2022-12-15 12:41:22 +01:00
glops.c gfs2: Always check inode size of inline inodes 2022-12-06 16:06:31 +01:00
glops.h
incore.h gfs2: Remove support for glock holder auto-demotion 2022-12-15 12:41:22 +01:00
inode.c gfs2 fixes 2022-12-17 08:18:04 -06:00
inode.h gfs2: Convert to release_folio 2022-05-09 23:12:33 -04:00
Kconfig
lock_dlm.c fs: dlm: remove DLM_LSFL_FS from uapi 2022-08-23 14:54:54 -05:00
log.c New code for 6.0: 2022-08-11 13:11:49 -07:00
log.h fs/gfs2: Use the enum req_op and blk_opf_t types 2022-07-14 12:14:32 -06:00
lops.c Folio changes for 6.0 2022-08-03 10:35:43 -07:00
lops.h fs/gfs2: Use the enum req_op and blk_opf_t types 2022-07-14 12:14:32 -06:00
main.c gfs2: Register fs after creating workqueues 2022-09-20 17:53:54 +02:00
Makefile
meta_io.c gfs2: Fix and clean up create / evict interaction 2022-12-02 15:58:00 +01:00
meta_io.h gfs2: Use container_of() for gfs2_glock(aspace) 2022-05-24 21:29:14 +02:00
ops_fstype.c gfs2: Merge branch 'for-next.nopid' into for-next 2022-10-09 22:56:28 +02:00
quota.c gfs2: replace ll_rw_block() 2022-09-11 20:26:06 -07:00
quota.h
recovery.c gfs2: replace 'found' with dedicated list iterator variable 2022-05-14 03:05:55 +02:00
recovery.h
rgrp.c Merge part of branch 'for-next.instantiate' into for-next 2022-08-05 18:37:03 +02:00
rgrp.h Merge part of branch 'for-next.instantiate' into for-next 2022-08-05 18:37:03 +02:00
super.c gfs2: Simply dequeue iopen glock in gfs2_evict_inode 2022-12-06 16:06:32 +01:00
super.h
sys.c block: remove genhd.h 2022-02-02 07:49:59 -07:00
sys.h
trace_gfs2.h
trans.c
trans.h
util.c gfs2: Merge branch 'for-next.nopid' into for-next 2022-10-09 22:56:28 +02:00
util.h
xattr.c gfs2: Fix and clean up create / evict interaction 2022-12-02 15:58:00 +01:00
xattr.h