vfs: separate __sb_start_write into blocking and non-blocking helpers

Break this function into two helpers so that it's obvious that the
trylock versions return a value that must be checked, and the blocking
versions don't require that.  While we're at it, clean up the return
type mismatch.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
Darrick J. Wong
2020-11-10 16:50:21 -08:00
parent 22843291ef
commit 8a3c84b649
4 changed files with 25 additions and 19 deletions

View File

@@ -1645,16 +1645,22 @@ EXPORT_SYMBOL(__sb_end_write);
* This is an internal function, please use sb_start_{write,pagefault,intwrite}
* instead.
*/
int __sb_start_write(struct super_block *sb, int level, bool wait)
void __sb_start_write(struct super_block *sb, int level)
{
if (!wait)
return percpu_down_read_trylock(sb->s_writers.rw_sem + level-1);
percpu_down_read(sb->s_writers.rw_sem + level-1);
return 1;
percpu_down_read(sb->s_writers.rw_sem + level - 1);
}
EXPORT_SYMBOL(__sb_start_write);
/*
* This is an internal function, please use sb_start_{write,pagefault,intwrite}
* instead.
*/
bool __sb_start_write_trylock(struct super_block *sb, int level)
{
return percpu_down_read_trylock(sb->s_writers.rw_sem + level - 1);
}
EXPORT_SYMBOL_GPL(__sb_start_write_trylock);
/**
* sb_wait_write - wait until all writers to given file system finish
* @sb: the super for which we wait