X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=module%2Fzfs%2Fzvol.c;h=9dda04077e7d0073dddcb2ce6c63b5160d261974;hb=56c34bac44d47898809c46db3e5444511bbe0ef6;hp=65a9240577c06aad84c0cd0edca6d283ed373a48;hpb=4c0d8e50b99b4f3b4a9b7bc67ac7fc4e406f5755;p=zfs.git diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c index 65a9240..9dda040 100644 --- a/module/zfs/zvol.c +++ b/module/zfs/zvol.c @@ -228,7 +228,7 @@ zvol_check_volsize(uint64_t volsize, uint64_t blocksize) * Ensure the zap is flushed then inform the VFS of the capacity change. */ static int -zvol_update_volsize(zvol_state_t *zv, uint64_t volsize) +zvol_update_volsize(zvol_state_t *zv, uint64_t volsize, objset_t *os) { struct block_device *bdev; dmu_tx_t *tx; @@ -236,7 +236,7 @@ zvol_update_volsize(zvol_state_t *zv, uint64_t volsize) ASSERT(MUTEX_HELD(&zvol_state_lock)); - tx = dmu_tx_create(zv->zv_objset); + tx = dmu_tx_create(os); dmu_tx_hold_zap(tx, ZVOL_ZAP_OBJ, TRUE, NULL); error = dmu_tx_assign(tx, TXG_WAIT); if (error) { @@ -244,27 +244,35 @@ zvol_update_volsize(zvol_state_t *zv, uint64_t volsize) return (error); } - error = zap_update(zv->zv_objset, ZVOL_ZAP_OBJ, "size", 8, 1, + error = zap_update(os, ZVOL_ZAP_OBJ, "size", 8, 1, &volsize, tx); dmu_tx_commit(tx); if (error) return (error); - error = dmu_free_long_range(zv->zv_objset, + error = dmu_free_long_range(os, ZVOL_OBJ, volsize, DMU_OBJECT_END); if (error) return (error); - zv->zv_volsize = volsize; - zv->zv_changed = 1; - bdev = bdget_disk(zv->zv_disk, 0); if (!bdev) - return EIO; + return (EIO); +/* + * 2.6.28 API change + * Added check_disk_size_change() helper function. + */ +#ifdef HAVE_CHECK_DISK_SIZE_CHANGE + set_capacity(zv->zv_disk, volsize >> 9); + zv->zv_volsize = volsize; + check_disk_size_change(zv->zv_disk, bdev); +#else + zv->zv_volsize = volsize; + zv->zv_changed = 1; + (void) check_disk_change(bdev); +#endif /* HAVE_CHECK_DISK_SIZE_CHANGE */ - error = check_disk_change(bdev); - ASSERT3U(error, !=, 0); bdput(bdev); return (0); @@ -311,7 +319,7 @@ zvol_set_volsize(const char *name, uint64_t volsize) goto out_doi; } - error = zvol_update_volsize(zv, volsize); + error = zvol_update_volsize(zv, volsize, os); out_doi: kmem_free(doi, sizeof(dmu_object_info_t)); out: @@ -547,7 +555,7 @@ zvol_write(void *arg) dmu_tx_commit(tx); zfs_range_unlock(rl); - if (rq_is_sync(req)) + if (rq_is_sync(req) || zv->zv_objset->os_sync == ZFS_SYNC_ALWAYS) zil_commit(zv->zv_zilog, ZVOL_OBJ); blk_end_request(req, -error, size); @@ -1342,8 +1350,8 @@ zvol_fini(void) list_destroy(&zvol_state_list); } -module_param(zvol_major, uint, 0); +module_param(zvol_major, uint, 0444); MODULE_PARM_DESC(zvol_major, "Major number for zvol device"); -module_param(zvol_threads, uint, 0); +module_param(zvol_threads, uint, 0444); MODULE_PARM_DESC(zvol_threads, "Number of threads for zvol device");