mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
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>
This commit is contained in:
parent
d0874a580a
commit
caaa184b42
|
|
@ -23,7 +23,7 @@ const struct file_operations minix_dir_operations = {
|
|||
.llseek = generic_file_llseek,
|
||||
.read = generic_read_dir,
|
||||
.iterate_shared = minix_readdir,
|
||||
.fsync = generic_buffers_fsync,
|
||||
.fsync = minix_fsync,
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -7,8 +7,16 @@
|
|||
* minix regular file handling primitives
|
||||
*/
|
||||
|
||||
#include <linux/buffer_head.h>
|
||||
#include "minix.h"
|
||||
|
||||
int minix_fsync(struct file *file, loff_t start, loff_t end, int datasync)
|
||||
{
|
||||
return mmb_fsync(file,
|
||||
&minix_i(file->f_mapping->host)->i_metadata_bhs,
|
||||
start, end, datasync);
|
||||
}
|
||||
|
||||
/*
|
||||
* We have mostly NULLs here: the current defaults are OK for
|
||||
* the minix filesystem.
|
||||
|
|
@ -18,7 +26,7 @@ const struct file_operations minix_file_operations = {
|
|||
.read_iter = generic_file_read_iter,
|
||||
.write_iter = generic_file_write_iter,
|
||||
.mmap_prepare = generic_file_mmap_prepare,
|
||||
.fsync = generic_buffers_fsync,
|
||||
.fsync = minix_fsync,
|
||||
.splice_read = filemap_splice_read,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -49,9 +49,9 @@ static void minix_evict_inode(struct inode *inode)
|
|||
inode->i_size = 0;
|
||||
minix_truncate(inode);
|
||||
} else {
|
||||
sync_mapping_buffers(&inode->i_data);
|
||||
mmb_sync(&minix_i(inode)->i_metadata_bhs);
|
||||
}
|
||||
invalidate_inode_buffers(inode);
|
||||
mmb_invalidate(&minix_i(inode)->i_metadata_bhs);
|
||||
clear_inode(inode);
|
||||
if (!inode->i_nlink)
|
||||
minix_free_inode(inode);
|
||||
|
|
@ -85,6 +85,8 @@ static struct inode *minix_alloc_inode(struct super_block *sb)
|
|||
ei = alloc_inode_sb(sb, minix_inode_cachep, GFP_KERNEL);
|
||||
if (!ei)
|
||||
return NULL;
|
||||
mmb_init(&ei->i_metadata_bhs, &ei->vfs_inode.i_data);
|
||||
|
||||
return &ei->vfs_inode;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ static int alloc_branch(struct inode *inode,
|
|||
*branch[n].p = branch[n].key;
|
||||
set_buffer_uptodate(bh);
|
||||
unlock_buffer(bh);
|
||||
mark_buffer_dirty_inode(bh, inode);
|
||||
mmb_mark_buffer_dirty(bh, &minix_i(inode)->i_metadata_bhs);
|
||||
parent = nr;
|
||||
}
|
||||
if (n == num)
|
||||
|
|
@ -135,7 +135,8 @@ static inline int splice_branch(struct inode *inode,
|
|||
|
||||
/* had we spliced it onto indirect block? */
|
||||
if (where->bh)
|
||||
mark_buffer_dirty_inode(where->bh, inode);
|
||||
mmb_mark_buffer_dirty(where->bh,
|
||||
&minix_i(inode)->i_metadata_bhs);
|
||||
|
||||
mark_inode_dirty(inode);
|
||||
return 0;
|
||||
|
|
@ -328,14 +329,16 @@ static inline void truncate (struct inode * inode)
|
|||
if (partial == chain)
|
||||
mark_inode_dirty(inode);
|
||||
else
|
||||
mark_buffer_dirty_inode(partial->bh, inode);
|
||||
mmb_mark_buffer_dirty(partial->bh,
|
||||
&minix_i(inode)->i_metadata_bhs);
|
||||
free_branches(inode, &nr, &nr+1, (chain+n-1) - partial);
|
||||
}
|
||||
/* Clear the ends of indirect blocks on the shared branch */
|
||||
while (partial > chain) {
|
||||
free_branches(inode, partial->p + 1, block_end(partial->bh),
|
||||
(chain+n-1) - partial);
|
||||
mark_buffer_dirty_inode(partial->bh, inode);
|
||||
mmb_mark_buffer_dirty(partial->bh,
|
||||
&minix_i(inode)->i_metadata_bhs);
|
||||
brelse (partial->bh);
|
||||
partial--;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ struct minix_inode_info {
|
|||
__u16 i1_data[16];
|
||||
__u32 i2_data[16];
|
||||
} u;
|
||||
struct mapping_metadata_bhs i_metadata_bhs;
|
||||
struct inode vfs_inode;
|
||||
};
|
||||
|
||||
|
|
@ -57,6 +58,8 @@ unsigned long minix_count_free_blocks(struct super_block *sb);
|
|||
int minix_getattr(struct mnt_idmap *, const struct path *,
|
||||
struct kstat *, u32, unsigned int);
|
||||
int minix_prepare_chunk(struct folio *folio, loff_t pos, unsigned len);
|
||||
struct mapping_metadata_bhs *minix_get_metadata_bhs(struct inode *inode);
|
||||
int minix_fsync(struct file *file, loff_t start, loff_t end, int datasync);
|
||||
|
||||
extern void V1_minix_truncate(struct inode *);
|
||||
extern void V2_minix_truncate(struct inode *);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user