|
@@ -1513,6 +1513,7 @@ static int f2fs_write_data_pages(struct address_space *mapping,
|
|
{
|
|
{
|
|
struct inode *inode = mapping->host;
|
|
struct inode *inode = mapping->host;
|
|
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
|
|
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
|
|
|
|
+ bool locked = false;
|
|
int ret;
|
|
int ret;
|
|
long diff;
|
|
long diff;
|
|
|
|
|
|
@@ -1533,7 +1534,13 @@ static int f2fs_write_data_pages(struct address_space *mapping,
|
|
|
|
|
|
diff = nr_pages_to_write(sbi, DATA, wbc);
|
|
diff = nr_pages_to_write(sbi, DATA, wbc);
|
|
|
|
|
|
|
|
+ if (!S_ISDIR(inode->i_mode)) {
|
|
|
|
+ mutex_lock(&sbi->writepages);
|
|
|
|
+ locked = true;
|
|
|
|
+ }
|
|
ret = write_cache_pages(mapping, wbc, __f2fs_writepage, mapping);
|
|
ret = write_cache_pages(mapping, wbc, __f2fs_writepage, mapping);
|
|
|
|
+ if (locked)
|
|
|
|
+ mutex_unlock(&sbi->writepages);
|
|
|
|
|
|
f2fs_submit_merged_bio(sbi, DATA, WRITE);
|
|
f2fs_submit_merged_bio(sbi, DATA, WRITE);
|
|
|
|
|