|
@@ -45,7 +45,7 @@ static void ceph_put_super(struct super_block *s)
|
|
|
static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf)
|
|
|
{
|
|
|
struct ceph_fs_client *fsc = ceph_inode_to_client(d_inode(dentry));
|
|
|
- struct ceph_monmap *monmap = fsc->client->monc.monmap;
|
|
|
+ struct ceph_mon_client *monc = &fsc->client->monc;
|
|
|
struct ceph_statfs st;
|
|
|
u64 fsid;
|
|
|
int err;
|
|
@@ -58,7 +58,7 @@ static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf)
|
|
|
}
|
|
|
|
|
|
dout("statfs\n");
|
|
|
- err = ceph_monc_do_statfs(&fsc->client->monc, data_pool, &st);
|
|
|
+ err = ceph_monc_do_statfs(monc, data_pool, &st);
|
|
|
if (err < 0)
|
|
|
return err;
|
|
|
|
|
@@ -94,8 +94,11 @@ static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf)
|
|
|
buf->f_namelen = NAME_MAX;
|
|
|
|
|
|
/* Must convert the fsid, for consistent values across arches */
|
|
|
- fsid = le64_to_cpu(*(__le64 *)(&monmap->fsid)) ^
|
|
|
- le64_to_cpu(*((__le64 *)&monmap->fsid + 1));
|
|
|
+ mutex_lock(&monc->mutex);
|
|
|
+ fsid = le64_to_cpu(*(__le64 *)(&monc->monmap->fsid)) ^
|
|
|
+ le64_to_cpu(*((__le64 *)&monc->monmap->fsid + 1));
|
|
|
+ mutex_unlock(&monc->mutex);
|
|
|
+
|
|
|
buf->f_fsid.val[0] = fsid & 0xffffffff;
|
|
|
buf->f_fsid.val[1] = fsid >> 32;
|
|
|
|