You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable: (39 commits)
Btrfs: deal with errors from updating the tree log
Btrfs: allow subvol deletion by unprivileged user with -o user_subvol_rm_allowed
Btrfs: make SNAP_DESTROY async
Btrfs: add SNAP_CREATE_ASYNC ioctl
Btrfs: add START_SYNC, WAIT_SYNC ioctls
Btrfs: async transaction commit
Btrfs: fix deadlock in btrfs_commit_transaction
Btrfs: fix lockdep warning on clone ioctl
Btrfs: fix clone ioctl where range is adjacent to extent
Btrfs: fix delalloc checks in clone ioctl
Btrfs: drop unused variable in block_alloc_rsv
Btrfs: cleanup warnings from gcc 4.6 (nonbugs)
Btrfs: Fix variables set but not read (bugs found by gcc 4.6)
Btrfs: Use ERR_CAST helpers
Btrfs: use memdup_user helpers
Btrfs: fix raid code for removing missing drives
Btrfs: Switch the extent buffer rbtree into a radix tree
Btrfs: restructure try_release_extent_buffer()
Btrfs: use the flusher threads for delalloc throttling
Btrfs: tune the chunk allocation to 5% of the FS as metadata
...
Fix up trivial conflicts in fs/btrfs/super.c and fs/fs-writeback.c, and
remove use of INIT_RCU_HEAD in fs/btrfs/extent_io.c (that init macro was
useless and removed in commit 5e8067adfd: "rcu head remove init")
This commit is contained in:
+40
-7
@@ -1081,30 +1081,42 @@ static void wait_sb_inodes(struct super_block *sb)
|
||||
}
|
||||
|
||||
/**
|
||||
* writeback_inodes_sb - writeback dirty inodes from given super_block
|
||||
* writeback_inodes_sb_nr - writeback dirty inodes from given super_block
|
||||
* @sb: the superblock
|
||||
* @nr: the number of pages to write
|
||||
*
|
||||
* Start writeback on some inodes on this super_block. No guarantees are made
|
||||
* on how many (if any) will be written, and this function does not wait
|
||||
* for IO completion of submitted IO. The number of pages submitted is
|
||||
* returned.
|
||||
* for IO completion of submitted IO.
|
||||
*/
|
||||
void writeback_inodes_sb(struct super_block *sb)
|
||||
void writeback_inodes_sb_nr(struct super_block *sb, unsigned long nr)
|
||||
{
|
||||
DECLARE_COMPLETION_ONSTACK(done);
|
||||
struct wb_writeback_work work = {
|
||||
.sb = sb,
|
||||
.sync_mode = WB_SYNC_NONE,
|
||||
.done = &done,
|
||||
.nr_pages = nr,
|
||||
};
|
||||
|
||||
WARN_ON(!rwsem_is_locked(&sb->s_umount));
|
||||
|
||||
work.nr_pages = get_nr_dirty_pages();
|
||||
|
||||
bdi_queue_work(sb->s_bdi, &work);
|
||||
wait_for_completion(&done);
|
||||
}
|
||||
EXPORT_SYMBOL(writeback_inodes_sb_nr);
|
||||
|
||||
/**
|
||||
* writeback_inodes_sb - writeback dirty inodes from given super_block
|
||||
* @sb: the superblock
|
||||
*
|
||||
* Start writeback on some inodes on this super_block. No guarantees are made
|
||||
* on how many (if any) will be written, and this function does not wait
|
||||
* for IO completion of submitted IO.
|
||||
*/
|
||||
void writeback_inodes_sb(struct super_block *sb)
|
||||
{
|
||||
return writeback_inodes_sb_nr(sb, get_nr_dirty_pages());
|
||||
}
|
||||
EXPORT_SYMBOL(writeback_inodes_sb);
|
||||
|
||||
/**
|
||||
@@ -1126,6 +1138,27 @@ int writeback_inodes_sb_if_idle(struct super_block *sb)
|
||||
}
|
||||
EXPORT_SYMBOL(writeback_inodes_sb_if_idle);
|
||||
|
||||
/**
|
||||
* writeback_inodes_sb_if_idle - start writeback if none underway
|
||||
* @sb: the superblock
|
||||
* @nr: the number of pages to write
|
||||
*
|
||||
* Invoke writeback_inodes_sb if no writeback is currently underway.
|
||||
* Returns 1 if writeback was started, 0 if not.
|
||||
*/
|
||||
int writeback_inodes_sb_nr_if_idle(struct super_block *sb,
|
||||
unsigned long nr)
|
||||
{
|
||||
if (!writeback_in_progress(sb->s_bdi)) {
|
||||
down_read(&sb->s_umount);
|
||||
writeback_inodes_sb_nr(sb, nr);
|
||||
up_read(&sb->s_umount);
|
||||
return 1;
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(writeback_inodes_sb_nr_if_idle);
|
||||
|
||||
/**
|
||||
* sync_inodes_sb - sync sb inode pages
|
||||
* @sb: the superblock
|
||||
|
||||
Reference in New Issue
Block a user