xref: /haiku/src/kits/storage/disk_device/jobs/ResizeJob.cpp (revision 220d04022750f40f8bac8f01fa551211e28d04f2)
1 /*
2  * Copyright 2007, Ingo Weinhold, ingo_weinhold@gmx.de.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 #include "ResizeJob.h"
7 
8 #include <syscalls.h>
9 
10 #include "DiskDeviceUtils.h"
11 #include "PartitionReference.h"
12 
13 
14 // constructor
15 ResizeJob::ResizeJob(PartitionReference* partition, PartitionReference* child,
16 		off_t size, off_t contentSize)
17 	:
18 	DiskDeviceJob(partition, child),
19 	fSize(size),
20 	fContentSize(contentSize)
21 {
22 }
23 
24 
25 // destructor
26 ResizeJob::~ResizeJob()
27 {
28 }
29 
30 
31 // Do
32 status_t
33 ResizeJob::Do()
34 {
35 	int32 changeCounter = fPartition->ChangeCounter();
36 	int32 childChangeCounter = fChild->ChangeCounter();
37 	status_t error = _kern_resize_partition(fPartition->PartitionID(),
38 		&changeCounter, fChild->PartitionID(), &childChangeCounter, fSize,
39 		fContentSize);
40 	if (error != B_OK)
41 		return error;
42 
43 	fPartition->SetChangeCounter(changeCounter);
44 	fChild->SetChangeCounter(childChangeCounter);
45 
46 	return B_OK;
47 }
48 
49