diff --git a/kmod/src/file.c b/kmod/src/file.c index ca4a16ef..7d8410e7 100644 --- a/kmod/src/file.c +++ b/kmod/src/file.c @@ -368,8 +368,12 @@ retry: out: if (locked) { unlock_for_iomap_write(inode, scoutfs_inode_lock, &ind_locks, written); + locked = false; } + if (ret == -ENOBUFS) + goto retry; + return ret < 0 ? ret : written; } @@ -435,8 +439,12 @@ retry: out: if (locked) { unlock_for_iomap_write(inode, scoutfs_inode_lock, &ind_locks, written); + locked = false; } + if (ret == -ENOBUFS) + goto retry; + if (written > 0 && ((orig_pos + written) & BACKGROUND_WRITEBACK_MASK) == 0) { scoutfs_writepages_sync_none(file->f_mapping, orig_pos + written - BACKGROUND_WRITEBACK_BYTES,