Skip to content

Commit caaa184

Browse files
jankarabrauner
authored andcommitted
minix: Track metadata bhs in fs-private inode part
Track metadata bhs for an inode in fs-private part of the inode. Signed-off-by: Jan Kara <jack@suse.cz> Link: https://patch.msgid.link/20260326095354.16340-81-jack@suse.cz Signed-off-by: Christian Brauner <brauner@kernel.org>
1 parent d0874a5 commit caaa184

5 files changed

Lines changed: 24 additions & 8 deletions

File tree

fs/minix/dir.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const struct file_operations minix_dir_operations = {
2323
.llseek = generic_file_llseek,
2424
.read = generic_read_dir,
2525
.iterate_shared = minix_readdir,
26-
.fsync = generic_buffers_fsync,
26+
.fsync = minix_fsync,
2727
};
2828

2929
/*

fs/minix/file.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,16 @@
77
* minix regular file handling primitives
88
*/
99

10+
#include <linux/buffer_head.h>
1011
#include "minix.h"
1112

13+
int minix_fsync(struct file *file, loff_t start, loff_t end, int datasync)
14+
{
15+
return mmb_fsync(file,
16+
&minix_i(file->f_mapping->host)->i_metadata_bhs,
17+
start, end, datasync);
18+
}
19+
1220
/*
1321
* We have mostly NULLs here: the current defaults are OK for
1422
* the minix filesystem.
@@ -18,7 +26,7 @@ const struct file_operations minix_file_operations = {
1826
.read_iter = generic_file_read_iter,
1927
.write_iter = generic_file_write_iter,
2028
.mmap_prepare = generic_file_mmap_prepare,
21-
.fsync = generic_buffers_fsync,
29+
.fsync = minix_fsync,
2230
.splice_read = filemap_splice_read,
2331
};
2432

fs/minix/inode.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ static void minix_evict_inode(struct inode *inode)
4949
inode->i_size = 0;
5050
minix_truncate(inode);
5151
} else {
52-
sync_mapping_buffers(&inode->i_data);
52+
mmb_sync(&minix_i(inode)->i_metadata_bhs);
5353
}
54-
invalidate_inode_buffers(inode);
54+
mmb_invalidate(&minix_i(inode)->i_metadata_bhs);
5555
clear_inode(inode);
5656
if (!inode->i_nlink)
5757
minix_free_inode(inode);
@@ -85,6 +85,8 @@ static struct inode *minix_alloc_inode(struct super_block *sb)
8585
ei = alloc_inode_sb(sb, minix_inode_cachep, GFP_KERNEL);
8686
if (!ei)
8787
return NULL;
88+
mmb_init(&ei->i_metadata_bhs, &ei->vfs_inode.i_data);
89+
8890
return &ei->vfs_inode;
8991
}
9092

fs/minix/itree_common.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ static int alloc_branch(struct inode *inode,
9898
*branch[n].p = branch[n].key;
9999
set_buffer_uptodate(bh);
100100
unlock_buffer(bh);
101-
mark_buffer_dirty_inode(bh, inode);
101+
mmb_mark_buffer_dirty(bh, &minix_i(inode)->i_metadata_bhs);
102102
parent = nr;
103103
}
104104
if (n == num)
@@ -135,7 +135,8 @@ static inline int splice_branch(struct inode *inode,
135135

136136
/* had we spliced it onto indirect block? */
137137
if (where->bh)
138-
mark_buffer_dirty_inode(where->bh, inode);
138+
mmb_mark_buffer_dirty(where->bh,
139+
&minix_i(inode)->i_metadata_bhs);
139140

140141
mark_inode_dirty(inode);
141142
return 0;
@@ -328,14 +329,16 @@ static inline void truncate (struct inode * inode)
328329
if (partial == chain)
329330
mark_inode_dirty(inode);
330331
else
331-
mark_buffer_dirty_inode(partial->bh, inode);
332+
mmb_mark_buffer_dirty(partial->bh,
333+
&minix_i(inode)->i_metadata_bhs);
332334
free_branches(inode, &nr, &nr+1, (chain+n-1) - partial);
333335
}
334336
/* Clear the ends of indirect blocks on the shared branch */
335337
while (partial > chain) {
336338
free_branches(inode, partial->p + 1, block_end(partial->bh),
337339
(chain+n-1) - partial);
338-
mark_buffer_dirty_inode(partial->bh, inode);
340+
mmb_mark_buffer_dirty(partial->bh,
341+
&minix_i(inode)->i_metadata_bhs);
339342
brelse (partial->bh);
340343
partial--;
341344
}

fs/minix/minix.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ struct minix_inode_info {
1919
__u16 i1_data[16];
2020
__u32 i2_data[16];
2121
} u;
22+
struct mapping_metadata_bhs i_metadata_bhs;
2223
struct inode vfs_inode;
2324
};
2425

@@ -57,6 +58,8 @@ unsigned long minix_count_free_blocks(struct super_block *sb);
5758
int minix_getattr(struct mnt_idmap *, const struct path *,
5859
struct kstat *, u32, unsigned int);
5960
int minix_prepare_chunk(struct folio *folio, loff_t pos, unsigned len);
61+
struct mapping_metadata_bhs *minix_get_metadata_bhs(struct inode *inode);
62+
int minix_fsync(struct file *file, loff_t start, loff_t end, int datasync);
6063

6164
extern void V1_minix_truncate(struct inode *);
6265
extern void V2_minix_truncate(struct inode *);

0 commit comments

Comments
 (0)