static int card_blk_open(struct block_device *bdev, fmode_t mode) { struct card_blk_data *card_data; int ret = -ENXIO; card_data = card_blk_get(bdev->bd_disk); if (card_data) { if (card_data->usage == 2) check_disk_change(bdev); ret = 0; /* * it would return -EROFS when FS/USB open card with O_RDWR. * set sd_mmc_info->write_protected_flag in func sd_mmc_check_wp * set card->state |= CARD_STATE_READONLY in func sd_open * set card_data->read_only = 1 in func card_blk_alloc */ if ((mode & FMODE_WRITE) && card_data->read_only){ card_blk_put(bdev->bd_disk->private_data); ret = -EROFS; } } return ret; }
static int card_blk_open(struct block_device *bdev, fmode_t mode) { struct card_blk_data *card_data; int ret = -ENXIO; card_data = card_blk_get(bdev->bd_disk); if (card_data) { if (card_data->usage == 2) check_disk_change(bdev); ret = 0; if ((mode & FMODE_WRITE) && card_data->read_only) ret = -EROFS; } return ret; }