Whamcloud - gitweb
LU-11771 osd: avoid use of HZ in brw_stats
[fs/lustre-release.git] / lustre / osd-zfs / osd_io.c
index 1d9de36..ed3c92c 100644 (file)
@@ -94,22 +94,16 @@ static void record_end_io(struct osd_device *osd, int rw,
 {
        struct obd_histogram *h = osd->od_brw_stats.hist;
 
-       if (rw == READ) {
+       if (rw == READ)
                atomic_dec(&osd->od_r_in_flight);
-               lprocfs_oh_tally_log2(&h[BRW_R_PAGES], npages);
-               if (disksize > 0)
-                       lprocfs_oh_tally_log2(&h[BRW_R_DISK_IOSIZE], disksize);
-               if (elapsed)
-                       lprocfs_oh_tally_log2(&h[BRW_R_IO_TIME], elapsed);
-
-       } else {
+       else
                atomic_dec(&osd->od_w_in_flight);
-               lprocfs_oh_tally_log2(&h[BRW_W_PAGES], npages);
-               if (disksize > 0)
-                       lprocfs_oh_tally_log2(&h[BRW_W_DISK_IOSIZE], disksize);
-               if (elapsed)
-                       lprocfs_oh_tally_log2(&h[BRW_W_IO_TIME], elapsed);
-       }
+
+       lprocfs_oh_tally_log2(&h[BRW_R_PAGES + rw], npages);
+       if (disksize > 0)
+               lprocfs_oh_tally_log2(&h[BRW_R_DISK_IOSIZE + rw], disksize);
+       if (elapsed)
+               lprocfs_oh_tally_log2(&h[BRW_R_IO_TIME + rw], elapsed);
 }
 
 static ssize_t __osd_read(const struct lu_env *env, struct dt_object *dt,
@@ -692,8 +686,6 @@ static int osd_declare_write_commit(const struct lu_env *env,
                space += osd_roundup2blocksz(size, offset, blksz);
        }
 
-       oh->ot_write_commit = 1; /* used in osd_trans_start() for fail_loc */
-
        /* backend zfs filesystem might be configured to store multiple data
         * copies */
        space  *= osd->od_os->os_copies;
@@ -833,6 +825,9 @@ static int osd_write_commit(const struct lu_env *env, struct dt_object *dt,
            osd->od_readcache_max_filesize)
                drop_cache = 1;
 
+       if (OBD_FAIL_CHECK(OBD_FAIL_OST_MAPBLK_ENOSPC))
+               RETURN(-ENOSPC);
+
        /* LU-8791: take oo_guard to avoid the deadlock that changing block
         * size and assigning arcbuf take place at the same time.
         *
@@ -880,8 +875,8 @@ static int osd_write_commit(const struct lu_env *env, struct dt_object *dt,
 
                if (lnb[i].lnb_page->mapping == (void *)obj) {
                        osd_dmu_write(osd, obj->oo_dn, lnb[i].lnb_file_offset,
-                                     lnb[i].lnb_len, kmap(lnb[i].lnb_page),
-                                     oh->ot_tx);
+                                     lnb[i].lnb_len, kmap(lnb[i].lnb_page) +
+                                     lnb[i].lnb_page_offset, oh->ot_tx);
                        kunmap(lnb[i].lnb_page);
                        iosize += lnb[i].lnb_len;
                        abufsz = lnb[i].lnb_len; /* to drop cache below */