IP Library Granted Patent US 8,010,759
Granted Patent B1
US 8,010,759 · App. 11/541,006 · Granted Aug 30, 2011

Extent redirect

Assignee: Symantec Operating Corporation
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,010,759
App. No.
11/541,006
Filed
Sep 29, 2006
Granted
Aug 30, 2011
Kind
B1
Art Unit
2187
USPC
711/154
Abstract

Redirecting a data object such as a file block extent. The data object can be redirected from a first memory block to a second memory block, wherein the second memory block includes a copy of modified data of the first memory block. The redirection may occur in response to a request to modify data of the data object. Redirection preserves the prior version of the data object stored in the first memory block to enable restoration of the data object if needed. In one embodiment, a first data object is mapped to a first memory block. A copy of data contents of the first memory block is created. Thereafter, data contained within the copy is modified in accordance, for example, with a request to write data to the first data object. The modified copy is stored in a second memory block, and the first data object is mapped to the second memory block.

Claims (198)

1. A method comprising:

creating an allocation table, wherein

the allocation table comprises a first entry associated with a first memory block, and

the first entry comprises a first flag indicating whether data in the first memory block is current;

mapping a data object to the first memory block;

updating the allocation table to reflect the mapping the data object to the first memory block, wherein the updating comprises

updating the first entry to indicate the first memory block is current;

creating a first copy of data contents of the first memory block;

modifying the first copy to create a first modified data;

allocating a second memory block in response to the modifying the first copy;

storing the first modified data in the second memory block;

remapping the data object to the second memory block; and

wherein

the first memory block is distinct from the second memory block.

2. The method of claim 1 wherein the first copy is created in response to generating a first request to modify data of the data object.

3. The method of claim 1 wherein

the first and the second memory blocks are stored on a same volume.

4. The method of claim 1 further comprising:

accessing the first memory block in response to receiving a request to read data of the data object if the request is received before the data object is remapped to the second memory block; and

accessing the second memory block in response to receiving the request to read data of the data object if the request is received after the data object is remapped to the second memory block.

5. The method of claim 1 :

wherein mapping the data object to the first memory block comprises creating the first entry, wherein the first entry maps the data object to the first memory block; and

wherein remapping the data object to the second memory block comprises creating a second entry, wherein the second entry remaps the data object to the second memory block.

6. The method of claim 5 , wherein the updating further comprises:

setting the first value to a second state to indicate that the first memory block does not store the current version of data of the data object, wherein

before remapping the data object to the second memory block, the first entry comprises a first value set to a first state to indicate the first memory block stores a current version of data of the data object, and

the second entry comprises a second value set to the first state to indicate that the second memory block stores the current version of data of the data object.

7. The method of claim 6 further comprising:

resetting the first value to the first state to indicate that the first memory block stores the current version of data of the data object; and

setting the second value to the second state to indicate that the second memory block does not store the current version of data of the data object.

8. A memory that stores instructions executable by a computer system, wherein the computer system implements a method in response to executing the instructions, the method comprising:

creating an allocation table, wherein

the allocation table comprises a first entry associated with a first memory block, and

the first entry comprises a first flag indicating whether data in the first memory block is current;

mapping a data object to the first memory block;

updating the allocation table to reflect the mapping the data object to the first memory block, wherein the updating comprises

updating the first entry to indicate the first memory block is current;

creating a first copy of data contents of the first memory block;

modifying the first copy to create a first modified data;

allocating a second memory block in response to the modifying the first copy;

storing the first modified data in the second memory block;

remapping the data object to the second memory block; and

wherein

the first memory block is distinct from the second memory block.

9. The memory of claim 8 wherein the first copy is created in response to generating a first request to modify data of the data object.

10. The memory of claim 8 wherein

the first and the second memory blocks are stored on a same volume.

11. The memory of claim 8 wherein the method further comprises:

accessing the first memory block in response to receiving a request to read data of the data object if the request is received before the data object is remapped to the second memory block; and

accessing the second memory block in response to receiving the request to read data of the data object if the request is received after the data object is remapped to the second memory block.

12. The memory of claim 8 :

