- err = obd_statfs(&ll_s2sbi(sb)->ll_conn, &tmp);
- if (err) {
- CERROR("obd_statfs fails (%d)\n", err);
- RETURN(err);
- }
- memcpy(buf, &tmp, sizeof(*buf));
-#if 0
- err = mdc_statfs(&sbi->ll_mds_client, sbi->ll_mds_conn, &tmp,
- &request);
- if (err) {
- CERROR("obd_statfs fails (%d)\n", err);
- RETURN(err);
+ memset(sfs, 0, sizeof(*sfs));
+ rc = mdc_statfs(&sbi->ll_mdc_conn, sfs, &request);
+ ptlrpc_req_finished(request);
+ if (rc)
+ CERROR("obd_statfs fails: rc = %d\n", rc);
+ else
+ CDEBUG(D_SUPER, "statfs shows blocks %ld/%ld objects %ld/%ld\n",
+ sfs->f_bavail, sfs->f_blocks, sfs->f_files,sfs->f_ffree);
+
+ /* temporary until mds_statfs returns statfs info for all OSTs */
+ if (!rc) {
+ struct statfs obd_sfs;
+
+ rc = obd_statfs(&sbi->ll_osc_conn, &obd_sfs);
+ if (rc) {
+ CERROR("obd_statfs fails: rc = %d\n", rc);
+ GOTO(out, rc);
+ }
+ CDEBUG(D_SUPER, "obd_statfs returns blocks %ld/%ld, "
+ "objects %ld/%ld\n",
+ obd_sfs.f_bavail, obd_sfs.f_blocks,
+ obd_sfs.f_ffree, obd_sfs.f_files);
+
+ sfs->f_bfree = obd_sfs.f_bfree;
+ sfs->f_bavail = obd_sfs.f_bavail;
+ sfs->f_blocks = obd_sfs.f_blocks;
+ if (obd_sfs.f_ffree < sfs->f_ffree)
+ sfs->f_ffree = obd_sfs.f_ffree;