Patch "afs: Migrate vlocation fields to 64-bit" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
afs: Migrate vlocation fields to 64-bit
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
afs-migrate-vlocation-fields-to-64-bit.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Mon Dec 18 14:47:43 CET 2017
From: Tina Ruchandani <[email protected]>
Date: Thu, 16 Mar 2017 16:27:46 +0000
Subject: afs: Migrate vlocation fields to 64-bit
From: Tina Ruchandani <[email protected]>
[ Upstream commit 8a79790bf0b7da216627ffb85f52cfb4adbf1e4e ]
get_seconds() returns real wall-clock seconds. On 32-bit systems this value will overflow in year 2038 and beyond. This patch changes afs's vlocation record to use ktime_get_real_seconds() instead, for the fields time_of_death and update_at.
--- fs/afs/callback.c | 7 ++++--- fs/afs/internal.h | 7 ++++--- fs/afs/server.c | 6 +++--- fs/afs/vlocation.c | 16 +++++++++------- 4 files changed, 20 insertions(+), 16 deletions(-)
fs/afs/callback.c +4 -3
@@ -362,7 +362,7 @@ static void afs_callback_updater(struct {struct afs_server *server;struct afs_vnode *vnode, *xvnode; -time_t now; +time64_t now;long timeout;int ret;
@@ -370,7 +370,7 @@ static void afs_callback_updater(struct_enter ("" ); - now =get_seconds (); + now =ktime_get_real_seconds ();/* find the first vnode to update */ spin_lock (&server->cb_lock);
@@ -424,7 +424,8 @@ static void afs_callback_updater(struct/* and then reschedule */ _debug ("reschedule" ); - vnode->update_at =get_seconds () + afs_vnode_update_timeout; + vnode->update_at =ktime_get_real_seconds () + + afs_vnode_update_timeout;spin_lock (&server->cb_lock);
fs/afs/internal.h +4 -3
@@ -11,6 +11,7 @@#include <linux/compiler.h> #include <linux/kernel.h> +#include <linux/ktime.h> #include <linux/fs.h> #include <linux/pagemap.h> #include <linux/skbuff.h>
@@ -247,7 +248,7 @@ struct afs_cache_vhash {*/ struct afs_vlocation {atomic_t usage; -time_t time_of_death;/* time at which put reduced usage to 0 */ +time64_t time_of_death;/* time at which put reduced usage to 0 */ struct list_head link;/* link in cell volume location list */ struct list_head grave;/* link in master graveyard list */ struct list_head update;/* link in master update list */
@@ -258,7 +259,7 @@ struct afs_vlocation {struct afs_cache_vlocation vldb;/* volume information DB record */ struct afs_volume *vols[3 ];/* volume access record pointer (index by type) */ wait_queue_head_t waitq;/* status change waitqueue */ -time_t update_at;/* time at which record should be updated */ +time64_t update_at;/* time at which record should be updated */ spinlock_t lock;/* access lock */ afs_vlocation_state_t state;/* volume location state */ unsigned short upd_rej_cnt;/* ENOMEDIUM count during update */
@@ -271,7 +272,7 @@ struct afs_vlocation {*/ struct afs_server {atomic_t usage; -time_t time_of_death;/* time at which put reduced usage to 0 */ +time64_t time_of_death;/* time at which put reduced usage to 0 */ struct in_addr addr;/* server address */ struct afs_cell *cell;/* cell in which server resides */ struct list_head link;/* link in cell's server list */
fs/afs/server.c +3 -3
@@ -237,7 +237,7 @@ void afs_put_server(struct afs_server *sspin_lock (&afs_server_graveyard_lock);if (atomic_read (&server->usage) ==0 ) {list_move_tail (&server->grave, &afs_server_graveyard); - server->time_of_death =get_seconds (); + server->time_of_death =ktime_get_real_seconds ();queue_delayed_work (afs_wq, &afs_server_reaper, afs_server_timeout *HZ ); }
@@ -272,9 +272,9 @@ static void afs_reap_server(struct work_LIST_HEAD (corpses);struct afs_server *server;unsigned long delay, expiry; -time_t now; +time64_t now; - now =get_seconds (); + now =ktime_get_real_seconds ();spin_lock (&afs_server_graveyard_lock);while (!list_empty (&afs_server_graveyard)) {
fs/afs/vlocation.c +9 -7
@@ -340,7 +340,8 @@ static void afs_vlocation_queue_for_updastruct afs_vlocation *xvl;/* wait at least 10 minutes before updating... */ - vl->update_at =get_seconds () + afs_vlocation_update_timeout; + vl->update_at =ktime_get_real_seconds () + + afs_vlocation_update_timeout;spin_lock (&afs_vlocation_updates_lock);
@@ -506,7 +507,7 @@ void afs_put_vlocation(struct afs_vlocatif (atomic_read (&vl->usage) ==0 ) {_debug ("buried" );list_move_tail (&vl->grave, &afs_vlocation_graveyard); - vl->time_of_death =get_seconds (); + vl->time_of_death =ktime_get_real_seconds ();queue_delayed_work (afs_wq, &afs_vlocation_reap, afs_vlocation_timeout *HZ );
@@ -543,11 +544,11 @@ static void afs_vlocation_reaper(structLIST_HEAD (corpses);struct afs_vlocation *vl;unsigned long delay, expiry; -time_t now; +time64_t now;_enter ("" ); - now =get_seconds (); + now =ktime_get_real_seconds ();spin_lock (&afs_vlocation_graveyard_lock);while (!list_empty (&afs_vlocation_graveyard)) {
@@ -622,13 +623,13 @@ static void afs_vlocation_updater(struct {struct afs_cache_vlocation vldb;struct afs_vlocation *vl, *xvl; -time_t now; +time64_t now;long timeout;int ret;_enter ("" ); - now =get_seconds (); + now =ktime_get_real_seconds ();/* find a record to update */ spin_lock (&afs_vlocation_updates_lock);
@@ -684,7 +685,8 @@ static void afs_vlocation_updater(struct/* and then reschedule */ _debug ("reschedule" ); - vl->update_at =get_seconds () + afs_vlocation_update_timeout; + vl->update_at =ktime_get_real_seconds () + + afs_vlocation_update_timeout;spin_lock (&afs_vlocation_updates_lock);
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/afs-prevent-callback-expiry-timer-overflow.patch queue-4.4/afs-migrate-vlocation-fields-to-64-bit.patch