wherein mapping the data object to the first memory block comprises creating a first entry, wherein the first entry maps the data object to the first memory block; and

wherein remapping the data object to the second memory block comprises creating a second entry, wherein the second entry remaps the data object to the second memory block.

13. The memory of claim 12 , wherein the updating further comprises:

setting the first value to a second state to indicate that the first memory block does not store the current version of data of the data object, wherein

before remapping the data object to the second memory block, the first entry comprises a first value set to a first state to indicate the first memory block stores a current version of data of the data object, and

the second entry comprises a second value set to the first state to indicate that the second memory block stores the current version of data of the data object.

14. The memory of claim 12 wherein the method further comprises:

resetting the first value to the first state to indicate that the first memory block stores the current version of data of the data object; and

setting the second value to the second state to indicate that the second memory block does not store the current version of data of the data object.

15. A system comprising:

a computer system coupled to a memory device;

wherein the computer system comprises a memory that stores executable instructions, wherein the computer system implements a method in response to executing the instructions, the method comprising:

creating an allocation table, wherein

the allocation table comprises a first entry associated with a first memory block, and

the first entry comprises a first flag indicating whether data in the first memory block is current;

mapping a data object to the first memory block;

updating the allocation table to reflect the mapping the data object to the first memory block, wherein the updating comprises

updating the first entry to indicate the first memory block is current;

creating a first copy of data contents of the first memory block;

modifying the first copy to create a first modified data;

allocating a second memory block in response to the modifying the first copy;

storing the first modified data in the second memory block;

remapping the data object to the second memory block;

updating the allocation table to reflect the remapping the data object to the second memory block, wherein the updating comprises

creating a second entry in the allocation table associated with the second memory block,

updating the first entry to indicate the first memory block is not current, and

updating the second entry to indicate the second memory block is current;

creating a second copy of the first modified data;

modifying the second copy to create a second modified data;

allocating a third memory block in response to the modifying the second copy;

storing the second modified data in the third memory block;

remapping the data object to the third memory block;

updating the allocation table to reflect the mapping the data object to the third memory block, wherein the updating comprises

creating a third entry in the allocation table associated with the third memory block,

updating the second entry to indicate the second memory block is not current, and

updating the third entry to indicate the third memory block is current; and

wherein

the first memory block is distinct from the second memory block and the second memory block is distinct from the third memory block.

16. The system of claim 15 wherein the first copy is created in response to a first request to modify data of the data object.

17. The system of claim 15 wherein the method further comprises:

accessing the first memory block in response to receiving a request to read data of the data object if the request is received before the data object is remapped to the second memory block;

accessing the second memory block in response to receiving the request to read data of the data object if the request is received after the data object is remapped to the second memory block and if the request is received before the data object is remapped to the third memory block; and

accessing the third memory block in response to receiving the request to read data of the data object if the request is received after the data object is remapped to the third memory block.

18. A method comprising:

creating an allocation table corresponding to a file, wherein

the file comprises a first memory block, and

the allocation table comprises a first entry associated with the first memory block, and

the first entry comprises a first flag indicating whether the first memory block is current;

mapping a data object to the first memory block;

updating the allocation table to reflect the mapping the data object to the first memory block,

wherein the updating comprises

updating the first entry to indicate the first memory block is current;

creating a first copy of data contents of the first memory block;

modifying the first copy to create a first modified data;

allocating a second memory block in response to the modifying the first copy;

storing the first modified data in the second memory block;

remapping the data object to the second memory block;

updating the allocation table to reflect the remapping the data object to the second memory block, wherein the updating comprises

creating a second entry in the allocation table associated with the second memory block,

updating the first entry to indicate the first memory block is not current, and

updating the second entry to indicate the second memory block is current;

creating a second copy of the first modified data;

modifying the second copy to create a second modified data;

allocating a third memory block in response to the modifying the second copy;

storing the second modified data in the third memory block;

remapping the data object to the third memory block;

updating the allocation table to reflect the mapping the data object to the third memory block,

wherein the updating comprises

creating a third entry in the allocation table associated with the third memory block,

updating the second entry to indicate the second memory block is not current, and

updating the third entry to indicate the third memory block is current; and

