add patch add-fallocate-mode-blocking-for-debugging
[ext4-patch-queue.git] / factor-out-common-code-in-ext4_file_write
blob33d778473ab709428dec17e3782bf3007bdd2c01
1 ext4: factor out common code in ext4_file_write()
3 This shouldn't change any logic flow; just delete duplicated code.
5 Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
6 ---
7  fs/ext4/file.c | 37 +++++++++++++------------------------
8  1 file changed, 13 insertions(+), 24 deletions(-)
10 diff --git a/fs/ext4/file.c b/fs/ext4/file.c
11 index 5005391..6ac33da 100644
12 --- a/fs/ext4/file.c
13 +++ b/fs/ext4/file.c
14 @@ -98,6 +98,7 @@ ext4_file_write(struct kiocb *iocb, const struct iovec *iov,
15         struct file *file = iocb->ki_filp;
16         struct inode *inode = file_inode(iocb->ki_filp);
17         struct blk_plug plug;
18 +       int o_direct = file->f_flags & O_DIRECT;
19         int overwrite = 0;
20         size_t length = iov_length(iov, nr_segs);
21         ssize_t ret;
22 @@ -122,7 +123,7 @@ ext4_file_write(struct kiocb *iocb, const struct iovec *iov,
23                 }
24         }
26 -       if (unlikely(iocb->ki_filp->f_flags & O_DIRECT)) {
27 +       if (o_direct) {
28                 struct mutex *aio_mutex = NULL;
30                 /* Unaligned direct AIO must be serialized; see comment above */
31 @@ -169,33 +170,21 @@ ext4_file_write(struct kiocb *iocb, const struct iovec *iov,
32                         if (err == len && (map.m_flags & EXT4_MAP_MAPPED))
33                                 overwrite = 1;
34                 }
36 -               ret = __generic_file_aio_write(iocb, iov, nr_segs,
37 -                                              &iocb->ki_pos);
38 -               mutex_unlock(&inode->i_mutex);
40 -               if (ret > 0) {
41 -                       ssize_t err;
43 -                       err = generic_write_sync(file, iocb->ki_pos - ret, ret);
44 -                       if (err < 0)
45 -                               ret = err;
46 -               }
47 -               blk_finish_plug(&plug);
48 -       } else {
49 +       } else
50                 mutex_lock(&inode->i_mutex);
51 -               ret = __generic_file_aio_write(iocb, iov, nr_segs,
52 -                                              &iocb->ki_pos);
53 -               mutex_unlock(&inode->i_mutex);
55 -               if (ret > 0) {
56 -                       ssize_t err;
57 +       ret = __generic_file_aio_write(iocb, iov, nr_segs, &iocb->ki_pos);
58 +       mutex_unlock(&inode->i_mutex);
60 -                       err = generic_write_sync(file, iocb->ki_pos - ret, ret);
61 -                       if (err < 0)
62 -                               ret = err;
63 -               }
64 +       if (ret > 0) {
65 +               ssize_t err;
67 +               err = generic_write_sync(file, iocb->ki_pos - ret, ret);
68 +               if (err < 0)
69 +                       ret = err;
70         }
71 +       if (o_direct)
72 +               blk_finish_plug(&plug);
74         return ret;
75  }