On 08/16/2010 03:43 PM, Sukadev Bhattiprolu wrote: > In preparation for checkpoint/restart of file leases, add ->fl_type_prev > field to 'struct file_lock'. This field is needed to correctly restore > file leases in case of recursive checkpoint/restart of an in-progress > lease. Nit: since it isn't obvious why fl_type_prev field exists, maybe add this comment also inside fs.h (so that future readers won't need to look it up in the git history) ? Oren. > > This ->fl_type_prev is only initialized in this patch. It will actually > be used when restoring file leases after a checkpoint. > > Signed-off-by: Sukadev Bhattiprolu <sukadev@xxxxxxxxxxxxxxxxxx> > --- > fs/locks.c | 10 ++++++++++ > include/linux/fs.h | 1 + > 2 files changed, 11 insertions(+), 0 deletions(-) > > diff --git a/fs/locks.c b/fs/locks.c > index 0bd5af7..9a00876 100644 > --- a/fs/locks.c > +++ b/fs/locks.c > @@ -184,6 +184,7 @@ void locks_init_lock(struct file_lock *fl) > fl->fl_file = NULL; > fl->fl_flags = 0; > fl->fl_type = 0; > + fl->fl_type_prev = 0; > fl->fl_start = fl->fl_end = 0; > fl->fl_break_time = 0UL; > fl->fl_ops = NULL; > @@ -227,6 +228,7 @@ void __locks_copy_lock(struct file_lock *new, const struct file_lock *fl) > new->fl_file = NULL; > new->fl_flags = fl->fl_flags; > new->fl_type = fl->fl_type; > + new->fl_type_prev = fl->fl_type_prev; > new->fl_start = fl->fl_start; > new->fl_end = fl->fl_end; > new->fl_break_time = 0UL; > @@ -293,6 +295,13 @@ static int assign_type(struct file_lock *fl, int type) > case F_WRLCK: > case F_UNLCK: > fl->fl_type = type; > + /* > + * Clear ->fl_type_prev since this is a new lease type. > + * break_lease() will use this cleared state to know > + * if it must save the lease-type in case of checkpoint/ > + * restart. > + */ > + fl->fl_type_prev = 0; > break; > default: > return -EINVAL; > @@ -1222,6 +1231,7 @@ int __break_lease(struct inode *inode, unsigned int mode) > > for (fl = flock; fl && IS_LEASE(fl); fl = fl->fl_next) { > if (fl->fl_type != future) { > + fl->fl_type_prev = fl->fl_type; > fl->fl_type = future; > fl->fl_break_time = break_time; > /* lease must have lmops break callback */ > diff --git a/include/linux/fs.h b/include/linux/fs.h > index 49d4eeb..299cc09 100644 > --- a/include/linux/fs.h > +++ b/include/linux/fs.h > @@ -1066,6 +1066,7 @@ struct file_lock { > fl_owner_t fl_owner; > unsigned char fl_flags; > unsigned char fl_type; > + unsigned char fl_type_prev; > unsigned int fl_pid; > struct pid *fl_nspid; > wait_queue_head_t fl_wait; -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html