mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-15 21:23:23 +00:00
ufs: get rid of ubh_{ubhcpymem,memcpyubh}()
used only in ufs_read_cylinder_structures()/ufs_put_super_internal() and there we can just as well avoid bothering with ufs_buffer_head and just deal with it fragment-by-fragment. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
ae79ce9d06
commit
db57044217
@ -505,7 +505,6 @@ static int ufs_read_cylinder_structures(struct super_block *sb)
|
||||
{
|
||||
struct ufs_sb_info *sbi = UFS_SB(sb);
|
||||
struct ufs_sb_private_info *uspi = sbi->s_uspi;
|
||||
struct ufs_buffer_head * ubh;
|
||||
unsigned char * base, * space;
|
||||
unsigned size, blks, i;
|
||||
|
||||
@ -521,21 +520,13 @@ static int ufs_read_cylinder_structures(struct super_block *sb)
|
||||
if (!base)
|
||||
goto failed;
|
||||
sbi->s_csp = (struct ufs_csum *)space;
|
||||
for (i = 0; i < blks; i += uspi->s_fpb) {
|
||||
size = uspi->s_bsize;
|
||||
if (i + uspi->s_fpb > blks)
|
||||
size = (blks - i) * uspi->s_fsize;
|
||||
|
||||
ubh = ubh_bread(sb, uspi->s_csaddr + i, size);
|
||||
|
||||
if (!ubh)
|
||||
for (i = 0; i < blks; i++) {
|
||||
struct buffer_head *bh = sb_bread(sb, uspi->s_csaddr + i);
|
||||
if (!bh)
|
||||
goto failed;
|
||||
|
||||
ubh_ubhcpymem (space, ubh, size);
|
||||
|
||||
space += size;
|
||||
ubh_brelse (ubh);
|
||||
ubh = NULL;
|
||||
memcpy(space, bh->b_data, uspi->s_fsize);
|
||||
space += uspi->s_fsize;
|
||||
brelse (bh);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -645,7 +636,6 @@ static void ufs_put_super_internal(struct super_block *sb)
|
||||
{
|
||||
struct ufs_sb_info *sbi = UFS_SB(sb);
|
||||
struct ufs_sb_private_info *uspi = sbi->s_uspi;
|
||||
struct ufs_buffer_head * ubh;
|
||||
unsigned char * base, * space;
|
||||
unsigned blks, size, i;
|
||||
|
||||
@ -656,18 +646,17 @@ static void ufs_put_super_internal(struct super_block *sb)
|
||||
size = uspi->s_cssize;
|
||||
blks = (size + uspi->s_fsize - 1) >> uspi->s_fshift;
|
||||
base = space = (char*) sbi->s_csp;
|
||||
for (i = 0; i < blks; i += uspi->s_fpb) {
|
||||
size = uspi->s_bsize;
|
||||
if (i + uspi->s_fpb > blks)
|
||||
size = (blks - i) * uspi->s_fsize;
|
||||
for (i = 0; i < blks; i++, space += uspi->s_fsize) {
|
||||
struct buffer_head *bh = sb_bread(sb, uspi->s_csaddr + i);
|
||||
|
||||
ubh = ubh_bread(sb, uspi->s_csaddr + i, size);
|
||||
|
||||
ubh_memcpyubh (ubh, space, size);
|
||||
space += size;
|
||||
ubh_mark_buffer_uptodate (ubh, 1);
|
||||
ubh_mark_buffer_dirty (ubh);
|
||||
ubh_brelse (ubh);
|
||||
if (unlikely(!bh)) { // better than an oops...
|
||||
ufs_panic(sb, __func__,
|
||||
"can't write part of cylinder group summary");
|
||||
continue;
|
||||
}
|
||||
memcpy(bh->b_data, space, uspi->s_fsize);
|
||||
mark_buffer_dirty(bh);
|
||||
brelse(bh);
|
||||
}
|
||||
for (i = 0; i < sbi->s_cg_loaded; i++) {
|
||||
ufs_put_cylinder (sb, i);
|
||||
|
@ -99,20 +99,6 @@ void ubh_mark_buffer_dirty (struct ufs_buffer_head * ubh)
|
||||
mark_buffer_dirty (ubh->bh[i]);
|
||||
}
|
||||
|
||||
void ubh_mark_buffer_uptodate (struct ufs_buffer_head * ubh, int flag)
|
||||
{
|
||||
unsigned i;
|
||||
if (!ubh)
|
||||
return;
|
||||
if (flag) {
|
||||
for ( i = 0; i < ubh->count; i++ )
|
||||
set_buffer_uptodate (ubh->bh[i]);
|
||||
} else {
|
||||
for ( i = 0; i < ubh->count; i++ )
|
||||
clear_buffer_uptodate (ubh->bh[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void ubh_sync_block(struct ufs_buffer_head *ubh)
|
||||
{
|
||||
if (ubh) {
|
||||
@ -146,38 +132,6 @@ int ubh_buffer_dirty (struct ufs_buffer_head * ubh)
|
||||
return result;
|
||||
}
|
||||
|
||||
void _ubh_ubhcpymem_(struct ufs_sb_private_info * uspi,
|
||||
unsigned char * mem, struct ufs_buffer_head * ubh, unsigned size)
|
||||
{
|
||||
unsigned len, bhno;
|
||||
if (size > (ubh->count << uspi->s_fshift))
|
||||
size = ubh->count << uspi->s_fshift;
|
||||
bhno = 0;
|
||||
while (size) {
|
||||
len = min_t(unsigned int, size, uspi->s_fsize);
|
||||
memcpy (mem, ubh->bh[bhno]->b_data, len);
|
||||
mem += uspi->s_fsize;
|
||||
size -= len;
|
||||
bhno++;
|
||||
}
|
||||
}
|
||||
|
||||
void _ubh_memcpyubh_(struct ufs_sb_private_info * uspi,
|
||||
struct ufs_buffer_head * ubh, unsigned char * mem, unsigned size)
|
||||
{
|
||||
unsigned len, bhno;
|
||||
if (size > (ubh->count << uspi->s_fshift))
|
||||
size = ubh->count << uspi->s_fshift;
|
||||
bhno = 0;
|
||||
while (size) {
|
||||
len = min_t(unsigned int, size, uspi->s_fsize);
|
||||
memcpy (ubh->bh[bhno]->b_data, mem, len);
|
||||
mem += uspi->s_fsize;
|
||||
size -= len;
|
||||
bhno++;
|
||||
}
|
||||
}
|
||||
|
||||
dev_t
|
||||
ufs_get_inode_dev(struct super_block *sb, struct ufs_inode_info *ufsi)
|
||||
{
|
||||
|
@ -263,14 +263,9 @@ extern struct ufs_buffer_head * ubh_bread_uspi(struct ufs_sb_private_info *, str
|
||||
extern void ubh_brelse (struct ufs_buffer_head *);
|
||||
extern void ubh_brelse_uspi (struct ufs_sb_private_info *);
|
||||
extern void ubh_mark_buffer_dirty (struct ufs_buffer_head *);
|
||||
extern void ubh_mark_buffer_uptodate (struct ufs_buffer_head *, int);
|
||||
extern void ubh_sync_block(struct ufs_buffer_head *);
|
||||
extern void ubh_bforget (struct ufs_buffer_head *);
|
||||
extern int ubh_buffer_dirty (struct ufs_buffer_head *);
|
||||
#define ubh_ubhcpymem(mem,ubh,size) _ubh_ubhcpymem_(uspi,mem,ubh,size)
|
||||
extern void _ubh_ubhcpymem_(struct ufs_sb_private_info *, unsigned char *, struct ufs_buffer_head *, unsigned);
|
||||
#define ubh_memcpyubh(ubh,mem,size) _ubh_memcpyubh_(uspi,ubh,mem,size)
|
||||
extern void _ubh_memcpyubh_(struct ufs_sb_private_info *, struct ufs_buffer_head *, unsigned char *, unsigned);
|
||||
|
||||
/* This functions works with cache pages*/
|
||||
struct folio *ufs_get_locked_folio(struct address_space *mapping, pgoff_t index);
|
||||
|
Loading…
x
Reference in New Issue
Block a user