libceph: store timeouts in jiffies, verify user input
authorIlya Dryomov <idryomov@gmail.com>
Fri, 15 May 2015 09:02:17 +0000 (12:02 +0300)
committerIlya Dryomov <idryomov@gmail.com>
Thu, 25 Jun 2015 08:49:29 +0000 (11:49 +0300)
commita319bf56a617354e62cf5f774d2ca4e1a8a3bff3
treecf54ed20b02c8488a342f54fd573eb57df964a3c
parentd50c97b566c5bbf990eff472e9feaa58fdebdd33
libceph: store timeouts in jiffies, verify user input

There are currently three libceph-level timeouts that the user can
specify on mount: mount_timeout, osd_idle_ttl and osdkeepalive.  All of
these are in seconds and no checking is done on user input: negative
values are accepted, we multiply them all by HZ which may or may not
overflow, arbitrarily large jiffies then get added together, etc.

There is also a bug in the way mount_timeout=0 is handled.  It's
supposed to mean "infinite timeout", but that's not how wait.h APIs
treat it and so __ceph_open_session() for example will busy loop
without much chance of being interrupted if none of ceph-mons are
there.

Fix all this by verifying user input, storing timeouts capped by
msecs_to_jiffies() in jiffies and using the new ceph_timeout_jiffies()
helper for all user-specified waits to handle infinite timeouts
correctly.

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Reviewed-by: Alex Elder <elder@linaro.org>
drivers/block/rbd.c
fs/ceph/dir.c
fs/ceph/mds_client.c
fs/ceph/mds_client.h
fs/ceph/super.c
include/linux/ceph/libceph.h
net/ceph/ceph_common.c
net/ceph/mon_client.c
net/ceph/osd_client.c