OBD_BRW_OVER_GRPQUOTA | \
OBD_BRW_OVER_PRJQUOTA)
+#define OBD_BRW_LOCAL1 0x80000000UL /*
+ * osd-ldiskfs internal,
+ * page mapped to real block
+ */
+
+#define OBD_BRW_LOCALS (OBD_BRW_LOCAL1)
+
#define OBD_OBJECT_EOF LUSTRE_EOF
#define OST_MIN_PRECREATE 32
/* correct index for local buffers to continue with */
for (k = 0; k < rc; k++) {
lnb[j+k].lnb_flags = rnb[i].rnb_flags;
+ lnb[j+k].lnb_flags &= ~OBD_BRW_LOCALS;
if (!(rnb[i].rnb_flags & OBD_BRW_GRANTED))
lnb[j+k].lnb_rc = -ENOSPC;
}
#undef HAVE_PROJECT_QUOTA
#endif
+#define OBD_BRW_MAPPED OBD_BRW_LOCAL1
+
struct osd_directory {
struct iam_container od_container;
struct iam_descr od_descr;
lnb[i - 1].lnb_file_offset + lnb[i - 1].lnb_len)
extents++;
- if (!osd_is_mapped(dt, lnb[i].lnb_file_offset, &extent))
+ if (osd_is_mapped(dt, lnb[i].lnb_file_offset, &extent))
+ lnb[i].lnb_flags |= OBD_BRW_MAPPED;
+ else
quota_space += PAGE_SIZE;
/* ignore quota for the whole request if any page is from
struct osd_device *osd = osd_obj2dev(osd_dt_obj(dt));
loff_t isize;
int rc = 0, i;
- struct osd_fextent extent = { 0 };
LASSERT(inode);
for (i = 0; i < npages; i++) {
if (lnb[i].lnb_rc == -ENOSPC &&
- osd_is_mapped(dt, lnb[i].lnb_file_offset, &extent)) {
+ (lnb[i].lnb_flags & OBD_BRW_MAPPED)) {
/* Allow the write to proceed if overwriting an
* existing block */
lnb[i].lnb_rc = 0;