wherein

the first memory block is distinct from the second memory block and the second memory block is distinct from the third memory block, and

after each remapping, the data object is mapped to a most recently allocated memory block.

19. The method of claim 18 further comprising:

accessing the third memory block in response to receiving an instruction for accessing the data object.

20. The method of claim 18 wherein

the first copy is created in response to generating a first request to modify data of the data object.

21. The method of claim 18 wherein

the first, second, and third memory blocks are stored on the same volume.

22. The method of claim 18 further comprising:

accessing the first memory block in response to receiving a request to read data of the data object if the request is received before the data object is remapped to the second memory block;

accessing the second memory block in response to receiving the request to read data of the data object if the request is received after the data object is remapped to the second memory block and if the request is received before the data object is remapped to the third memory block; and

accessing the third memory block in response to receiving the request to read data of the data object if the request is received after the data object is remapped to the third memory block.

23. The method of claim 18 :

wherein mapping the data object to the first memory block comprises creating the first entry, wherein the first entry maps the data object to the first memory block;

wherein remapping the data object to the second memory block comprises creating a second entry, wherein the second entry remaps the data object to the second memory block; and

wherein remapping the data object to the third memory block comprises creating a third entry, wherein the third entry remaps the data object to the third memory block.

24. The method of claim 23 wherein the updating further comprises:

setting the first value to a second state to indicate that the first memory block does not store the current version of data of the data object, wherein

before remapping the data object to the second memory block, the first entry comprises the first value set to a first state to indicate the first memory block stores a current version of data of the data object, and

the second entry comprises a second value set to the first state to indicate that the second memory block stores the current version of data of the data object.

25. The method of claim 24 further comprising:

resetting the first value to the first state to indicate that the first memory block stores the current version of data of the data object; and

setting the second value to the second state to indicate that the second memory block does not store the current version of data of the data object.

26. A memory that stores instructions executable by a computer system, wherein the computer system implements a method in response to executing the instructions, the method comprising:

creating an allocation table corresponding to a file, wherein

the file comprises a first memory block, and

the allocation table comprises a first entry associated with the first memory block, and

the first entry comprises a first flag indicating whether the first memory block is current;

mapping a data object to the first memory block;

updating the allocation table to reflect the mapping the data object to the first memory block,

wherein the updating comprises

updating the first entry to indicate the first memory block is current;

creating a first copy of data contents of the first memory block;

modifying the first copy to create a first modified data;

allocating a second memory block in response to the modifying the first copy;

storing the first modified data in the second memory block;

remapping the data object to the second memory block;

updating the allocation table to reflect the remapping the data object to the second memory block, wherein the updating comprises

creating a second entry in the allocation table associated with the second memory block,

updating the first entry to indicate the first memory block is not current, and

updating the second entry to indicate the second memory block is current;

creating a second copy of the first modified data;

modifying the second copy to create a second modified data;

allocating a third memory block in response to the modifying the second copy;

storing the second modified data in the third memory block;

remapping the data object to the third memory block;

updating the allocation table to reflect the mapping the data object to the third memory block,

wherein the updating comprises

creating a third entry in the allocation table associated with the third memory block,

updating the second entry to indicate the second memory block is not current, and

updating the third entry to indicate the third memory block is current; and

wherein

the first memory block is distinct from the second memory block and the second memory block is distinct from the third memory block, and

after each remapping, the data object is mapped to a most recently allocated memory block.

27. The memory of claim 26 wherein

the first copy is created in response to generating a first request to modify data of the data object.

28. The memory of claim 26 wherein

the first, second, and third memory blocks are stored on the same volume.

29. The memory of claim 26 wherein the method further comprises:

accessing the first memory block in response to receiving a request to read data of the data object if the request is received before the data object is remapped to the second memory block;

accessing the second memory block in response to receiving the request to read data of the data object if the request is received after the data object is remapped to the second memory block and if the request is received before the data object is remapped to the third memory block; and

accessing the third memory block in response to receiving the request to read data of the data object if the request is received after the data object is remapped to the third memory block.

30. The memory of claim 26 :

wherein mapping the data object to the first memory block comprises creating the first entry, wherein the first entry maps the data object to the first memory block;

