mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
remove SWRITE* I/O types
These flags aren't real I/O types, but tell ll_rw_block to always lock the buffer instead of giving up on a failed trylock. Instead add a new write_dirty_buffer helper that implements this semantic and use it from the existing SWRITE* callers. Note that the ll_rw_block code had a bug where it didn't promote WRITE_SYNC_PLUG properly, which this patch fixes. In the ufs code clean up the helper that used to call ll_rw_block to mirror sync_dirty_buffer, which is the function it implements for compound buffers. Signed-off-by: Christoph Hellwig <[email protected]> Signed-off-by: Al Viro <[email protected]>
This commit is contained in:
parent
87e99511ea
commit
9cb569d601
16 changed files with 73 additions and 94 deletions
|
|
@ -114,10 +114,8 @@ void ufs_free_fragments(struct inode *inode, u64 fragment, unsigned count)
|
|||
|
||||
ubh_mark_buffer_dirty (USPI_UBH(uspi));
|
||||
ubh_mark_buffer_dirty (UCPI_UBH(ucpi));
|
||||
if (sb->s_flags & MS_SYNCHRONOUS) {
|
||||
ubh_ll_rw_block(SWRITE, UCPI_UBH(ucpi));
|
||||
ubh_wait_on_buffer (UCPI_UBH(ucpi));
|
||||
}
|
||||
if (sb->s_flags & MS_SYNCHRONOUS)
|
||||
ubh_sync_block(UCPI_UBH(ucpi));
|
||||
sb->s_dirt = 1;
|
||||
|
||||
unlock_super (sb);
|
||||
|
|
@ -207,10 +205,8 @@ do_more:
|
|||
|
||||
ubh_mark_buffer_dirty (USPI_UBH(uspi));
|
||||
ubh_mark_buffer_dirty (UCPI_UBH(ucpi));
|
||||
if (sb->s_flags & MS_SYNCHRONOUS) {
|
||||
ubh_ll_rw_block(SWRITE, UCPI_UBH(ucpi));
|
||||
ubh_wait_on_buffer (UCPI_UBH(ucpi));
|
||||
}
|
||||
if (sb->s_flags & MS_SYNCHRONOUS)
|
||||
ubh_sync_block(UCPI_UBH(ucpi));
|
||||
|
||||
if (overflow) {
|
||||
fragment += count;
|
||||
|
|
@ -558,10 +554,8 @@ static u64 ufs_add_fragments(struct inode *inode, u64 fragment,
|
|||
|
||||
ubh_mark_buffer_dirty (USPI_UBH(uspi));
|
||||
ubh_mark_buffer_dirty (UCPI_UBH(ucpi));
|
||||
if (sb->s_flags & MS_SYNCHRONOUS) {
|
||||
ubh_ll_rw_block(SWRITE, UCPI_UBH(ucpi));
|
||||
ubh_wait_on_buffer (UCPI_UBH(ucpi));
|
||||
}
|
||||
if (sb->s_flags & MS_SYNCHRONOUS)
|
||||
ubh_sync_block(UCPI_UBH(ucpi));
|
||||
sb->s_dirt = 1;
|
||||
|
||||
UFSD("EXIT, fragment %llu\n", (unsigned long long)fragment);
|
||||
|
|
@ -680,10 +674,8 @@ cg_found:
|
|||
succed:
|
||||
ubh_mark_buffer_dirty (USPI_UBH(uspi));
|
||||
ubh_mark_buffer_dirty (UCPI_UBH(ucpi));
|
||||
if (sb->s_flags & MS_SYNCHRONOUS) {
|
||||
ubh_ll_rw_block(SWRITE, UCPI_UBH(ucpi));
|
||||
ubh_wait_on_buffer (UCPI_UBH(ucpi));
|
||||
}
|
||||
if (sb->s_flags & MS_SYNCHRONOUS)
|
||||
ubh_sync_block(UCPI_UBH(ucpi));
|
||||
sb->s_dirt = 1;
|
||||
|
||||
result += cgno * uspi->s_fpg;
|
||||
|
|
|
|||
|
|
@ -113,10 +113,8 @@ void ufs_free_inode (struct inode * inode)
|
|||
|
||||
ubh_mark_buffer_dirty (USPI_UBH(uspi));
|
||||
ubh_mark_buffer_dirty (UCPI_UBH(ucpi));
|
||||
if (sb->s_flags & MS_SYNCHRONOUS) {
|
||||
ubh_ll_rw_block(SWRITE, UCPI_UBH(ucpi));
|
||||
ubh_wait_on_buffer (UCPI_UBH(ucpi));
|
||||
}
|
||||
if (sb->s_flags & MS_SYNCHRONOUS)
|
||||
ubh_sync_block(UCPI_UBH(ucpi));
|
||||
|
||||
sb->s_dirt = 1;
|
||||
unlock_super (sb);
|
||||
|
|
@ -156,10 +154,8 @@ static void ufs2_init_inodes_chunk(struct super_block *sb,
|
|||
|
||||
fs32_add(sb, &ucg->cg_u.cg_u2.cg_initediblk, uspi->s_inopb);
|
||||
ubh_mark_buffer_dirty(UCPI_UBH(ucpi));
|
||||
if (sb->s_flags & MS_SYNCHRONOUS) {
|
||||
ubh_ll_rw_block(SWRITE, UCPI_UBH(ucpi));
|
||||
ubh_wait_on_buffer(UCPI_UBH(ucpi));
|
||||
}
|
||||
if (sb->s_flags & MS_SYNCHRONOUS)
|
||||
ubh_sync_block(UCPI_UBH(ucpi));
|
||||
|
||||
UFSD("EXIT\n");
|
||||
}
|
||||
|
|
@ -290,10 +286,8 @@ cg_found:
|
|||
}
|
||||
ubh_mark_buffer_dirty (USPI_UBH(uspi));
|
||||
ubh_mark_buffer_dirty (UCPI_UBH(ucpi));
|
||||
if (sb->s_flags & MS_SYNCHRONOUS) {
|
||||
ubh_ll_rw_block(SWRITE, UCPI_UBH(ucpi));
|
||||
ubh_wait_on_buffer (UCPI_UBH(ucpi));
|
||||
}
|
||||
if (sb->s_flags & MS_SYNCHRONOUS)
|
||||
ubh_sync_block(UCPI_UBH(ucpi));
|
||||
sb->s_dirt = 1;
|
||||
|
||||
inode->i_ino = cg * uspi->s_ipg + bit;
|
||||
|
|
|
|||
|
|
@ -243,10 +243,8 @@ static int ufs_trunc_indirect(struct inode *inode, u64 offset, void *p)
|
|||
ubh_bforget(ind_ubh);
|
||||
ind_ubh = NULL;
|
||||
}
|
||||
if (IS_SYNC(inode) && ind_ubh && ubh_buffer_dirty(ind_ubh)) {
|
||||
ubh_ll_rw_block(SWRITE, ind_ubh);
|
||||
ubh_wait_on_buffer (ind_ubh);
|
||||
}
|
||||
if (IS_SYNC(inode) && ind_ubh && ubh_buffer_dirty(ind_ubh))
|
||||
ubh_sync_block(ind_ubh);
|
||||
ubh_brelse (ind_ubh);
|
||||
|
||||
UFSD("EXIT: ino %lu\n", inode->i_ino);
|
||||
|
|
@ -307,10 +305,8 @@ static int ufs_trunc_dindirect(struct inode *inode, u64 offset, void *p)
|
|||
ubh_bforget(dind_bh);
|
||||
dind_bh = NULL;
|
||||
}
|
||||
if (IS_SYNC(inode) && dind_bh && ubh_buffer_dirty(dind_bh)) {
|
||||
ubh_ll_rw_block(SWRITE, dind_bh);
|
||||
ubh_wait_on_buffer (dind_bh);
|
||||
}
|
||||
if (IS_SYNC(inode) && dind_bh && ubh_buffer_dirty(dind_bh))
|
||||
ubh_sync_block(dind_bh);
|
||||
ubh_brelse (dind_bh);
|
||||
|
||||
UFSD("EXIT: ino %lu\n", inode->i_ino);
|
||||
|
|
@ -367,10 +363,8 @@ static int ufs_trunc_tindirect(struct inode *inode)
|
|||
ubh_bforget(tind_bh);
|
||||
tind_bh = NULL;
|
||||
}
|
||||
if (IS_SYNC(inode) && tind_bh && ubh_buffer_dirty(tind_bh)) {
|
||||
ubh_ll_rw_block(SWRITE, tind_bh);
|
||||
ubh_wait_on_buffer (tind_bh);
|
||||
}
|
||||
if (IS_SYNC(inode) && tind_bh && ubh_buffer_dirty(tind_bh))
|
||||
ubh_sync_block(tind_bh);
|
||||
ubh_brelse (tind_bh);
|
||||
|
||||
UFSD("EXIT: ino %lu\n", inode->i_ino);
|
||||
|
|
|
|||
|
|
@ -113,21 +113,17 @@ void ubh_mark_buffer_uptodate (struct ufs_buffer_head * ubh, int flag)
|
|||
}
|
||||
}
|
||||
|
||||
void ubh_ll_rw_block(int rw, struct ufs_buffer_head *ubh)
|
||||
void ubh_sync_block(struct ufs_buffer_head *ubh)
|
||||
{
|
||||
if (!ubh)
|
||||
return;
|
||||
if (ubh) {
|
||||
unsigned i;
|
||||
|
||||
ll_rw_block(rw, ubh->count, ubh->bh);
|
||||
}
|
||||
for (i = 0; i < ubh->count; i++)
|
||||
write_dirty_buffer(ubh->bh[i], WRITE);
|
||||
|
||||
void ubh_wait_on_buffer (struct ufs_buffer_head * ubh)
|
||||
{
|
||||
unsigned i;
|
||||
if (!ubh)
|
||||
return;
|
||||
for ( i = 0; i < ubh->count; i++ )
|
||||
wait_on_buffer (ubh->bh[i]);
|
||||
for (i = 0; i < ubh->count; i++)
|
||||
wait_on_buffer(ubh->bh[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void ubh_bforget (struct ufs_buffer_head * ubh)
|
||||
|
|
|
|||
|
|
@ -269,8 +269,7 @@ 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_ll_rw_block(int, struct ufs_buffer_head *);
|
||||
extern void ubh_wait_on_buffer (struct ufs_buffer_head *);
|
||||
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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue