[CRIU] [PATCHv2 1/5] locks: Add c/r of non broken leases (kernel>=v4.1)
Andrei Vagin
avagin at virtuozzo.com
Wed Aug 30 02:41:15 MSK 2017
Pls, don't ignore a cover letter
On Mon, Aug 14, 2017 at 02:49:37AM +0300, Pavel Begunkov wrote:
> Leases in breaking state are not supported. In that case criu will
> report an error during the dumping. Also lock info in
> /proc/<pid>/fdinfo should be presented (since kernel 4.1).
>
> Signed-off-by: Pavel Begunkov <asml.silence at gmail.com>
> ---
> criu/file-lock.c | 9 +++++++++
> criu/include/file-lock.h | 1 +
> criu/proc_parse.c | 5 +++++
> 3 files changed, 15 insertions(+)
>
> diff --git a/criu/file-lock.c b/criu/file-lock.c
> index 2d4036c75..92d8bd394 100644
> --- a/criu/file-lock.c
> +++ b/criu/file-lock.c
> @@ -292,6 +292,9 @@ int note_file_lock(struct pid *pid, int fd, int lfd, struct fd_parms *p)
> */
> if (fl->fl_owner != pid->real)
> continue;
> + } else if (fl->fl_kind == FL_LEASE) {
> + pr_err("Leases are not supported for kernel <= v4.0");
> + return -1;
> } else /* fl->fl_kind == FL_FLOCK || fl->fl_kind == FL_OFD */ {
> int ret;
>
> @@ -395,6 +398,12 @@ static int restore_file_lock(FileLockEntry *fle)
> pr_err("Can not set ofd lock!\n");
> goto err;
> }
> + } else if (fle->flag & FL_LEASE) {
> + ret = fcntl(fle->fd, F_SETLEASE, fle->type);
> + if (ret < 0) {
> + pr_perror("Can't set lease!\n");
> + goto err;
> + }
> } else {
> pr_err("Unknown file lock style!\n");
> goto err;
> diff --git a/criu/include/file-lock.h b/criu/include/file-lock.h
> index c3f2dabf7..f70739adb 100644
> --- a/criu/include/file-lock.h
> +++ b/criu/include/file-lock.h
> @@ -10,6 +10,7 @@
> #define FL_POSIX 1
> #define FL_FLOCK 2
> #define FL_OFD 4
> +#define FL_LEASE 8
>
> /* for posix fcntl() and lockf() */
> #ifndef F_RDLCK
> diff --git a/criu/proc_parse.c b/criu/proc_parse.c
> index e33da8d56..d3893272c 100644
> --- a/criu/proc_parse.c
> +++ b/criu/proc_parse.c
> @@ -1991,6 +1991,8 @@ static int parse_file_lock_buf(char *buf, struct file_lock *fl,
> fl->fl_kind = FL_FLOCK;
> else if (!strcmp(fl_flag, "OFDLCK"))
> fl->fl_kind = FL_OFD;
> + else if (!strcmp(fl_flag, "LEASE"))
> + fl->fl_kind = FL_LEASE;
> else
> fl->fl_kind = FL_UNKNOWN;
>
> @@ -2007,6 +2009,9 @@ static int parse_file_lock_buf(char *buf, struct file_lock *fl,
> pr_err("Unknown lock option!\n");
> return -1;
> }
> + } else if (fl->fl_kind == FL_LEASE && !strcmp(fl_type, "BREAKING")) {
> + pr_err("Breaking leases are not supported (%d): %s\n",
> + num, buf);
> } else {
> if (!strcmp(fl_option, "UNLCK")) {
> fl->fl_ltype |= F_UNLCK;
> --
> 2.11.1
>
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
More information about the CRIU
mailing list