Files
linux/fs
Xiubo Li b520f78ba4 ceph: do not execute direct write in parallel if O_APPEND is specified
[ Upstream commit 8e4473bb50 ]

In O_APPEND & O_DIRECT mode, the data from different writers will
be possibly overlapping each other since they take the shared lock.

For example, both Writer1 and Writer2 are in O_APPEND and O_DIRECT
mode:

          Writer1                         Writer2

     shared_lock()                   shared_lock()
     getattr(CAP_SIZE)               getattr(CAP_SIZE)
     iocb->ki_pos = EOF              iocb->ki_pos = EOF
     write(data1)
                                     write(data2)
     shared_unlock()                 shared_unlock()

The data2 will overlap the data1 from the same file offset, the
old EOF.

Switch to exclusive lock instead when O_APPEND is specified.

Signed-off-by: Xiubo Li <xiubli@redhat.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-03-05 16:43:38 +01:00
..
2020-02-24 08:36:53 +01:00
2020-02-11 04:35:35 -08:00
2019-07-03 17:52:09 -04:00
2019-10-19 06:32:32 -04:00
2020-03-05 16:43:36 +01:00
2019-11-29 10:10:10 +01:00
2019-08-07 21:51:47 -04:00
2019-12-17 19:55:30 +01:00
2019-10-14 15:04:01 -07:00
2020-02-05 21:22:39 +00:00
2019-08-01 20:51:23 +02:00