wherein remapping the data object to the second memory block comprises creating a second entry, wherein the second entry remaps the data object to the second memory block; and

wherein remapping the data object to the third memory block comprises creating a third entry, wherein the third entry remaps the data object to the third memory block.

31. The memory of claim 30 wherein the updating further comprises:

setting the first value to a second state to indicate that the first memory block does not store the current version of data of the data object, wherein

before remapping the data object to the second memory block, the first entry comprises the first value set to a first state to indicate the first memory block stores a current version of data of the data object, and

the second entry comprises a second value set to the first state to indicate that the second memory block stores the current version of data of the data object.

32. The memory of claim 31 wherein the method further comprises:

resetting the first value to the first state to indicate that the first memory block stores the current version of data of the data object; and

setting the second value to the second state to indicate that the second memory block does not store the current version of data of the data object.

33. The memory of claim 26 wherein the method further comprises:

accessing the third memory block in response to receiving an instruction for accessing the data object.

Assignments (14)
AMENDMENT NO. 1 TO PATENT SECURITY AGREEMENT Recorded Apr 8, 2025
From: VERITAS TECHNOLOGIES LLC; COHESITY, INC.
To: JPMORGAN CHASE BANK, N.A.
Reel/Frame 070779/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 26, 2025
From: VERITAS TECHNOLOGIES LLC
To: COHESITY, INC.
Reel/Frame 070335/0013 →
RELEASE OF SECURITY INTEREST Recorded Dec 16, 2024
From: ACQUIOM AGENCY SERVICES LLC, AS COLLATERAL AGENT
To: VERITAS TECHNOLOGIES LLC (F/K/A VERITAS US IP HOLDINGS LLC)
Reel/Frame 069712/0090 →
RELEASE OF SECURITY INTEREST Recorded Dec 13, 2024
From: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
To: VERITAS TECHNOLOGIES LLC
Reel/Frame 069634/0584 →
SECURITY INTEREST Recorded Dec 9, 2024
From: VERITAS TECHNOLOGIES LLC; COHESITY, INC.
To: JPMORGAN CHASE BANK. N.A.
Reel/Frame 069890/0001 →
ASSIGNMENT OF SECURITY INTEREST IN PATENT COLLATERAL Recorded Nov 25, 2024
From: BANK OF AMERICA, N.A., AS ASSIGNOR
To: ACQUIOM AGENCY SERVICES LLC, AS ASSIGNEE
Reel/Frame 069440/0084 →
TERMINATION AND RELEASE OF SECURITY IN PATENTS AT R/F 037891/0726 Recorded Nov 30, 2020
From: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS COLLATERAL AGENT
To: VERITAS US IP HOLDINGS, LLC
Reel/Frame 054535/0814 →
SECURITY INTEREST Recorded Aug 20, 2020
From: VERITAS TECHNOLOGIES LLC
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 054370/0134 →
MERGER AND CHANGE OF NAME Recorded Apr 18, 2016
From: VERITAS US IP HOLDINGS LLC; VERITAS TECHNOLOGIES LLC
To: VERITAS TECHNOLOGIES LLC
Reel/Frame 038455/0752 →
SECURITY INTEREST Recorded Feb 23, 2016
From: VERITAS US IP HOLDINGS LLC
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS COLLATERAL AGENT
Reel/Frame 037891/0726 →
SECURITY INTEREST Recorded Feb 23, 2016
From: VERITAS US IP HOLDINGS LLC
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 037891/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 4, 2016
From: SYMANTEC CORPORATION
To: VERITAS US IP HOLDINGS LLC
Reel/Frame 037697/0412 →
CHANGE OF NAME Recorded Oct 1, 2007
From: VERITAS OPERATING CORPORATION
To: SYMANTEC OPERATING CORPORATION
Reel/Frame 019899/0213 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 24, 2007
From: COULTER, TIMOTHY S.; KRISHNAMURTHY, RAGHU; BOTES, PAR A.
To: VERITAS OPERATING CORPORATION
Reel/Frame 019202/0459 →
Continuity (1)
Continuation In Part 10881320 · Jun 30, 2004