summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Schlueter <schlueter.tim@linux.com>2018-11-04 20:14:46 -0800
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-22 17:08:11 -0400
commita420eea6890d709b7b9b33222d4fecc7a7ad9bd4 (patch)
tree612681209b6d00b2b287a523693406471eb200fc
parent4628529f152782933865257796000f1f6702a9ee (diff)
downloadlinux-stable-a420eea6890d709b7b9b33222d4fecc7a7ad9bd4.tar.gz
linux-stable-a420eea6890d709b7b9b33222d4fecc7a7ad9bd4.tar.bz2
linux-stable-a420eea6890d709b7b9b33222d4fecc7a7ad9bd4.zip
bcachefs: Set the last mount time using the realtime clock
This way the last mount time is actually meaningful instead of just being various times from 1970 (which happens with the monotonic clock). Also, roundup_pow_of_two() is undefined when passed in 0, so check before calling it. Signed-off-by: Tim Schlueter <schlueter.tim@linux.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--fs/bcachefs/fifo.h4
-rw-r--r--fs/bcachefs/super.c6
2 files changed, 6 insertions, 4 deletions
diff --git a/fs/bcachefs/fifo.h b/fs/bcachefs/fifo.h
index 00d245efe72a..0cd5f1931aac 100644
--- a/fs/bcachefs/fifo.h
+++ b/fs/bcachefs/fifo.h
@@ -13,7 +13,9 @@ struct { \
#define DECLARE_FIFO(type, name) FIFO(type) name
#define fifo_buf_size(fifo) \
- (roundup_pow_of_two((fifo)->size) * sizeof((fifo)->data[0]))
+ ((fifo)->size \
+ ? roundup_pow_of_two((fifo)->size) * sizeof((fifo)->data[0]) \
+ : 0)
#define init_fifo(fifo, _size, _gfp) \
({ \
diff --git a/fs/bcachefs/super.c b/fs/bcachefs/super.c
index a2ee698970a8..54d23cf46f95 100644
--- a/fs/bcachefs/super.c
+++ b/fs/bcachefs/super.c
@@ -654,7 +654,7 @@ const char *bch2_fs_start(struct bch_fs *c)
const char *err = "cannot allocate memory";
struct bch_sb_field_members *mi;
struct bch_dev *ca;
- time64_t now = ktime_get_seconds();
+ time64_t now = ktime_get_real_seconds();
unsigned i;
int ret = -EINVAL;
@@ -1418,7 +1418,7 @@ have_slot:
/* success: */
mi->members[dev_idx] = dev_mi;
- mi->members[dev_idx].last_mount = cpu_to_le64(ktime_get_seconds());
+ mi->members[dev_idx].last_mount = cpu_to_le64(ktime_get_real_seconds());
c->disk_sb.sb->nr_devices = nr_devices;
ca->disk_sb.sb->dev_idx = dev_idx;
@@ -1494,7 +1494,7 @@ int bch2_dev_online(struct bch_fs *c, const char *path)
mi = bch2_sb_get_members(c->disk_sb.sb);
mi->members[ca->dev_idx].last_mount =
- cpu_to_le64(ktime_get_seconds());
+ cpu_to_le64(ktime_get_real_seconds());
bch2_write_super(c);
mutex_unlock(&c->sb_lock);