new vfs freeze hooks and gfs2 freeze rewrite
Get series with b4
b4 am [email protected]Versions newest first
- v2 Latest0 of 2 patches 0 repliesNew
Patches in v2 No applies recorded yet
None of the 2 patches the cover letter announces are in this archive.
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v2 yet.
Cover letter [Cluster-devel] [PATCH 0/2 v2] new vfs freeze hooks and gfs2 freeze rewrite
Hi,
Both patches are now in the -nmw tree. Thanks,
Steve.
Quoted 48 lines · Benjamin Marzinski
The existing gfs2 freeze code can't properly make use the kernel vfs freezing code on all the nodes of a cluster. This is because the only hook into the gfs2 freeze code comes inside of
freeze_super, which holds thesb->s_umountlock. In order to notify the other nodes in the cluster to freeze the filesystem, gfs2 must grab a glock. Thus, if two nodes tried to freeze the filesystem at the same time and all cluster nodes usedfreeze_superto enforce the freeze, both nodes would first grab thesb->s_umountlock infreeze_super, and then they would race to grab the gfs2 freeze glock. The loser would be stuck infreeze_super, waiting on the freeze glock. This means that gfs2 can't rely on freezing all the nodes in the cluster by callingfreeze_super, because one node would already be stuck in that function withsb->s_umountheld. So, currently gfs2 only callsfreeze_superon the node that initiates the freeze and deals with blocking the writes entirely within the gfs2 code. This involves some pretty hacky code.To fix this, the first patch of this patchset adds two new vfs hooks,
freeze_superandthaw_super. If a filesystem implements these hooks, they will be called instead of the vfsfreeze_superandthaw_superfunctions. The second patch of this set makes use of these hooks to simplify the gfs2 freezing code. This allows gfs2 to grab the freeze glock first and call the actual vfs freeze functions in response to node grabbing the freeze glock. Thus, all nodes can use the vfsfreeze_superandthaw_supercode to freeze the filesystem. This vesion also fixes some issues with a race between reserving log space and making the filesystem read-only.The current hook names were suggested by Jan Kara, over my original
prepare_freeezeandprepare_thawnames, which were more confusing.Benjamin Marzinski (2):
fs: add freeze_super/thaw_super fs hooks
gfs2: update freeze code to use freeze/thaw_super on all nodesfs/block_dev.c | 10 ++++- fs/gfs2/glops.c | 26 ++++++------ fs/gfs2/glops.h | 2 + fs/gfs2/incore.h | 18 ++++++--- fs/gfs2/inode.c | 40 +++++------------- fs/gfs2/log.c | 42 +++++++++---------- fs/gfs2/main.c | 11 ++++- fs/gfs2/ops_fstype.c | 18 +++------ fs/gfs2/super.c | 112 ++++++++++++++++++++++++++++++++++----------------- fs/gfs2/super.h | 1 + fs/gfs2/trans.c | 17 ++++++-- fs/ioctl.c | 6 ++- include/linux/fs.h | 2 + 13 files changed, 176 insertions(+), 129 deletions(-)